実現したいこと
特定のスプレッドシートシートにYouTubeのチャンネルURLを入力しておいて、その下にチャンネル名、チャンネル登録者数、記録した日付を自動入力したい。
前提
Google apps scriptで、YouTubeアカウントの登録者数を定期的に取得したく、調べて見つけたコードを使ったのですが、エラーが出てしまいました。
発生している問題・エラーメッセージ
"TypeError: Cannot read properties of undefined (reading '0') getSubscriberCount @ コード.gs:31
該当のソースコード
GAS
1"function getSubscriberCount() { 2 3 //APIキー 4 var key = ""APIキー""; 5 //反映させるシート 月ごとにシートを変えたい場合などに変更してください 6 var sheetName = ""シート1"" 7 8 var ss = SpreadsheetApp.getActiveSpreadsheet() 9 var srcSheet = ss.getSheetByName(sheetName); 10 11 var rowTitle = 1; 12 var rowURL = 2; 13 var rowEnd = srcSheet.getDataRange().getLastRow(); 14 var rowToday = rowEnd + 1; 15 var colDate = 1; 16 var colStart = 2; 17 var colEnd = srcSheet.getDataRange().getLastColumn(); 18 19 var formatDate = Utilities.formatDate(new Date(),""JST"",""yy/MM/dd""); 20 srcSheet.getRange(rowToday,1).setValue(formatDate); 21 22 for (i=colStart; i<=colEnd; i++) { 23 24 25 var channelURL = srcSheet.getRange(rowURL,i).getValue(); 26 var channelID = channelURL.slice(32); 27 28 //登録者数を取得 29 var dataURL = ""https://www.googleapis.com/youtube/v3/channels?part=statistics&id="" + channelID +""&key="" + key; 30 var response = UrlFetchApp.fetch(dataURL) 31 var subscribe = JSON.parse(response.getContentText()).items[0].statistics.subscriberCount; 32 33 //チャンネルタイトルを取得 34 var dataURL = ""https://www.googleapis.com/youtube/v3/channels?part=snippet&id="" + channelID +""&key="" + key ; 35 var response = UrlFetchApp.fetch(dataURL) 36 var channnelTitle = JSON.parse(response.getContentText()).items[0].snippet.title; 37 38 39 //登録者数をシートに挿入 40 srcSheet.getRange(rowToday,i).setValue(subscribe); 41 42 //チャンネルタイトルをシートに挿入 43 srcSheet.getRange(rowTitle,i).setValue(channnelTitle); 44 } 45 46}; 47 48function onOpen() { 49 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 50 var entries = [ 51 { 52 name : ""Youtubeチャンネル登録者数取得"", 53 functionName : ""getSubscriberCount"" 54 } 55 ]; 56 sheet.addMenu(""スクリプト実行"", entries); 57};"
試したこと
同じコードについて、teratailで質問されている記事を見つけ、そこに書かれていた内容は確認しました。
https://www.youtube.com/channel/UC******* の形式になっていることを確認しました。
その記事に書かれていた、コードも試してみましたが、エラーが出ました。
試したコード
GAS
1function getSubscriberCount() { 2 //APIキー 3 var key = "自分のAPIキー; 4 //反映させるシート 5 var sheetName = "シート1" 6 var authorUrl = "https://teratail.com/questions/aucio02i665ci9" 7 var ss = SpreadsheetApp.getActiveSpreadsheet() 8 var srcSheet = ss.getSheetByName(sheetName); 9 10 var rowTitle = 1; 11 var rowURL = 2; 12 var rowEnd = srcSheet.getDataRange().getLastRow(); 13 var rowToday = rowEnd + 1; 14 var colDate = 1; 15 var colStart = 2; 16 var colEnd = srcSheet.getDataRange().getLastColumn(); 17 18 var formatDate = Utilities.formatDate(new Date(), "JST", "yy/MM/dd"); 19 srcSheet.getRange(rowToday, 1).setValue(formatDate); 20 21 for (var i = colStart; i <= colEnd; i++) { 22 23 var channelURL = srcSheet.getRange(rowURL, i).getValue(); 24 var channelID = channelURL.slice(32); 25 26 var dataURL = "https://www.googleapis.com/youtube/v3/channels?part=statistics,snippet&id=" + channelID + "&key=" + key; 27 var response = UrlFetchApp.fetch(dataURL, options); 28 var res = JSON.parse(response.getContentText()); 29 if (res.pageInfo.totalResults === 0) { 30 // 結果数がゼロの場合、スキップ 31 console.log('URL:「' + channelURL + '」の結果はゼロでした。存在しないチャンネルIDか、URLの形式が正しくない可能性があります。処理をスキップします。'); 32 continue; 33 } 34 //登録者数を取得 35 var subscribe = res.items[0].statistics.subscriberCount; 36 37 //チャンネルタイトルを取得 38 var channnelTitle = res.items[0].snippet.title; 39 40 //登録者数をシートに挿入 41 srcSheet.getRange(rowToday, i).setValue(subscribe); 42 43 //チャンネルタイトルをシートに挿入 44 srcSheet.getRange(rowTitle, i).setValue(channnelTitle); 45 } 46 console.log('処理を完了しました。'); 47}; 48 49function onOpen() { 50 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 51 var entries = [ 52 { 53 name: "Youtubeチャンネル登録者数取得", 54 functionName: "getSubscriberCount" 55 } 56 ]; 57 sheet.addMenu("スクリプト実行", entries); 58};
エラーメッセージ
ReferenceError: options is not defined getSubscriberCount @ コード.gs:27
補足情報(FW/ツールのバージョンなど)
コードを入力して、トリガーで、毎日、23時から24時に実行されるようにっ設定しています。
最初の一週間ほどは、スプレッドシートにデータが入力されていましたが、最近、上記のようなエラーとなっていました。
どのように修正したら良いのか、わからないので、詳しく、コード等を編集していただけると幸いです。
参考記事
https://note.com/nakashio_note/n/n28c1979224a1
この記事を参考にしました。
参考にした質問
あなたの回答
tips
プレビュー