Youtube .net api - 在播放列表中搜索

时间:2011-06-13 19:19:06

标签: .net youtube google-api youtube-api

当我尝试在谷歌播放列表中搜索时,我收到403(禁止)错误。如果我删除.Query它工作正常。我知道凭证工作正常,因为我在应用程序的其他地方使用它们没有问题。

我是以错误的方式解决这个问题,还是这不可能?我正在使用api的1.8.0.0版本(新下载)。

void SearchPlaylistVideos(string playListId, string query)
{
    YouTubeQuery videoQuery = new YouTubeQuery(String.Format("http://gdata.youtube.com/feeds/api/playlists/{0}", playListId));
    videoQuery.Query = query;

    Feed<Video> feed = CreateAuthenticatedRequest().Get<Video>(videoQuery);

    foreach (Video entry in feed.Entries) {
        //Response.Write("<br />" + entry.Title);
    }
}

YouTubeRequest CreateAuthenticatedRequest()
{
    YouTubeRequestSettings settings = new YouTubeRequestSettings
                                        (
                                        ConfigurationManager.AppSettings["GData.AppName"],
                                        ConfigurationManager.AppSettings["GData.DeveloperKey"],
                                        ConfigurationManager.AppSettings["GData.Email"],
                                        ConfigurationManager.AppSettings["GData.Password"]
                                        );

    settings.Timeout = 1000000;
    return new YouTubeRequest(settings);
}

2 个答案:

答案 0 :(得分:2)

只是嗅到了代码正在发出的HTTP请求 - 你得到了错误403,因为

  

此服务不支持'q'参数。

这听起来像YouTube API不支持特定播放列表中的全文搜索。实际上YouTubeQuery.Query方法只是在你的基础URI中添加一个字符串,就像这样(你可以看一下FeedQuery和YouTubeQuery类的来源):

url = baseUrl + string.Format("?q={0}", this.Query)

因此,对于.Query,您的最终网址是这样的(如果query = "life"):

http://gdata.youtube.com/feeds/api/playlists/595A40209CB17411?q=life

答案 1 :(得分:2)

我们遇到了类似的类似问题:我们的客户将YouTube查询字词输入“应用”,返回整个查询的结果,然后客户端选择视频以持久存储到App的数据库中。然后,我们可以让应用程序向客户端站点吐出自定义播放列表。然后,此网站的访问者可以搜索带有搜索字词的视频。我们使用Lucene.net在这些自定义“应用”列表上运行查询。根据您的情况,您能否:

  1. 使用播放列表ID查询YouTube。
  2. 保留或缓存结果(网址,标题,长度等)
  3. 使用Lucene对此集执行查询。
  4. 肯定会有更多的资源(存储,周期)密集,你可能需要快速掌握Lucene的API,但我同意Данаил,快速简便的方法(YouTube允许在播放列表上进行自定义查询)不起作用