YouTube API 動画検索3
普通に.net frameworkのライブラリだけで作ってみたのがこんな感じです。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.ServiceModel.Syndication; using System.Text; using System.Xml; using System.Web; public class YtSearchStdNet { const string YT_SEARCH_URI = "http://gdata.youtube.com/feeds/api/videos?orderby=published&max-results=10&start-index=1&v=2"; string queryParam = ""; string nextUri = ""; public List searchFirst(string query) { string encodedQueryString = System.Web.HttpUtility.UrlEncode(query, Encoding.GetEncoding("UTF-8")); nextUri = YtSearchStdNet.YT_SEARCH_URI + "&q=" + encodedQueryString; return searchNext(); } public List<SyndicationItem> searchNext() { List<SyndicationItem> retp = new List<SyndicationItem>(); if (nextUri == null || nextUri.Length <= 0) { return null; } using (XmlReader rdr = XmlReader.Create(nextUri)) { nextUri = null; SyndicationFeed feed = SyndicationFeed.Load(rdr); retp.AddRange(feed.Items); foreach (SyndicationLink link in feed.Links) { if (link.RelationshipType == "next") { nextUri = link.Uri.ToString(); break; } } } return retp; } }
使い方はこんな感じです。
public void YtSearchStdNet_search() { List<SyndicationItem> ytEntries = null; YtSearchStdNet ytSearch = new YtSearchStdNet(); for (ytEntries = ytSearch.searchFirst("生田衣梨奈"); ytEntries != null && ytEntries.Count != 0; ytEntries = ytSearch.searchNext()) { foreach (SyndicationItem ytEntry in ytEntries) { string uri = ""; foreach (SyndicationLink sl in ytEntry.Links) { if (sl.RelationshipType == "alternate") { uri = sl.Uri.ToString(); break; } } Debug.WriteLine(ytEntry.Title + ":" + ytEntry.Id + ":" + uri); } } }
次は、YouTubeのライブラリで作ってみようと思います。