it-swarm.com.de

Rufen Sie alle Videos mit der youtube v3 API von der youtube-Playlist ab

Im Abruf von Videos einer Wiedergabeliste mithilfe der Youtube v3 API und mit diesem Link erhalten Sie 50 Elemente ohne Probleme: -

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=PLB03EA9545DD188C3&key=MY_API_KEY

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.

45
amrinder007

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.

41
Ibrahim Ulukaya

Es gibt drei Zehen 

  1. pageToken 
  2. nextPageToken
  3. prevPageToken

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

Bearbeitet

Ok, für andere Szenarien

Wenn Sie sich auf keiner anderen Seite befinden, ist es erstmal oder zuletzt, dann werden alle diese Werte angezeigt

  1. pageToken = 'Einige Werte'
  2. nextPageToken = 'Einige Werte'
  3. prevPageToken = 'Einige Werte'

@Manoj: Sie finden Ihre Antwort unter , Wenn Sie sich auf der letzten Seite befinden 

  1. pageToken = 'Einige Werte'
  2. nextPageToken = 'Einige Werte'
  3. prevPageToken = null
25
Trikaldarshi

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 

15
stanzheng

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">&nbsp;
  <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>

9
hung phan

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>});
0
Samuel

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

0
user3053204