Извлеките все видео из плейлиста youtube с помощью API youtube v3

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

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

Но количество видеороликов равно 100, а им всего 50. Как я могу получить следующие 50 предметов? Я пробовал start-index, но он не работает для v3 API. Любая помощь приветствуется.

Ответ 1

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

В основном в ответе вы nextPageToken.

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

Ответ 2

Ther - три тома

  • pageToken
  • nextPageToken
  • prevPageToken

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

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

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

но вы получите nextPageToken

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

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

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

Edited

Хорошо, для других сценариев

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

  • pageToken = 'Некоторые значения
  • nextPageToken = 'Некоторые значения
  • prevPageToken = 'Некоторые значения

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

  • pageToken = 'Некоторые значения
  • nextPageToken = 'Некоторые значения
  • prevPageToken = null

Ответ 3

Это небольшой пример, сделанный на питоне с помощью Python Youtube Client Lib Это также заимствует конфигурацию шаблонов из примеров 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. Аналогичный подход может быть применен и на других языках.

В списке будут все отдельные метаданные видео и заказы

Ответ 4

Этот javascript извлекает 115 клипов (из PLTI6yRvQqlYq9KoU-NHu43uDmKON7Fsjv) и 91 клипов (от PL32C69B40337EF920)
ИСПЫТАТЬ ЭТО файл html на:
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>

Ответ 5

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

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