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: -

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

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.

43
demandé sur amrinder007 2013-09-14 22:12:57

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.

39
répondu Ibrahim Ulukaya 2014-07-05 05:52:51
  1. pageToken
  2. nextPageToken
  3. prevPageToken

et vous pouvez aussi définir la taille de page max en utilisant

maxResults=50 {Valeurs permises 1 à 50 }

prevPageToken

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

  1. pageToken = 'Certaines valeurs'
  2. nextPageToken = 'Certaines valeurs'
  3. prevPageToken = 'Certaines valeurs'

@Manoj : vous pouvez trouver votre réponse ci-dessous si vous êtes en dernière page

  1. pageToken = 'Certaines valeurs'
  2. nextPageToken = 'Certaines valeurs'
  3. prevPageToken = null
24
répondu Trikaldarshi 2015-10-14 16:26:49

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

13
répondu stanzheng 2015-08-18 13:47:58

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">&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>
6
répondu hung phan 2015-12-10 16:12:19

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>});
0
répondu Samuel 2017-01-06 03:36:21

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();
        });
 });
0
répondu user3053204 2018-08-03 11:17:25