问题
for a project i have to list all videos from a youtube user account. I'm getting all public videos, but when i make an api call after oauth i still get only public videos.
Unlisted videos are videos that are hidden from search engine and user public page. I'm sure there is a way to retrieve that.
Here is my code
var request = gapi.client.youtube.playlistItems.list({
playlistId: listId,
part: 'snippet,status',
maxResults: 25,
pageToken: nextPageToken
});
request.execute(function(response) {
console.log(response)
nextPageToken = response.nextPageToken
if ('error' in response) {
displayMessage(response.error.message);
} else {
if ('items' in response) {
console.log(response.items)
var a = [];
for(var i in response.items){
var d = {
title: response.items[i].snippet.title,
videoId: response.items[i].snippet.resourceId.videoId,
publishedAt: response.items[i].snippet.publishedAt
}
a.push(d);
$("#message").append(JSON.stringify(d))
}
} else {
displayMessage('There are no videos in your channel.');
}
}
});
回答1:
You can get unlisted videos without going the OAuth route using an API key though many online say you cannot. Here is what I found:
Go to https://console.developers.google.com and create an API key for Youtube Data API v3. API key, NOT OAuth ClientId. Your API key should look something like "AISdkJKdk7GuSkDKJDKSkLmSSdDFm4ro4E_4et_ww"
If using C# Download Google.Apis.YouTube.v3 Version 1.40.2.1593 from Nuget. If not download the equivalent library for your language.
Next go to your You Tube account and create a new playlist called "Unlisted Videos returned by API Key" (In YouTube studio if you edit a video you already have uploaded there is a drop down menu for Playlist where you can assign one that already exists or create a new one)
Then go to your channel, and click the playlist tab. Edit the new playlist you just created so that it is Unlisted or else your Unlisted videos you add to this playlist will be visible on the UI of your channel.
On your channel find the playlist you created again and click to view it. The URL you are taken to will have a &list query string parameter and you need to get that Id. Example: https://www.youtube.com/watch?v=kskScbSkdSDg&list=DKfiVi8sZdkZqW-saZt7bN8DDTDxshjDK. In this example our list (PlalistId) value is DKfiVi8sZdkZqW-saZt7bN8DDTDxshjDK which will be needed when calling our GetPlaylistVideos method.
Now you have the pre-requisites done. Time for the code:
public static List<YouTubeVideo> GetPlaylistVideos(string PlaylistId)
{
List<YouTubeVideo> result = new List<YouTubeVideo>();
try
{
YouTubeService service = new YouTubeService(new BaseClientService.Initializer()
{
ApplicationName = YOUTUBE_APPLICATION_NAME,
ApiKey = YOUTUBE_API_KEY
});
var nextPageToken = "";
while (nextPageToken != null)
{
var playlistItemsListRequest = service.PlaylistItems.List("snippet");
playlistItemsListRequest.PlaylistId = PlaylistId;
playlistItemsListRequest.MaxResults = 50;
playlistItemsListRequest.PageToken = nextPageToken;
// Retrieve the list of videos uploaded to the authenticated user's channel.
var playlistItemsListResponse = playlistItemsListRequest.Execute();
foreach (var playlistItem in playlistItemsListResponse.Items)
{
YouTubeVideo v = new YouTubeVideo
{
EmbedUrl = String.Format("https://www.youtube.com/embed/{0}", playlistItem.Snippet.ResourceId.VideoId),
Title = playlistItem.Snippet.Title,
Description = playlistItem.Snippet.Description,
ThumbnailUrl = playlistItem.Snippet.Thumbnails.High.Url
};
result.Add(v);
}
nextPageToken = playlistItemsListResponse.NextPageToken;
}
}
If you call the GetPlaylistVideos you will see it returns the unlisted videos from your unlisted playlist using an API key and not OAuth.
回答2:
It might seem a bit counterintuitive at times, but YouTube has a quirk that when an unlisted video is placed in a playlist, it will actually be visible in that playlist both via the API and on the YouTube website itself; but only on the playlist view. The video will still not be searchable via normal means (API or website), will not show up on the 'videos' tab of a channel, and will not appear in the user's uploads playlist when exposed via the API using playlistItems.list.
回答3:
You can only get the logged in user's unlisted videos by using forMine=true and type=video parameters. The login method has to be Oauth 2.
来源:https://stackoverflow.com/questions/32454378/youtube-api-get-unlisted-videos