Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I want to delete a video from my channel on Youtube using the API

This is my code:

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

The code breaks on the last line stating that object reference is not set to an object.

like image 411
Lakshay Avatar asked Jan 03 '12 12:01

Lakshay


2 Answers

This appears to be an issue internal to the Google YouTube API. I'm having the same issue with good request and video objects. (Google API v1.9.0.0)

UPDATE: check out Claudio's response below. It is correct. I received an email back from support and forgot to update this answer:

this uri will fail: "http://gdata.youtube.com/feeds/api/videos/" + videoID

this will work: "http://gdata.youtube.com/feeds/api/users/" + accountName + "/uploads/" + videoID

like image 105
joeydee Avatar answered Oct 31 '22 06:10

joeydee


The Delete method works as expected if you use the right url, i.e. the one from the /upload feed.

The entries in the /videos feed do not have an edit url which is the one that must be used to send a delete request. I just updated the library (rev. 1169) to return a more meaningful ArgumentNullException instead of the generic null reference.

Please use this code to delete a video you uploaded:

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);
like image 43
Claudio Cherubino Avatar answered Oct 31 '22 07:10

Claudio Cherubino