風は北向き ブログ

時の狭間で 今 お前を待つ

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のライブラリで作ってみようと思います。