我想使用API​​在Youtube上删除我频道中的视频

时间:2012-01-03 12:28:12

标签: c# .net youtube-api

这是我的代码:

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);

代码在最后一行中断,表明对象引用未设置为对象。

4 个答案:

答案 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是否具有有效值。