質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Q&A

解決済

1回答

2426閲覧

GAS上でyoutube data apiのpagetokenをスクリプトに組み込み、50本以上の動画を取得したい

annple

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

0グッド

0クリップ

投稿2022/06/09 15:14

1.前提・実現したいこと

特定のチャンネルのキーワード、日付に沿った動画をすべて取得し、googleスプレッドシートに表示させたいです。

2.発生している問題・エラーメッセージ

ですが、下記の最大50個までしか取得できません。

3.該当のソースコード

GAS

1function searchByKeyword() { 2 3 4// データを取得 5const results = YouTube.Search.list('snippet', { 6channelId:'チャンネルID', 7publishedAfter:'YYYY-MM-DDT00:00:00Z', 8publishedBefore:'YYYY-MM-DDT00:00:00Z', 9q:'キーワード', 10maxResults: 50 11}); 12 13//シート定義 14const ss = SpreadsheetApp.getActiveSpreadsheet() 15const sheetName1 = "シート名"; 16const srcSheet = ss.getSheetByName(sheetName1); 17//データを貼り付けるシートをクリア 18srcSheet.clear() 19 20// ログに表示 21for(let i = 0; i < results.items.length; i++){ 22Logger.log(results.items[i].snippet.title) 23Logger.log(results.items[i].snippet.publishedAt) 24Logger.log(results.items[i].snippet.channelTitle) 25Logger.log(results.items[i].id.videoId) 26Logger.log(results.items[i].id.channelId) 27 28// 追加(スプレッドシートにデータを表示) 29srcSheet.getRange(i+1, 1).setValue(results.items[i].snippet.title) 30srcSheet.getRange(i+1, 2).setValue(results.items[i].snippet.publishedAt) 31srcSheet.getRange(i+1, 3).setValue(results.items[i].snippet.channelTitle) 32srcSheet.getRange(i+1, 4).setValue(results.items[i].id.videoId) 33srcSheet.getRange(i+1, 5).setValue(results.items[i].id.channelId) 34 35} 36}

4.自分で調べたことや試したこと
そのため、youtube data api公式リファレンスよりpagetokenをスクリプトに組み込むと最大個数50個以上の情報が取得できるということはわかりました。しかし、他のウェブサイトで調べてもpagetokenをどこに、どう組み込めばいいかわかりません。

5.使っているツールのバージョンなど補足情報

Google Apps Script

初心者のためわかりにくい文章になってましたらすみません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

results.nextPageToken で nextPageTokenを取得し、
次のAPI呼び出し時に
pageToken: nextPageToken
を指定することで次のページを読みこむことができます。

(下記は今回の質問に対する回答を端的に示すため変更を最小限にしております)

js

1function searchByKeyword() { 2 3 //シート定義 4 const ss = SpreadsheetApp.getActiveSpreadsheet() 5 const sheetName1 = "シート名"; 6 const srcSheet = ss.getSheetByName(sheetName1); 7 //データを貼り付けるシートをクリア 8 srcSheet.clear(); 9 // 書き込む行 10 let line = 1; 11 12 // 最初は null 13 let nextPageToken = null; 14 15 // データを取得 16 while (true) { 17 const results = YouTube.Search.list('snippet', { 18 channelId: 'チャンネルID', 19 publishedAfter: 'YYYY-MM-DDT00:00:00Z', 20 publishedBefore: 'YYYY-MM-DDT00:00:00Z', 21 q: 'キーワード', 22 maxResults: 50, 23 pageToken: nextPageToken 24 }); 25 26 // ログに表示 27 for (let i = 0; i < results.items.length; i++) { 28 const result = results.items[i]; 29 Logger.log(result.snippet.title) 30 Logger.log(result.snippet.publishedAt) 31 Logger.log(result.snippet.channelTitle) 32 Logger.log(result.id.videoId) 33 Logger.log(result.snippet.channelId) 34 35 // 追加(スプレッドシートにデータを表示) 36 srcSheet.getRange(line, 1).setValue(result.snippet.title) 37 srcSheet.getRange(line, 2).setValue(result.snippet.publishedAt) 38 srcSheet.getRange(line, 3).setValue(result.snippet.channelTitle) 39 srcSheet.getRange(line, 4).setValue(result.id.videoId) 40 srcSheet.getRange(line, 5).setValue(result.snippet.channelId) 41 line++; 42 } 43 // 結果から nextPageToken 取得 44 nextPageToken = results.nextPageToken; 45 46 // nextPageTokenが見つからなければループを抜ける 47 if (nextPageToken == null) break; 48 } 49}

注:検索結果は重複及び漏れがある場合が有ります。これはAPIの仕様(バグ?)であり回避できないようです。

投稿2022/06/09 15:41

編集2022/06/10 05:14
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annple

2022/06/09 23:13

回答有り難うございあす。最初にresults.nextPageToken で nextPageTokenを取得しなければいけなかったのですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問