Я хочу удалить видео со своего канала на Youtube с помощью API - PullRequest
5 голосов
/ 03 января 2012

Это мой код:

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

Код разрывается на последней строке, указывая, что ссылка на объект не установлена ​​для объекта.

Ответы [ 5 ]

4 голосов
/ 18 января 2012

Эта проблема связана с API Google YouTube.У меня та же проблема с хорошими объектами запроса и видео.(Google API v1.9.0.0)

ОБНОВЛЕНИЕ: посмотрите ответ Клаудио ниже.Это правильно.Я получил письмо от службы поддержки и забыл обновить этот ответ:

этот uri не удастся: "http://gdata.youtube.com/feeds/api/videos/" + videoID

это будет работать:" http://gdata.youtube.com/feeds/api/users/" + accountName + "/uploads / "+ videoID

3 голосов
/ 12 апреля 2012

Метод Delete работает, как и ожидалось, если вы используете правильный URL-адрес, то есть тот, что из фида / upload.

Записи в фиде / videos не имеют URL-адреса редактирования, который должен использоваться для отправки запроса на удаление. Я только что обновил библиотеку (rev. 1169), чтобы она возвращала более значимое исключение ArgumentNullException вместо общей нулевой ссылки.

Пожалуйста, используйте этот код для удаления загруженного видео:

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);
1 голос
/ 27 марта 2012

У меня есть следующее:

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);
    }
0 голосов
/ 27 августа 2015

Я потратил более 5 часов, пытаясь удалить видео с официальным примером кода:

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

, и у меня было исключение с кодом статуса 410.Я не знаю почему, но в соответствии с ответом ScottE этот код удаляет видео:

YouTubeRequestSettings settings = new YouTubeRequestSettings(YOUTUBE_CHANNEL, YOUTUBE_DEVELOPER_KEY, USERNAME, PASSWORD);
YouTubeRequest request = new YouTubeRequest(settings);
Uri uri = new Uri(String.Format("http://gdata.YouTube.com/feeds/api/users/default/uploads/{0}", videoId));
request.Service.Delete(uri);

Поэтому я использовал request.Service.Delete(uri);, за исключением request.Delete(video);

0 голосов
/ 03 января 2012

Это означает, что ваш запрос LINQ, вероятно, ничего не возвращает, т. Е. Ноль.Проверьте переменную vid в отладчике или еще лучше, поставьте условие if, чтобы увидеть, имеет ли vid допустимое значение или нет.

...