当我尝试在谷歌播放列表中搜索时,我收到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);
}
答案 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在这些自定义“应用”列表上运行查询。根据您的情况,您能否:
肯定会有更多的资源(存储,周期)密集,你可能需要快速掌握Lucene的API,但我同意Данаил,快速简便的方法(YouTube允许在播放列表上进行自定义查询)不起作用