Im Abruf von Videos einer Wiedergabeliste mithilfe der Youtube v3 API und mit diesem Link erhalten Sie 50 Elemente ohne Probleme: -
Aber die Videoanzahl ist 100 und ich bekomme nur 50. Wie bekomme ich die nächsten 50 Elemente? Ich habe start-index ausprobiert, aber es funktioniert nicht für die v3-API Jede Hilfe wird geschätzt.
Die Ergebnisse der YouTube-Daten-API Version 3 sind paginiert. Für die anderen müssen Sie also die nächste Ergebnisseite aufrufen.
Grundsätzlich haben Sie in der Antwort nextPageToken .
Um die verbleibenden Ergebnisse zu erhalten, führen Sie denselben Anruf genau durch, indem Sie pageToken in das Token setzen, das Sie erhalten haben.
Es gibt drei Zehen
und Sie können auch die maximale Seitengröße mit einstellen
maxResults = 50 {zulässige Werte 1 bis 50}
wenn Sie sich auf Seite 1 befinden, erhalten Sie keine prevPageToken
.
aber man bekommt nextPageToken
Übergeben Sie dieses Token an die nächste Anforderung
pageToken = {nextPageToken von letzter Anfrage abrufen}
auf diese Weise können Sie zur nächsten Seite navigieren Probieren Sie es selbst aus
Ok, für andere Szenarien
Wenn Sie sich auf keiner anderen Seite befinden, ist es erstmal oder zuletzt, dann werden alle diese Werte angezeigt
@Manoj: Sie finden Ihre Antwort unter , Wenn Sie sich auf der letzten Seite befinden
Dies ist ein kleines Beispiel, das in Python mit der Python Youtube Client Lib .__ erstellt wurde. Auch das Boilerplate-Setup wird aus den Youtube-API-Beispielen übernommen
""" 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 __== '__main__':
# comedy central playlist, has 332 video
# https://www.youtube.com/watch?v=tJDLdxYKh3k&list=PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT
videos = fetch_all_youtube_videos("PLD7nPL1U-R5rDpeH95XsK0qwJHLTS3tNT")
videos sind eine Liste aller Ihrer Videos, die mit der ersten Liste verkettet sind. Es wird so lange abgerufen, bis alle Videos aufgrund der Paginierung um 50 verfügbar sind. Ein ähnlicher Ansatz kann in anderen Sprachen verwendet werden.
In der Liste werden alle Metadaten und die Reihenfolge der einzelnen Videos angezeigt
Dieses Javascript ruft 115 Clips (von PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) .__ und 91 Clips (von PL32C69B40337EF920)
TEST DIESE HTML-Datei unter:
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>
Eine andere Lösung mit Rekursion:
$.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);
}
});
}
Und dann nennen Sie es wie folgt:
jQuery('body').append('<div id="ytb_container"></div>');
$.fn.loadYoutubeResource('playlistItems', 'playlistId', 'PLmwK57OwOvYVdedKc_vPPfbcsey_R0K8r', 'ytb_container', null, function(){ <callback code>});
hier ist meine rekursive Funktion, vielleicht kann jemandem helfen:
Zuerst habe ich für den ersten Anruf eine Schaltfläche erstellt:
<button id="aux" class="btn btn-danger">Click Me</button>
Dann im Skriptabschnitt:
$(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();
});
});
Grüße