2015-04-26 58 views
0

好吧,可以說我有一個YouTube播放列表,其中有500個項目。 YouTube的PlaylistItems終點只允許同時檢索50項:通過YouTube API中的頁碼獲取播放列表項?

https://developers.google.com/youtube/v3/docs/playlistItems/list

後50個項目,它給你一個nextPageToken您可以使用在查詢中指定要取得下一個頁面。這樣做,您可以遍歷整個播放列表以獲取10個查詢中的所有500個項目。

但是,如果我只想得到最後一頁呢?第10頁?

在YouTube的V2 API,你可以告訴它在451位置開始索引,然後它會給你的結果451-500。這似乎不是他們的V3 API中的一個選項。現在,看起來如果我只想獲得第10頁,那麼我必須再次遍歷整個播放列表,然後扔掉前9頁,然後轉到第10頁。

這似乎是資源的巨大浪費和捲曲單獨操作可能是一個殺手。

那麼是否有可能像在V2 API中那樣在V3 API中設置起始索引?

+0

沒有什麼,現在證明,雖然看着是返回它的nextPageToken串看來,他們總是爲相同數量的maxResults的(即是相同的,就是你一直在做的maxResults = 50,nextPageToken這個拿到第2頁將是相同的,無論'q'的值是什麼,nextPageToken也會得到第3頁,第4頁等等)。這看起來不像是你想在生產應用程序中依賴的東西,但找出「第10頁,第50頁結果」令牌是什麼是可行的... – jlmcdonald

+0

絕對不是我想要使用的東西。 –

回答

-1

您仍然可以使用開始索引,但必須自己生成相應的頁面令牌。

據觀察可知,頁面標記基本上是一個以base64編碼的字節序列,第一個字節總是8,最後兩個是16, 0。我們生成令牌有些這樣的(使用python 3):

i = 451 
k = i // 128 
i -= 128 * (k - 1) 
b = [8, index] 
if k > 1 or i > 127: b += [k] 
b += [16, 0] 
t = base64.b64encode(bytes(f)).decode('utf8').strip('=') 

的最後面的操作去除尾部被用來以base64填充不完全塊「=」字符。結果('CMMDEAA')是您的頁面令牌。

相關問題