使用youtube v3 API从youtube播放列表中检索所有视频

amr*_*007 55 youtube youtube-api

我正在使用youtube v3 API检索播放列表的视频,并通过此链接获得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.任何帮助表示赞赏.

Ibr*_*aya 50

YouTube Data API v3结果已分页.所以你需要为其他人获得下一页的结果.

基本上在响应中你有nextPageToken.

要获得剩余的结果,请执行相同的确切调用,但将pageToken设置为您收到的令牌.

  • 它只给我提供直到一年的视频。.这是api约束吗? (2认同)

Tri*_*shi 28

这是三个tokes

  1. pageToken
  2. 的nextPageToken
  3. prevPageToken

您还可以使用设置最大页面大小

maxResults = 50 {允许值1到50}

如果你在第1页,你将无法得到 prevPageToken

但是你得到了 nextPageToken

将此令牌传递给下一个请求

pageToken = {nextPageToken从上次请求获取}

这样你就可以导航到下一页试试你自己

编辑

好的,对于其他场景

如果你在任何其他页面不是冷杉或最后,那么将有所有这些价值观

  1. pageToken ='有些值'
  2. nextPageToken ='有些值'
  3. prevPageToken ='有些价值'

@Manoj:如果你在最后一页,你可以在下面找到你的答案

  1. pageToken ='有些值'
  2. nextPageToken ='有些值'
  3. prevPageToken = null


sta*_*eng 17

这是使用Python Youtube Client Lib在python中创建的一个小例子.这也借用了youtube API示例中的样板设置

""" 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")
Run Code Online (Sandbox Code Playgroud)

视频将是连接到第一个列表的所有视频的列表.由于50的分页,它将继续获取所有视频,其他语言也可采用类似的方法.

在列表中将有所有单独的视频元数据和订单


hun*_*han 9

这个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('');
 }
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)