Получить все видео из списка воспроизведения youtube с помощью youtube V3 API

Im извлечение видео плейлиста с помощью API youtube v3 и получение 50 элементов без каких-либо проблем с этой ссылкой: -

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

но граф видео-100 и им только 50. Как я могу получить следующие 50 пунктов? Я пытался!--7-->start-index но это не работает для V3 API-интерфейс. Любая помощь приветствуется.

6 ответов


YouTube Data API v3 результаты разбиты на страницы. Поэтому вам нужно получить следующую страницу результатов для других.

в основном в ответе у вас есть nextPageToken.

чтобы получить оставшиеся результаты, выполните тот же самый точный вызов, но установив pageToken в тот знак, который вы получили.


Ther три tokes

  1. pageToken
  2. nextPageToken
  3. prevPageToken

а также вы можете установить максимальный размер страницы с помощью

maxResults=50 {допустимые значения от 1 до 50 }

Если вы находитесь на странице 1, вы не получите prevPageToken

а вы nextPageToken

передайте этот токен следующему запросу

pageToken = {nextPageToken получить от последнего запрос}

таким образом, вы можете перейти к следующей странице попробуйте сами

редактировать

Ok, для других сценариев

Если вы находитесь на любой другой странице не является первым или последним, то будут все эти значения

  1. pageToken = 'некоторые значения'
  2. nextPageToken = 'некоторые значения'
  3. prevPageToken = 'некоторые значения'

@Manoj : вы можете найти свой ответ ниже если вы не на последней странице

  1. pageToken = 'некоторые значения'
  2. nextPageToken = 'некоторые значения'
  3. 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">&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>

другое решение, используя рекурсию:

$.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();
        });
 });

в отношении