2017-10-18 142 views
0

我一直在試圖獲得給定頻道ID的所有視頻。但我沒有得到所有影片YouTube API:沒有獲得給定頻道的所有視頻

代碼,我試圖以檢索頻道的所有視頻:

api_key = API_KEY 
base_video_url = 'https://www.youtube.com/watch?v=' 
base_search_url = 'https://www.googleapis.com/youtube/v3/search?' 
raw_url = 'https://www.googleapis.com/youtube/v3/' \ 
    'channels?key={}&forUsername={}&part=id' 

def getChannelID(username): 
    ''' returns the channel ID ''' 
    r=requests.get(raw_url.format(api_key,username)) 
    json=r.json() 
    print(json['items'][0]['id']) 
    return json['items'][0]['id'] 

def getchannelVideos(): 
    ''' returns list of all videos of a given channel ''' 
    chanId=getChannelID('tseries') 
    first_url = base_search_url + \ 
      'order=date&part=snippet&channelId={}&maxResults=50&key={}'\ 
         .format(chanId,api_key) 

    video_links = [] 
    url = first_url 
    while True: 
     inp = requests.get(url) 
     resp = inp.json() 

     for i in resp['items']: 
      if i['id']['kind'] == "youtube#video": 
       video_links.append(base_video_url + i['id']['videoId']) 

     try: 
      next_page_token = resp['nextPageToken'] 
      url = first_url + '&pageToken={}'.format(next_page_token) 
     except: 
      break 
     print('working') #used this to count repetitions of while loop 
    return video_links 

這裏給定信道是T-Series其中有11537部影片至今 [click to see the image of the channel showing the count]但我收到589只有視頻

我用這條線來計算no。迭代while循環會做

print('working') 

爲了這個,我觀察到,while循環後19次迭代結束(我已經嘗試了很多頻道,但同樣是重複的)

的是最後一次(第19次迭代)JSON數據我被提供了

{'etag': "cbz3lIQ2N25AfwNr-BdxUVxJ_QY/7SEM6nSU4tBD7ZsR5Abt5L-uqAE", 
'items': [], 
'kind': 'youtube#searchListResponse', 
'pageInfo': {'resultsPerPage': 50, 'totalResults': 15008}, 
'prevPageToken': 'CLYHEAE', 
'regionCode': 'IN'} 

爲什麼API不提供nextpageID,雖然totalResults是15008?

+0

AFAIK在列出Channel對象的統計信息時,通過videoCount鍵值檢索上載的頻道視頻計數。您的實施中可能存在的問題:maxresults = 50您的GETs – BoboDarph

+0

@BoboDarph'maxResults = 50'是API端實施的限制 – Jkdc

回答

0

正如評論中已經提到的那樣,可以從結果中檢索到的最大視頻爲50.因此,如果您想訪問其他51-100等等,則必須使用nextPageToken

pageToken

的pageToken參數應該返回結果集標識的特定頁面。在API響應中, nextPageToken和prevPageToken屬性標識可以檢索 的其他頁面。

查看此Python on App Engine Code Samples的示例使用Python進行Youtube API調用。

相關問題