디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

youtube opensearch 인터페이스를 이용한 유튜브 검색

키즈라엘갤로그로 이동합니다. 2009.12.18 18:34:15
조회 102 추천 0 댓글 2


        public static GetListResult<YouTubeEntryEntity> GetListVideo(string searchWord, int? startIdx, byte? maxresult)
        {
            List<string> queryArgs = new List<string>();

            if (searchWord != null)
            {
                queryArgs.Add(string.Format("q={0}", HttpUtility.UrlEncode(searchWord, Encoding.UTF8)));
            }
            queryArgs.Add(string.Format("start-index={0}", startIdx.GetValueOrDefault(1)));
            queryArgs.Add(string.Format("max-results={0}", maxresult.GetValueOrDefault(6)));

            string url = "http://gdata.youtube.com/feeds/api/videos?" + string.Join("&", queryArgs.ToArray());

            GetListResult<YouTubeEntryEntity> retVal = null;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));

            using (WebResponse response = request.GetResponse())
            {
                using (Stream responseStream = response.GetResponseStream())
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(responseStream);

                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                    XmlNode feedNode = doc.DocumentElement;

// 네임스페이스 매니저 더해주기
                    foreach (XmlAttribute namespaceSpec in feedNode.Attributes)
                    {
                        string namespaceName = namespaceSpec.Name.Replace("xmlns","");
                        if ( namespaceName == string.Empty)
                        {
                            namespaceName = "atom";
                        }
                        else
                        {
                            namespaceName = namespaceName.Replace(":", "");
                        }
                        nsmgr.AddNamespace(namespaceName, namespaceSpec.Value);
                    }

                    try
                    {
                        XmlNode totalResultNode = feedNode.SelectSingleNode("openSearch:totalResults", nsmgr);
                        ListOutputEntity listOutput = new ListOutputEntity();
                        listOutput.CntTotal = Convert.ToInt32(totalResultNode.InnerText);

                        XmlNodeList entries = feedNode.SelectNodes("atom:entry",nsmgr);
                        listOutput.CntRow = entries.Count;

                        List<YouTubeEntryEntity> youtubeEntries = new List<YouTubeEntryEntity>();

                        foreach (XmlNode entry in entries)
                        {
                            YouTubeEntryEntity youtubeEntry = new YouTubeEntryEntity();

                            XmlNode idStringNode = entry.SelectSingleNode("atom:id",nsmgr);
                            youtubeEntry.Id = idStringNode.InnerText.Replace("http://gdata.youtube.com/feeds/api/videos/", "");

                            XmlNode titleNode = entry.SelectSingleNode("atom:title",nsmgr);
                            youtubeEntry.Title = titleNode.InnerText;

                            XmlNode keywordNode = entry.SelectSingleNode("media:group/media:keywords", nsmgr);
                            youtubeEntry.Keywords = keywordNode.InnerText;

                            youtubeEntries.Add(youtubeEntry);
                        }

                        retVal = new GetListResult<YouTubeEntryEntity>(youtubeEntries, listOutput);
                    }
                    catch (Exception ex)
                    {
                        ex = ex = null;
                    }
                }
            }

            return retVal;
        }
---------------------------------------------------------
유튜브 openSearch를 사용해서 유튜브에 있는 동영상을 검색하고, 가져온 xml을 해석하는 부분이다.YouTubeEntryEntity니 GetListResult니 하는건 내가 정의한 거니까 신경쓰지 말고HttpWebRequest 를 이용해서 HTTP를 통해 어떻게 XML을 가져오는지 그 가져온 XML을 XMLDocument를사용해서 어떻게 해석하는지 보면 된다.
조낸 고생했던 부분이 SelectNodes나 SelectSingleNode를 할 때, 네임스페이스 매니저가 정의되어 있어야 한다는 점인데 documentElement인 feed node를 보면

<feedxmlns=\'http://www.w3.org/2005/Atom\'xmlns:app=\'http://purl.org/atom/app#\'xmlns:media=\'http://search.yahoo.com/mrss/\'xmlns:openSearch=\'http://a9.com/-/spec/opensearchrss/1.0/\'xmlns:gd=\'http://schemas.google.com/g/2005\'xmlns:yt=\'http://gdata.youtube.com/schemas/2007\'>

란 식으로 정의가 되어 있다. 주의할 점은 xmlns 즉 기본 네임스페이스에 해당하는 부분이 ""가 아니라 "atom"으로 넣어주고 select시에도 atom:entry 식으로 검색해야 된다는 점이다.

저번에 유튜브 업로드하고 나서 받아온 feed데이터를 처리하다가 잘 안되서 그냥 집어쳤는데, 이번에 구글링하면서 제대로 된 코드를 만들었다.

@슛.. 프겔에 프로그램 관련글 첨써보는듯

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 외모와 달리 술 일절 못 마셔 가장 의외인 스타는? 운영자 24/07/01 - -
163869 C++를 조집시다. C++은 나의 적 [3] 구루구루(115.21) 09.12.23 170 0
163868 게임업계 취직에 대해서 여쭤볼게 있는데요.. [3] 흠점무갤로그로 이동합니다. 09.12.23 240 0
163867 위대한 일은 말이야 [3] ㅇㅇ(112.149) 09.12.23 91 0
163866 아이튠즈+아이폰 쓰다가 발견한 이상한 점 2개 [2] 오사카(221.153) 09.12.23 155 0
163865 은퇴하고 아이돌가수로 전직해야지 [1] 푸바(118.34) 09.12.23 100 0
163864 자기가 능력자라고 생각하는 횽들은 봅니다. [10] 비능력자(58.236) 09.12.23 177 0
163861 할 수 있다고 해서는 안댐 [1] prismatic갤로그로 이동합니다. 09.12.23 49 0
163860 파워포인트 할줄아시는분 도토리50개드림 소원좀풀어주세요 .... [3] 나니v갤로그로 이동합니다. 09.12.23 90 0
163859 드디어 전역했다 [5] 양희철갤로그로 이동합니다. 09.12.23 123 0
163858 java 하는 횽들한테 묻습니당 [7] 연어갤로그로 이동합니다. 09.12.22 149 0
163856 브라우저 얘기가 나온김에 한마디만 [10] ㅂㅎㅅ(118.8) 09.12.22 127 0
163855 횽들 PSP 프로그래밍 하려면 어셈블리쪽도 잘 해야될까 [8] 맑탉앉앍꿇헒갤로그로 이동합니다. 09.12.22 157 0
163854 똑같은거 여러번 질문해서 죄송해요 ㅠㅠ html에서 POST에 대해서; [1] 꿈계(210.205) 09.12.22 58 0
163852 비쥬얼베이직 소스인데 폼파일좀 만들어주세요 [5] 대대(123.111) 09.12.22 81 0
163851 병맛나는 1주일이 될 것 같스빈 prismatic갤로그로 이동합니다. 09.12.22 33 0
163850 나 아무래도 한류 스타 될 거 가틈... [3] 오사카(221.153) 09.12.22 144 0
163849 X슨별 [1] 어떡해갤로그로 이동합니다. 09.12.22 86 0
163848 대체 익스플로러 왜 까이는 거임?????? [12] ㅇㅇㅇ(121.140) 09.12.22 171 0
163847 님들아 제가 컴 살려는데 견적좀. [4] 씬입사원갤로그로 이동합니다. 09.12.22 76 0
163845 컴퓨터 포멧을 생각하는데 removable drive 가 뭔가요 [5] Remake갤로그로 이동합니다. 09.12.22 152 0
163844 키즈라엘 횽!!!! [7] 어떡해갤로그로 이동합니다. 09.12.22 80 0
163842 어떡해 일기 #15 :: fflush(stdin) [11] 어떡해갤로그로 이동합니다. 09.12.22 1483 0
163839 어디 수학기호 읽는 법에 대해 나온 문서없나? [3] 이모군(116.127) 09.12.22 254 0
163838 그 누구도 날 이해해주지 않아 [4] DMW(125.138) 09.12.22 143 0
163837 시발 무서워서 못앉아있겠다...ㅇ [5] Only.갤로그로 이동합니다. 09.12.22 146 0
163836 이거 보고도 적분이 자랑스럽지 않으면 수학인이 아니다. [4] ∫ 2t dt=t²+c갤로그로 이동합니다. 09.12.22 173 0
163835 유전 무죄다. [4] 피로토스갤로그로 이동합니다. 09.12.22 158 0
163834 여느님, 여동생, 누나, 마느님계신 잉여흉들 보라능 [9] 키즈라엘갤로그로 이동합니다. 09.12.22 145 0
163833 Object C 하시는분 있나요? [4] ㅇㅇ(210.107) 09.12.22 141 0
163832 헤더파일 같은건 어디서 다운받아요?? [1] 농락(211.176) 09.12.22 51 0
163831 c구조체에도 함수 넣을수잇다는게 진짜야? [4] 이쁜뇌종양갤로그로 이동합니다. 09.12.22 174 0
163829 형들 열혈강의 C책왔어여 아..(112.150) 09.12.22 62 0
163828 ############데이터베이스 만드는법 질문############## [6] Sandisk갤로그로 이동합니다. 09.12.22 119 0
163827 이거 보고도 한글이 자랑스럽지 않으면 한국인이 아니다 [4] ㅎ3(112.222) 09.12.22 217 0
163826 6.0에선 경고 안뜨는데 왜 2008에선 경고 뜨죠?? [3] 내귀에캔디(211.176) 09.12.22 1191 0
163825 S기업 달콤한 열흘간의 '강제' 휴가 [4] (121.130) 09.12.22 187 0
163824 싸이를 접고 전부 비공개로 해두었는데 누가 계속 들어온다 [2] (58.141) 09.12.22 117 0
163823 Alice in Wonderland' Trailer 5 [1] 좇문가갤로그로 이동합니다. 09.12.22 52 0
163822 한양공고가 그렇게 좋나요? Rei@디씨갤로그로 이동합니다. 09.12.22 111 0
163821 앞으로 프갤 예상 글 [4] ㅇㅇㅃ갤로그로 이동합니다. 09.12.22 147 0
163820 세상에서 제일 싫은게 머냐고 물어본다면??? [1] ㅈㅈ(210.217) 09.12.22 71 0
163819 보너스 나왔다! 우왕ㅋ굳ㅋ [2] 중달(121.166) 09.12.22 96 0
163817 파워포인트 잘하시는분 ....싸이월드 도토리50개드림. [3] 나니v갤로그로 이동합니다. 09.12.22 64 0
163815 코딩질은 잘되가시는지? cp(118.221) 09.12.22 37 0
163814 메소드 이름 결정 [21] (124.137) 09.12.22 175 0
163812 비주얼베이직 6.0 하실 줄 아시는분???????? ㅠㅠㅠㅠㅠㅠㅠㅠ [4] 살려주세요(124.197) 09.12.22 169 0
163811 C언어 공부하기 좋은곳 어디 없나연? [5] 초보초보(218.49) 09.12.22 144 0
163809 오랜만에 고기란 걸 먹었습니다. [5] algo갤로그로 이동합니다. 09.12.22 91 0
163808 핸드폰 바꿀려는데.. 혹시 잘 아느 횽아 있나요? [3] 허허벌판갤로그로 이동합니다. 09.12.22 95 0
163807 대ㅋ한ㅋ민ㅋ국ㅋ남ㅋ자ㅋ [7] NaCl갤로그로 이동합니다. 09.12.22 193 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2