使用 C# 和 Youtube API 1.6 管理 YouTube






4.96/5 (30投票s)
我描述了关于 Youtube 视频馈送的一些事情。
引言
这是我的第一篇文章。所以请指导我纠正我的错误。
此代码演示了如何从桌面访问 YouTube。在这里,您可以执行在 YouTube 中可以执行的相同操作。我在这里使用了 YouTube API 1.6。请下载相同的版本。在最新版本中,运行代码时可能会遇到一些错误。
Using the Code
这是一个客户端应用程序,它使用 Youtube API 1.6 .NET 客户端库与 YouTube 进行交互。在本文中,我将解释有关身份验证、视频提要、显示提要和分页的内容。
基本要求
- .NET 2.0 运行时
- Youtube API 1.6 SDK
- 开发者密钥(您可以从 http://code.google.com/apis/youtube/dashboard/ 获取)
- 用于播放视频的视频播放器。您可以使用 Windows 媒体播放器或 Flash 播放器。我在这里使用了 Shockwave 播放器来播放视频。
下载并安装 Youtube SDK 后,转到安装位置,您将在发行版的 Redist 子目录中找到所需的 DLL 文件。然后打开您的 IDE 并添加对 DLL 的引用(即 Google.Gdata.Client.dll、Google.Gdata.Extensions.dll、Google.Gdata.Youtube.dll)。
然后,导入以下命名空间
using Google.GData.Extensions;
using Google.GData.YouTube;
using Google.GData.Extensions.MediaRss;
using Google.YouTube
1:身份验证
要从客户端应用程序访问 YouTube,首先需要进行身份验证。以下代码显示了如何检查用户名和密码是否不正确。
YouTubeService service = new YouTubeService();
service.setUserCredentials(textBox1.Text , maskedTextBox1.Text);
//textbox1 contains username and maskedTextBox1 contains password
try{
service.QueryClientLoginToken();}
catch(System.Net.WebException e){MessageBox.Show(e.Message);}
要检查用户名和密码,您需要创建一个 YouTubeService
实例。该类的构造函数包含 3 个重载方法。创建对象后,使用 setUserCredentials
方法分配用户名和密码。然后调用 QueryClientLoginToken()
。此方法返回一个 string
(令牌),该令牌在用户凭据正确时对用户进行身份验证。否则,它将引发 System.Net.WebException
。
该令牌还可用于项目的进一步实现。但在本项目中,我用它来检查用户名和密码是否正确。然后我将其传递到下一个窗口表单以显示提要和搜索结果。
我使用了客户端登录身份验证进行查询。
要使用 clientlogin
身份验证,您必须提供正确的用户名和密码。请查看下面的代码
yousettings= new YouTubeRequestSettings("YouManager",devkey,username,password);
yourequest=new YouTubeRequest(yousettings);
上面的代码执行客户端登录身份验证。要执行每个操作,您需要 YouTubeRequest
类的实例。要创建实例,您需要传递设置,即 YoutubeRequestSettings
类的实例。要创建设置,您需要将应用程序名称、开发者密钥、用户名和密码传递给构造函数。此设置可用于 YouTubeRequest
类。当您进行查询时,您需要此 YouTubeRequest
实例。如果设置不正确,它将引发异常。
2:Youtube 视频提要
YouTube 视频提要是定期更新的视频摘要,以及其他详细信息,如作者、视频评论、观看次数等。在我们的应用程序中,我们使用视频提要来获取数据。YouTube API 提供了许多类型的提要。它们是视频提要、相关视频提要、视频响应提要、标准提要、用户收藏提要、播放列表提要。
Youtube 视频提要的通用语法
视频提要:"http://gdata.youtube.com/feeds/api/videos/videoID" Video ID 代表一个特定的视频。此 URL 返回一个特定的视频条目。
相关视频提要:"http://gdata.youtube.com/feeds/api/videos/videoID/related"。每个视频条目都包含相关的视频条目。
响应提要:"http://gdata.youtube.com/feeds/api/videos/videoID/responses"。
标准提要:标准提要包含反映 YouTube 用户行为的视频列表,例如最受欢迎和观看次数最多的视频提要,或由 YouTube 工作人员选择的视频,例如最近精选和移动视频提要。其中许多提要显示在 YouTube 网站的“视频”选项卡上。标准提要每隔几分钟更新一次。
http://gdata.youtube.com/feeds/api/standardfeeds/regionID/feedID_CATEGORY_NAME?time=timeID在上面的 URL 中,您可以看到 regionID
。区域 ID 用于获取特定国家的视频。如果您输入区域 ID 为 JP,您将仅获得来自日本的视频。feedID 指定提要的类型,即可能是最受欢迎或观看次数最多的等。类别名称用于获取特定类别的视频,即喜剧、体育等。timeID 用于获取特定时间的视频,即可能是今天、本周、本月或所有时间。并且不一定需要指定 regionID
、time
或 category
名称。但 feedID
是必需的。
用户收藏提要:“http://gdata.youtube.com/feeds/aspi/users/default/favorites" - 当您想访问或修改用户条目时,可以使用此链接。
“http://gdata.youtube.com/feeds/aspi/users/username/favorites" - 当您想访问其他用户的条目时,可以使用此链接。
用户播放列表提要:“http://gdata.youtube.com/feeds/api/users/default/playlist" - 此链接显示播放列表信息。此链接用于修改播放列表数据。
“http://gdata.youtube.com/feeds/api/users/username/playlist" - 此链接用于访问其他用户的播放列表。
3:显示提要
要显示视频提要,我们首先需要 feedURL
(如上所述)。在项目中,我使用了 GetfeedUrl
函数来获取标准提要的 feedurl
。
string tempUrl,tfeedUrl,ttimeUrl,tcatUrl;
tempUrl = "http://gdata.youtube.com/feeds/api/standardfeeds/";
tfeedUrl=tcatUrl =ttimeUrl = "";
switch (feed)
{
case 0:tfeedUrl="top_rated";break;
case 1: tfeedUrl = "top_favorites";break;
case 2: tfeedUrl = "most_viewed";break;
case 3: tfeedUrl = "most_popular";break;
case 4: tfeedUrl = "most_recent";break;
case 5: tfeedUrl = "most_discussed";break;
case 6: tfeedUrl = "most_responded";break;
case 7: tfeedUrl = "recently_featured";break;
}
switch (cat)
{
case 0: tcatUrl = "";break;
case 1: tcatUrl = "_Autos";break;
case 2: tcatUrl = "_Comedy";break;
case 3: tcatUrl = "_Education";break;
case 4: tcatUrl = "_Entertainment";break;
case 5: tcatUrl = "_Film";break;
case 6: tcatUrl = "_Howto";break;
case 7: tcatUrl = "_Music";break;
case 8: tcatUrl = "_News";break;
case 9: tcatUrl = "_People";break;
case 10: tcatUrl = "_Sports";break;
}
switch (time)
{
case 0: ttimeUrl = "?time=today";break;
case 1: ttimeUrl = "?time=this_week";break;
case 2: ttimeUrl = "?time=this_month";break;
case 3: ttimeUrl = "";break;
}
tempUrl = tempUrl + tfeedUrl + tcatUrl + ttimeUrl;
feedUrl = tempUrl;
上面的代码用于获取 feedUrl
。我使用了组合框来获取类别 feedtype 和时间。例如:我想获取今天的热门视频,那么 feed URL 将如下所示:
tempUrl="http://gdata.youtube.com/feeds/api/standardfeeds/"
tfeedUrl="top_rated" , tcatUrl="" and ttimeUrl="?time=today". Now feedurl is
tempurl+tfeedurl+tcaturl+ttimeurl.
i.e. "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?time=today".
一旦获得 feedurl
,您就可以使用该 URL 显示提要。以下代码显示了如何使用 feedUrl
显示。
//
Feed<video> videofeed = yourequest.Get<Video>(new Uri(feedUrl));DisplayFeed();
public void DisplayFeed()
{
lvcount = 0;
lvDisplay.Items.Clear();
foreach (Video entry in videofeed.Entries)
{
ListDisplay(entry);
videocount++;
}
}
要显示提要,首先需要创建提要对象。然后您可以使用 get
方法分配视频提要。在这里,您使用 YouTubeRequest
对象调用 get
方法。Display feed 函数用于显示提要。Feed<video>
对象是视频的集合。它最多包含 25 个视频。因此,您需要使用迭代器条目来显示视频。在此项目中,我使用了 Listview
来显示视频条目。ListDisplay(entry)
函数用于显示每个视频条目。下图显示了 listview
控件中的显示。下图显示了 listview
显示。
借助 for
循环,我们将视频对象传递给 ListDisplay()
函数。ListDisplay
函数用于显示视频的内容。每个视频对象包含以下信息。标题、平均评分、观看次数、描述、作者、VideoID、评论次数、媒体位置、缩略图位置等。每个视频提要最多包含 25 个视频条目。因此,我创建了一个大小为 25 的 string
数组来存储这些详细信息。当用户单击列表项时,将显示其他内容。
要播放视频,请单击缩略图,它将 videoId
传递给用于播放视频的 Shockwave 对象。
url+="&autoplay=1";
上面的代码可用于以自动播放模式播放视频。这里 URL 从 medialocation
的第一个条目中获取。
foreach (Google.GData.YouTube.MediaContent mediaContent in video.Contents)
{
if (i == 1)break;
medialocations[lvcount] = mediaContent.Url;i++;
}
上面的代码用于获取 medialocation
。类似地,可以使用 MediaThumbnail
对象作为迭代器获取缩略图。
显示提要很容易,但显示播放列表信息略有不同。要显示播放列表的内容,首先需要获取播放列表 ID。
int i = 0;playlistfeed = request.GetPlaylistsFeed(user);
foreach (Playlist pl in playlistfeed.Entries)
{
if (i == cmbSubService.SelectedIndex)
{
p = pl;
break;
}
i++;
}
string[] temp = p.Id.Split(':');
int ind = temp.GetUpperBound(0);
feedUrl = "http://gdata.youtube.com/feeds/api/playlists/"+temp[ind]+"?v=2";
videofeed = request.Get<Video>(new Uri(feedUrl));DisplayFeed();
上面的代码显示了如何显示播放列表内容。playlistfeed
包含特定用户的播放列表列表。然后使用迭代器,我们可以获取每个播放列表。这里 cmbSubservice
是组合框。一旦您从 playlistfeed
获取了特定播放列表,您就需要使用 split 方法将播放列表 ID 存储在 string
中。这里 ind
指定了 split 函数生成的 string
数组中播放列表的 ID。然后您可以创建 feedUrl
。一旦获得 feedUrl
,您就可以使用 videofeed
获取内容,并且 DisplayFeed()
函数显示播放列表内容。在调用 DisplayFeed()
函数之前,必须检查播放列表是否包含任何视频。videofeed.totalresults
将提供有关视频条目数量的信息。您可以使用它在调用 DisplayFeed()
函数之前检查播放列表。
Uri Url = new Uri("http://gdata.youtube.com/feeds/api/videos/" + videoID);
Video video = yourequest.Retrieve<Video>(Url);
Feed<Comment> comment = yourequest.GetComments(video);
rtComents.Text = "";
foreach (Comment c in comment.Entries)
{
rtComents.Text += c.Content + "\n";
}
上面的代码用于显示特定视频的评论。首先,您需要创建一个视频 URL。接下来,创建一个视频对象。要接收评论,您需要使用 Getcomments(video)
函数创建一个评论提要对象。它是评论的集合,因此您需要 Comment
对象作为迭代器来显示评论。
4:分页
每个提要仅包含 25 个视频。因此,如果您想查看更多视频,则需要进行分页浏览。为此,我们需要使用 feedUrl
的start-index 功能。如果您未在 feedUrl
中指定 start-index,则默认为零。因此,它可用于显示 feedUrl
的其他页面。
sindex += 25;
if (feedUrl.Contains('?'))
{
tempUrl = feedUrl + "&start-index=" + sindex.ToString();
}
else
{
tempUrl = feedUrl + "?start-index=" + sindex.ToString();
}
videofeed = yourequest.Get<Video>(new Uri(tempUrl));
DisplayFeed();
上面的代码显示了如何导航到下一页。这里 sindex
变量存储 videofeed.start-index
,即第一页。List display 显示 25 个视频条目。因此,当您单击下一页时,sindex
需要增加 25。然后需要将其添加到 feedUrl
。添加后,videofeed
存储下一组视频。使用 Display feed 方法,我们可以显示下一组视频。
要导航到上一页,只需对 sindex
取负即可。
要跳转到特定页面,请使用以下代码
sindex = i * 25 + 1;
这里 sindex
存储开始索引。25 表示每页显示 25 个视频。i
表示要跳转的页码。
参考文献
历史
- 2011年1月7日:初始发布