Получить все видео из списка воспроизведения youtube с помощью youtube V3 API
Im извлечение видео плейлиста с помощью API youtube v3 и получение 50 элементов без каких-либо проблем с этой ссылкой: -
но граф видео-100 и им только 50. Как я могу получить следующие 50 пунктов? Я пытался!--7-->start-index но это не работает для V3 API-интерфейс. Любая помощь приветствуется.
6 ответов
YouTube Data API v3 результаты разбиты на страницы. Поэтому вам нужно получить следующую страницу результатов для других.
в основном в ответе у вас есть nextPageToken.
чтобы получить оставшиеся результаты, выполните тот же самый точный вызов, но установив pageToken в тот знак, который вы получили.
Ther три tokes
- pageToken
- nextPageToken
- prevPageToken
а также вы можете установить максимальный размер страницы с помощью
maxResults=50 {допустимые значения от 1 до 50 }
Если вы находитесь на странице 1, вы не получите prevPageToken
а вы nextPageToken
передайте этот токен следующему запросу
pageToken = {nextPageToken получить от последнего запрос}
таким образом, вы можете перейти к следующей странице попробуйте сами
редактировать
Ok, для других сценариев
Если вы находитесь на любой другой странице не является первым или последним, то будут все эти значения
- pageToken = 'некоторые значения'
- nextPageToken = 'некоторые значения'
- prevPageToken = 'некоторые значения'
@Manoj : вы можете найти свой ответ ниже если вы не на последней странице
- pageToken = 'некоторые значения'
- nextPageToken = 'некоторые значения'
- prevPageToken = null
Это небольшой пример, сделанный в python с использованием Lib клиента Python Youtube Это также заимствует настройку шаблона из примеров API youtube
""" Pull All Youtube Videos from a Playlist """
from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.tools import argparser
DEVELOPER_KEY = "YOURKEY HERE"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
def fetch_all_youtube_videos(playlistId):
"""
Fetches a playlist of videos from youtube
We splice the results together in no particular order
Parameters:
parm1 - (string) playlistId
Returns:
playListItem Dict
"""
youtube = build(YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=DEVELOPER_KEY)
res = youtube.playlistItems().list(
part="snippet",
playlistId=playlistId,
maxResults="50"
).execute()
nextPageToken = res.get('nextPageToken')
while ('nextPageToken' in res):
nextPage = youtube.playlistItems().list(
part="snippet",
playlistId=playlistId,
maxResults="50",
pageToken=nextPageToken
).execute()
res['items'] = res['items'] + nextPage['items']
if 'nextPageToken' not in nextPage:
res.pop('nextPageToken', None)
else:
nextPageToken = nextPage['nextPageToken']
return res
if __name__ == '__main__':
# comedy central playlist, has 332 video
# https://www.youtube.com/watch?v=tJDLdxYKh3k&list=PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT
videos = fetch_all_youtube_videos("PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT")
видео будет список всех ваших видео, объединенных в первый список. Он будет продолжать получать, пока не будет иметь все видео из-за разбиения на страницы 50. Аналогичный подход можно использовать и на других языках.
в списке будут все индивидуальные метаданные видео и порядок
этот javascript извлекает 115 клипов (из PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv)
и 91 клипы (от PL32C69B40337EF920)
Протестируйте этот html-файл at:
http://pvhung20.url.ph/api3/retrieve-all-videos-stackoverflow.html
sum = 0;
sumN = 1;
var nextPageToken;
function getVids(PageToken){
pid = $('#searchtext1').val();
$.get(
"https://www.googleapis.com/youtube/v3/playlistItems",{
part : 'snippet',
maxResults : 50,
playlistId : pid,
pageToken : PageToken,
key: 'YOUR API3 KEY'
},
function(data){
myPlan(data);
}
);
}
function myPlan(data){
total = data.pageInfo.totalResults;
nextPageToken=data.nextPageToken;
for(i=0;i<data.items.length;i++){
document.getElementById('area1').value +=
sumN + '-' + data.items[i].snippet.title+'\n'+
data.items[i].snippet.resourceId.videoId +'\n\n';
sum++ ; sumN++;
if(sum == (total-1) ){
sum = 0;
return;
}
}
if(sum <(total-1)){
getVids(nextPageToken);
}
}
function init(){
$('#area1').val('');
}
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<body onload="$('#area1').val('')">
<input type="text" value="PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv"
id="searchtext1" size="75">
<button onclick="getVids()">Get Items</button>
<br><br>
IDs for test: <br>PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv<br>
PL32C69B40337EF920
<br><br>
<textarea id="area1" style="width:600px;height:500px">
</textarea>
другое решение, используя рекурсию:
$.fn.loadYoutubeResource = function(resource_request, resource_type, resource_id, resource_container, pageToken = null, callback = null){
$.ajax({
url: "https://www.googleapis.com/youtube/v3/" + resource_request,
type: 'get',
dataType: 'json',
data: {
part : 'snippet',
[resource_type]: resource_id,
maxResults : 50,
pageToken: pageToken,
key: '< API Key >',
},
success: function(data) {
console.log("New resource " + resource_type + " loaded:");
console.log(data);
for(var index = 0; index < data.items.length; index++){
var url = data.items[index]['snippet'].thumbnails.default.url;
var ytb_id = data.items[index]['id'];
jQuery('#' + resource_container).append('<img class="tube_thumbs" src="' + url + '" id="' + ytb_id
+ '" title="' + data.items[index]['snippet']['title'] + '" >');
}
if ( data.nextPageToken == null)
return callback();
$.fn.loadYoutubeResource(resource_request, resource_type, resource_id, resource_container, data.nextPageToken, callback);
}
});
}
а затем назовите его следующим образом:
jQuery('body').append('<div id="ytb_container"></div>');
$.fn.loadYoutubeResource('playlistItems', 'playlistId', 'PLmwK57OwOvYVdedKc_vPPfbcsey_R0K8r', 'ytb_container', null, function(){ <callback code>});
вот моя рекурсивная функция, возможно, может помочь кому-то:
сначала я создал кнопку для первого вызова:
<button id="aux" class="btn btn-danger">Click Me</button>
затем в разделе скрипт:
$(document).ready(function () {
function getVideos(t) {
var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&key=YourAPIKey&channelId=YourChannelID&maxResults=50";
if (t != undefined) {
url = url + "&pageToken=" + t
}
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
success: function (html) {
console.log(html.items);
if (html.nextPageToken != undefined) {
getVideos(html.nextPageToken);
}
}
});
};
//initial call
$("#aux").click(function () {
getVideos();
});
});
в отношении