Récupérez toutes les vidéos de la liste de lecture youtube en utilisant l'API V3 de youtube
je récupère les vidéos d'une sélection en utilisant l'API youtube v3 et j'obtiens 50 articles sans aucun problème avec ce lien: -
mais le nombre de vidéos est de 100 et je n'ai que 50. Comment puis-je obtenir les 50 prochaines articles? J'ai essayé démarrer-index mais cela ne fonctionne pas pour L'API v3. Toute aide est appréciée.
6 réponses
les résultats V3 de L'API de données YouTube sont paginés. Vous devez donc obtenir la page suivante des résultats pour les autres.
fondamentalement dans la réponse vous avez nextPageToken.
pour obtenir les résultats restants, faites le même appel exact mais pageToken dans ce jeton que vous avez reçu.
- pageToken
- nextPageToken
- prevPageToken
et vous pouvez aussi définir la taille de page max en utilisant
prevPageTokenmaxResults=50 {Valeurs permises 1 à 50 }
mais vous obtenez nextPageToken
passez ce jeton à la requête suivante
pageToken = {nextPageToken obtenir à partir de la dernière demande}
de cette façon, vous pouvez accéder à la page suivante Essayez-le Vous-même
Modifié
Ok, pour les autres scénarios
si vous êtes dans une autre page Pas est Premier ou dernier alors il y aura toutes ces valeurs
- pageToken = 'Certaines valeurs'
- nextPageToken = 'Certaines valeurs'
- prevPageToken = 'Certaines valeurs'
@Manoj : vous pouvez trouver votre réponse ci-dessous si vous êtes en dernière page
- pageToken = 'Certaines valeurs'
- nextPageToken = 'Certaines valeurs'
- prevPageToken = null
ceci est un petit exemple fait en python en utilisant le Client Youtube de Python Lib Cela emprunte également la configuration de boilerplate aux exemples de l'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")
vidéos seront une liste de toutes vos vidéos concaténé à la première liste. Il va continuer à chercher jusqu'à ce qu'il ait toutes les vidéos à cause de la pagination par 50. Une approche similaire peut être adoptée dans d'autres langues.
dans la liste il y aura toutes les méta-données de la vidéo et l'ordre
ce javascript récupère 115 clips (de PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv)
et 91 clips (de PL32C69B40337EF920)
Tester ce fichier 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>
une autre solution, en utilisant la récursion:
$.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);
}
});
}
Et ensuite appeler comme suit:
jQuery('body').append('<div id="ytb_container"></div>');
$.fn.loadYoutubeResource('playlistItems', 'playlistId', 'PLmwK57OwOvYVdedKc_vPPfbcsey_R0K8r', 'ytb_container', null, function(){ <callback code>});
voici ma fonction récursive, peut-être peut aider quelqu'un:
tout d'Abord j'ai créé un bouton pour le premier appel:
<button id="aux" class="btn btn-danger">Click Me</button>
puis dans la section script:
$(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();
});
});