这是我的代码:
YouTubeService serv = new YouTubeService("myDeleteService", YOUTUBE_DEVELOPER_KEY);
serv.setUserCredentials(USERNAME, PASSWORD);
YouTubeRequestSettings settings = new YouTubeRequestSettings(YOUTUBE_CHANNEL, YOUTUBE_DEVELOPER_KEY);
YouTubeRequest request = new YouTubeRequest(settings);
string feedUrl = String.Format("http://gdata.youtube.com/feeds/api/users/{0}/uploads", YOUTUBE_CHANNEL);
Feed<Video> videoFeed = request.Get<Video>(new Uri(feedUrl));
Uri videoEntryUrl = new Uri("http://gdata.youtube.com/feeds/api/videos/" + VideoId);
Video video = request.Retrieve<Video>(videoEntryUrl);
Video vid = (from vi in videoFeed.Entries
where vi.VideoId == VideoId
select vi).First<Google.YouTube.Video>();
request.Delete(vid);
代码在最后一行中断,表明对象引用未设置为对象。
答案 0 :(得分:4)
这似乎是Google YouTube API的内部问题。好的请求和视频对象我遇到了同样的问题。 (Google API v1.9.0.0)
更新:请查看下面的Claudio的回复。它是正确的。我收到了一封来自支持的电子邮件,忘了更新这个答案:
这个uri会失败: “http://gdata.youtube.com/feeds/api/videos/”+ videoID
这将有效: “http://gdata.youtube.com/feeds/api/users/”+ accountName +“/ uploads /”+ videoID
答案 1 :(得分:3)
如果您使用正确的网址,即/ upload Feed中的网址,则删除方法会按预期工作。
/ videos Feed中的条目没有编辑网址,该网址必须用于发送删除请求。我刚刚更新了库(rev.1169)以返回更有意义的ArgumentNullException而不是通用的null引用。
请使用此代码删除您上传的视频:
YouTubeRequestSettings settings = new YouTubeRequestSettings(YOUTUBE_CHANNEL, YOUTUBE_DEVELOPER_KEY, USERNAME, PASSWORD);
YouTubeRequest request = new YouTubeRequest(settings);
Uri videoEntryUrl = new Uri(String.Format("http://gdata.youtube.com/feeds/api/users/{0}/uploads/{1}", YOUTUBE_CHANNEL, VIDEO_ID));
Video video = request.Retrieve<Video>(videoEntryUrl);
request.Delete(video);
答案 2 :(得分:1)
我有以下内容:
CreateAuthenticatedRequest().Service.Delete(new Uri(GetVideoUploadUrl(videoId)));
public static 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);
}
private static string GetVideoUploadUrl(string videoId)
{
return string.Format("http://gdata.youtube.com/feeds/api/users/default/uploads/{0}", videoId);
}
答案 3 :(得分:0)
这意味着您的LINQ查询可能没有返回任何内容,即null。检查调试器中的vid
变量或更好,然后设置if条件以查看vid
是否具有有效值。