2012-01-03 7 views
5

To jest mój kod:Chcę usunąć film z moim kanale na YouTube przy użyciu 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); 

Przerwy kod na ostatniej linii stwierdzające, że odwołanie do obiektu nie jest ustawiona na obiekcie.

Odpowiedz

4

To wydaje się być problemem wewnętrznym interfejsu API serwisu YouTube YouTube. Mam taki sam problem z dobrymi prośbami i obiektami wideo. (Google API v1.9.0.0)

AKTUALIZACJA: sprawdź odpowiedź Claudio poniżej. Jest poprawna. Otrzymałem e-maila z powrotem ze wsparcia i zapomniał zaktualizować tę odpowiedź:

to uri nie powiedzie: "http://gdata.youtube.com/feeds/api/videos/" + videoID

to wola praca: "http://gdata.youtube.com/feeds/api/users/" + ACCOUNTNAME + "/ uploads /" + videoID

+0

Jakieś rozwiązanie? Napotkałem ten sam problem. –

+0

Otrzymałem również ten błąd. Twoje rozwiązanie naprawdę mi pomoże. +1 za pomoc – Sukhjeevan

0

Oznacza to, że kwerenda LINQ prawdopodobnie nie zwróci nic, tj. Null. Sprawdź zmienną vid w debuggerze lub jeszcze lepiej, ustaw warunek if, aby sprawdzić, czy vid ma poprawną wartość, czy nie.

+0

Jeśli ostatnia linia jest gdzie jest błąd, a jego, dając mu wyjątku null następnie jego możliwe również, że obiekt żądania ma wartość NULL. Niewłaściwe programowanie pozwoliłoby na wystąpienie wyjątku tylko dlatego, że wideo ma wartość zerową. –

1

mam następujące:

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

metodę Delete działa zgodnie z oczekiwaniami, jeśli używasz właściwego adresu URL, np. z opłaty/uploadu re.

Wpisy w pliku/video feed nie mają adresu URL edycji, który należy użyć do wysłania żądania usunięcia. Właśnie zaktualizowałem bibliotekę (rev 1169), aby zwrócić bardziej znaczący ArgumentNullException zamiast ogólnego zerowego odniesienia.

Proszę użyć tego kodu, aby usunąć film wideo został przesłany:

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

spędziłem ponad 5 godzin, starając się usunąć wideo z oficjalnej przykładowy kod:

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

i ja miałem i wyjątek z 410 Kod statusu. Nie wiem dlaczego, ale według ScottE odpowiedź kod usuwa wideo:

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

Więc użyłem request.Service.Delete(uri); wyjątkiem request.Delete(video);

Powiązane problemy