המטרה - לקבל מערך של מזהי סרטונים בערוץ מסוים ביוטיוב (לפי מזהה ערוץ) דרך הAPI של גוגל.
גוגל מאפשרת לקבל בכל פעם עד 50 תוצאות.
אם יש יותר - הAPI מחזיר ערך nextPageToken
, שאותו מעבירים בפרמטר pageToken
בשאילתה החדשה, וכן הלאה עד שלא חוזר nextPageToken ואז זה אומר שאין עוד תוצאות.
בעצם מה שניסיתי לממש זה את המדריך הזה:
http://truelogic.org/wordpress/2017/06/20/7-youtube-data-api-paging-maxresults
כתבתי את הקוד הבא, שבעצם מבצע קריאה ראשונית, מקבל את התוכן ודוחף את מזהי הוידאו למערך "arryYT" ואז באם חוזר פרמטר nextPageToken מבצע שאילתה נוספת, מכניס למערך, ובאם עדיין יש nextPageToken מבצע שוב קריאה, וכן הלאה.
let arryYT = []
async function lulaa(ChannelID) {
console.log("run")
let a1 = await fetch(`https://www.googleapis.com/youtube/v3/search?key=` + TokenAPI() + `&channelId=${ChannelID}&part=id&order=date&maxResults=50`)
a1 = await a1.json()
console.log(Math.ceil(a1.pageInfo.totalResults / 50))
a1.items.forEach((parit, index) => {
if (parit.id.kind === "youtube#video") {
arryYT.push(parit.id.videoId)
}
})
if (a1.nextPageToken) {
getNextPage(a1.nextPageToken)
}
if (a1.nextPageToken) {
getNextPage(a1.nextPageToken)
}
async function getNextPage(nextPageToken) {
console.log("run")
let a1 = await fetch(`https://www.googleapis.com/youtube/v3/search?key=` + TokenAPI() + `&channelId=${ChannelID}&part=id&order=date&maxResults=50&pageToken=${nextPageToken}`)
a1 = await a1.json()
a1.items.forEach((parit, index) => {
if (parit.id.kind === "youtube#video") {
arryYT.push(parit.id.videoId)
}
})
}
if (a1.nextPageToken) {
getNextPage(a1.nextPageToken)
}
}
function TokenAPI() {
return "AIzaSyBUtCAp82VCsH5z3XmTMy1KMnLQ1g3Cqm0"
}
השאלה איך אני יודע שכל הקריאות (וניתוח הנתונים) הסתיימו בהצלחה? כדי להמשיך לשלב הבא - שליחת המערך המוכן של המזהים לפונקציה אחרת שתנתח אותם.
כמו כן, נראה שבכלל לא כל הנתונים מתקבלים...
בקריאה לדוגמה לערוץ הזה:
lulaa("UCzlw5vTVVMPwBKElMt3gYQw")
שיש 399 פריטים שבשביל לקבל אותם צריך 8 דפי מידע (בשורה 6 מודפס לקונסול המידע הזה), אבל בפועל הקונסולוגים שהכנסתי בשורות 19 ו3 מראים שזה רץ רק 4 פעמים, והתקבל מערך עם 195 פריטים בלבד (המספר בניקוי הפלייליסטים (שורה 8/23), ועדיין...).
גם כשחיכיתי עוד קצת, והדפסתי את המערך, לא היו בו את כל תוצאות נוספות...
הפונקציה TokenAPI במקור מחזירה מפתח API לפי מה שהמשתמש הגדיר (נשמר בlocalStroage) וכו', בשביל הדוגמה עשיתי שהיא תחזיר מפתח קבוע...
אשמח לעזרה.