We are facing a problem where the YouTube Data API isn't returning the statistics for some requested videos. We use a custom implementation to interact with the API, but the problem can be reproduced with the API explorer, which I will use throughout this post.
First, I'll show you what happens with a working channel ID (UCfDUwK9MPrjxmsTz1pzjkbw):
Using channels.List with part=statistics,contentDetails,snippet and id=UCfDUwK9MPrjxmsTz1pzjkbw we get a valid response. For this use case we are interested in contentDetails -> relatedPlaylists -> uploads, which returns the playlist ID UUfDUwK9MPrjxmsTz1pzjkbw.
playlistItems.List with part=contentDetails and playlistId=UUfDUwK9MPrjxmsTz1pzjkbw (the playlist ID we found in the step before) returns a list of videos that are part of the playlist. We are interested in contentDetails -> videoId. For example vSS9AYF29_U.
videos.List with part=id,statistics and id=vSS9AYF29_U (the example video ID from the step before) we get the response we are looking for (the statistics for this video).
Now, the same process with a channel ID that fails to produce the desired result (UCpHTv1eQBeSlrdmlh8C6ZxQ):
channels.List returns the playlist ID UUpHTv1eQBeSlrdmlh8C6ZxQ
playlistItems.List returns the example video ID OFTib3gUua0
videos.List does not return the requested statistics part.
Has anyone an idea why this happens? What makes this channel so special? Can the owner of the channel disable public information being retrieved via the API? The statistics themselves can be seen if you watch the video in your browser (https://youtu.be/OFTib3gUua0).
I don't think the problem is with our implementation because it can be reproduced with the API explorer. Another weird thing is that this worked a couple of days ago for every channel ID we used.
Any ideas are highly appreciated.
This is likely a bug, it was working fine until April 7th. There's an Issue Tracker created for that, we are still waiting for Google's response on that.
EDIT:
This seems to finally be fixed
Related
I'm trying to use the YouTube Data API to get a channel's Trailer and Featured Video but can't find anything in the [API docs][1] or responses that might provide it. Ideally, there'd be something that would return the ID of whichever videos had been selected here: https://studio.youtube.com/channel/[CHANNEL_ID]/editing/sections
Maybe it's buried in an obscure endpoint. Maybe the API simply doesn't include this anywhere. Can anyone please point me in the right direction?
Update: I've found the channel trailer as unsubscribedTrailer under the channels:list endpoint with the brandingSettings part. However, for some reason Google has decided not to include the featured video with it.
One more time YouTube Data API v3 doesn't provide a basic feature.
As Video spotlight you can have:
Featured video for returning subscribers
Highlight a video for your subscribers to watch. This video won’t be shown again at the top of your page for subscribers who have watched it. Learn more
Source: https://studio.youtube.com/channel/CHANNEL_ID/editing/sections
For the featured video:
you first need to subscribe to the give YouTube channel. To do so in an automatic way, use YouTube Data API v3 Subscriptions: insert endpoint.
then open your web-browser Network developer tool tab (Ctrl + Shift + E on FireFox) and filter HTML requests, then visit https://www.youtube.com/channel/CHANNEL_ID and copy the initial request to CHANNEL_ID as cURL, that way you can re-execute this cURL request for any channel you are subscribed to by changing the URL in the cURL request to https://www.youtube.com/channel/ANOTHER_CHANNEL_ID. Furthermore you'll find the featured video id in the JavaScript variable ytInitialData in the JSON entry
contents/twoColumnBrowseResultsRenderer/tabs/0/tabRenderer/content/sectionListRenderer/contents/0/itemSectionRenderer/contents/0/channelFeaturedContentRenderer/items/0/videoRenderer/videoId.
The channel with id UCv_LqFI-0vMVYgNR3TeB3zQ have both a channel trailer (1RHxvM8mQS4) and a featured video (rFuip5CSWcA).
I'm using YouTube Data API (v3) to access my own video info.
Everything worked fine, I could get fileDetails.fileSize, fileDetails.videoStreams[] etc. as I expected.
However, in a couple of days after I uploaded the video, the same API returns only fileDetails.fileName and no other info anymore.
Now returned json looks like this:
"fileDetails": {
"fileName": "test movie.mp4"
}
Here is my request URL:
https://www.googleapis.com/youtube/v3/videos?part=fileDetails&id=__my_video_id__
The video is owned by my account with which I did OAuth and got an access token.
I tried the URL on OAuth 2.0 Playground (https://developers.google.com/oauthplayground/), but I got the same result though once it returned all data when I tried it on the day I uploaded the video.
I wonder it might be related to the video visibility since I set it to unlisted so that others won't find my test video by searching.
Any info is welcome!
Edited:
The video itself doesn't have any problem. I can play it on YouTube and via YouTube iframe API also.
I'm aware that YouTube has a system which automatically detects copyright infringements, however, this issue seems to happen randomly even when we don't violate any copyright of others. (happens with our original videos too)
We finally decided to cache fileDetail on our backend.
Using the YouTube Data API v3, is there a way to know if a video has been seen or hidden?
Reading through the docs, I didn't see anything on the Video resource that could match what I'm looking for.
Logically, “Watched” videos are just videos which have entries on your “Watch History” on Youtube.
You can get your “Watched” videos list through the API by getting your Watch History list from your channel. You can do that by using obtaining your Watch History ID which at the same time is also treated as playlistId.
Referring through the Channel API, make a GET HTTP request to
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&mine=true&key={YOUR_API_KEY}
This should return a JSON which should contain an object with “watchHistory” key. The value paired with it is your playlistId which you can now use to make a request using the PlaylistItems API
https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={YOUR_WATCHED_PLAYLIST_ID}&key={YOUR_API_KEY}
This should return a list of videos that your account has already watched.
As for getting the list of “Hidden” videos on your subscription feed. I think it's not achievable through the API. Checked on different responses of subscription and video resources but to no avail. No responses containing "watched" or "hidden" related.
It's a known issue that Youtube API (v2) doesn't support liked videos - http://www.youtube.com/my_liked_videos (not http://www.youtube.com/my_favorites). The trick was to use events API for user's recent activity and filter out those with yt:rating.value = like. However, when I hit this endpoint https://gdata.youtube.com/feeds/api/users/default/events?inline=true (with proper authorization headers), I only get last 24 events and all of them are of 'X has uploded a video' type. Has anyone experienced this and figured out what is wrong?
You can get liked videos without much effort in v3 of the API. I don't think there's a workaround for this in v2.
In v3, make a channels.list(part=contentDetails) call to get the "likes" playlist id, and then do a playlistItems.list() call to get the contents of that playlist, i.e. the videos that have been liked.
We switched over to YouTube from a previously developed internal video system, and right now I've got it going on public upload feeds for users. The problem comes when we first got only about a dozen out of 150 or so videos available from the primary user's account. Over time of the day that number rose to about 50, and its stayed there. I found one post on the YouTube API forums about delay, but no word on how long I can expect that.
Anyone have experience about this to tell me what to expect?
Expected latencies can vary, and are documented here (http://code.google.com/apis/youtube/2.0/reference.html) - ways you can minimize it:
1) Upload the video as public. If you upload the video as private first, this will leave the video out of the fast-track indexing
2) Make an authenticated request to the user feed, this will guarantee the freshest data that the API has.
ie. http://gdata.youtube.com/api/feeds/users/username/uploads (with a dev key and auth token for 'username') instead of http://gdata.youtube.com/api/feeds/videos?author=username