YouTube ショート動画の視聴回数のカウント方法に合わせて、Data API を更新します。
詳細 Apps Script のコードサンプル
コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
YouTube Data API には、次の Apps Script コードサンプルを使用できます。これらのコードサンプルは、GitHub の YouTube API コードサンプル リポジトリの apps-script
フォルダからダウンロードできます。
マイ アップロード動画の取得
この関数は、現在のスクリプト ユーザーがアップロードした動画を取得します。実行するには、YouTube の OAuth 読み取り/書き込みスコープとユーザーの承認が必要です。Apps Script のランタイム環境では、ユーザーがスクリプトを初めて実行すると、スクリプトで呼び出されるサービスにアクセスする権限を求めるメッセージが表示されます。権限が付与されると、一定期間キャッシュに保存されます。必要な権限が変更された場合、または
ScriptApp.invalidateAuth()
関数によって権限が無効になった場合、スクリプトを実行しているユーザーに権限の確認が再度求められます。
このスクリプトは、次の手順でアクティブなユーザーがアップロードした動画を取得します。
- ユーザーのチャンネルを取得します。
- ユーザーの [アップロード] プレイリストを取得します。
- この再生リストを反復処理し、動画 ID とタイトルをログに記録します。
- 次のページトークン(存在する場合)を取得します。トークンがあれば、次のページをフェッチし、手順 3 を繰り返します。
/** * This function retrieves the current script user's uploaded videos. To execute, * it requires the OAuth read/write scope for YouTube as well as user authorization. * In Apps Script's runtime environment, the first time a user runs a script, Apps * Script will prompt the user for permission to access the services called by the * script. After permissions are granted, they are cached for some periodF of time. * The user running the script will be prompted for permission again once the * permissions required change, or when they are invalidated by the * ScriptApp.invalidateAuth() function. * * This script takes the following steps to retrieve the active user's uploaded videos: * 1. Fetches the user's channels * 2. Fetches the user's 'uploads' playlist * 3. Iterates through this playlist and logs the video IDs and titles * 4. Fetches a next page token (if any). If there is one, fetches the next page. GOTO Step 3 */ function retrieveMyUploads() { var results = YouTube.Channels.list('contentDetails', {mine: true}); for(var i in results.items) { var item = results.items[i]; // Get the playlist ID, which is nested in contentDetails, as described in the // Channel resource: https://developers.google.com/youtube/v3/docs/channels var playlistId = item.contentDetails.relatedPlaylists.uploads; var nextPageToken = ''; // This loop retrieves a set of playlist items and checks the nextPageToken in the // response to determine whether the list contains additional items. It repeats that process // until it has retrieved all of the items in the list. while (nextPageToken != null) { var playlistResponse = YouTube.PlaylistItems.list('snippet', { playlistId: playlistId, maxResults: 25, pageToken: nextPageToken }); for (var j = 0; j < playlistResponse.items.length; j++) { var playlistItem = playlistResponse.items[j]; Logger.log('[%s] Title: %s', playlistItem.snippet.resourceId.videoId, playlistItem.snippet.title); } nextPageToken = playlistResponse.nextPageToken; } } }
キーワードで検索
この関数は、キーワード
'dogs'
に関連する動画を検索します。検索結果の動画 ID とタイトルが Apps Script のログに記録されます。
このサンプルでは、結果が 25 件に制限されています。検索結果をさらに返すには、
Search:list で説明されているように追加のパラメータを渡します。
/** * This function searches for videos related to the keyword 'dogs'. The video IDs and titles * of the search results are logged to Apps Script's log. * * Note that this sample limits the results to 25. To return more results, pass * additional parameters as documented here: * https://developers.google.com/youtube/v3/docs/search/list */ function searchByKeyword() { var results = YouTube.Search.list('id,snippet', {q: 'dogs', maxResults: 25}); for(var i in results.items) { var item = results.items[i]; Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title); } }
トピックで検索
この関数は、特定の Freebase トピックに関連付けられている動画を検索し、その動画 ID とタイトルを Apps Script ログに記録します。この例では、Google Apps Script のトピック ID を使用します。
このサンプルでは、結果が 25 件に制限されています。より多くの結果を返すには、
Search:list に記載されているように追加のパラメータを渡します。
/** * This function searches for videos that are associated with a particular Freebase * topic, logging their video IDs and titles to the Apps Script log. This example uses * the topic ID for Google Apps Script. * * Note that this sample limits the results to 25. To return more results, pass * additional parameters as documented here: * https://developers.google.com/youtube/v3/docs/search/list */ function searchByTopic() { var mid = '/m/0gjf126'; var results = YouTube.Search.list('id,snippet', {topicId: mid, maxResults: 25}); for(var i in results.items) { var item = results.items[i]; Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title); } }
チャンネル登録
このサンプルでは、channelId で指定された Google Developers YouTube チャンネルにアクティブ ユーザーを登録します。
/** * This sample subscribes the active user to the Google Developers * YouTube channel, specified by the channelId. */ function addSubscription() { // Replace this channel ID with the channel ID you want to subscribe to var channelId = 'UC_x5XG1OV2P6uZZ5FSM9Ttw'; var resource = { snippet: { resourceId: { kind: 'youtube#channel', channelId: channelId } } }; try { var response = YouTube.Subscriptions.insert(resource, 'snippet'); Logger.log(response); } catch (e) { if(e.message.match('subscriptionDuplicate')) { Logger.log('Cannot subscribe; already subscribed to channel: ' + channelId); } else { Logger.log('Error adding subscription: ' + e.message); } } }
動画を更新
このサンプルは、アクティブなユーザーのアップロードを見つけ、文字列を追加して最新のアップロードの説明を更新します。
/** * This sample finds the active user's uploads, then updates the most recent * upload's description by appending a string. */ function updateVideo() { // 1. Fetch all the channels owned by active user var myChannels = YouTube.Channels.list('contentDetails', {mine: true}); // 2. Iterate through the channels and get the uploads playlist ID for (var i = 0; i < myChannels.items.length; i++) { var item = myChannels.items[i]; var uploadsPlaylistId = item.contentDetails.relatedPlaylists.uploads; var playlistResponse = YouTube.PlaylistItems.list('snippet', { playlistId: uploadsPlaylistId, maxResults: 1 }); // Get the videoID of the first video in the list var video = playlistResponse.items[0]; var originalDescription = video.snippet.description; var updatedDescription = originalDescription + ' Description updated via Google Apps Script'; video.snippet.description = updatedDescription; var resource = { snippet: { title: video.snippet.title, description: updatedDescription, categoryId: '22' }, id: video.snippet.resourceId.videoId }; YouTube.Videos.update(resource, 'id,snippet'); } }
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-21 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-08-21 UTC。"],[[["\u003cp\u003eThese code samples, available on GitHub, demonstrate various interactions with the YouTube Data API using Apps Script.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eretrieveMyUploads\u003c/code\u003e function retrieves a user's uploaded videos, requiring OAuth read/write scope and user authorization, iterating through the user's 'uploads' playlist and logging video details.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003esearchByKeyword\u003c/code\u003e and \u003ccode\u003esearchByTopic\u003c/code\u003e functions demonstrate searching for videos based on keywords or Freebase topics, respectively, both with the option to adjust the number of results.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eaddSubscription\u003c/code\u003e function allows users to subscribe to a specified YouTube channel, providing error handling for duplicate subscription attempts.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eupdateVideo\u003c/code\u003e function illustrates how to modify the description of the most recent video uploaded by the active user.\u003c/p\u003e\n"]]],["Apps Script code samples for the YouTube Data API perform several key actions. `retrieveMyUploads` fetches a user's channels, then their \"uploads\" playlist, logging video IDs and titles iteratively. `searchByKeyword` and `searchByTopic` find videos based on a keyword or Freebase topic, respectively, logging the results. `addSubscription` subscribes the active user to a specified channel. Finally, `updateVideo` retrieves the user's uploads and appends text to the most recent video's description. These samples require OAuth permissions.\n"],null,["The following Apps Script code samples are available for the YouTube Data API. You can download these code samples from the `apps-script` folder of the [YouTube APIs code sample repository on GitHub](https://github.com/youtube/api-samples).\n\nRetrieve my uploads This function retrieves the current script user's uploaded videos. To execute, it requires the OAuth read/write scope for YouTube as well as user authorization. In Apps Script's runtime environment, the first time a user runs a script, Apps Script will prompt the user for permission to access the services called by the script. After permissions are granted, they are cached for some period of time. The user running the script will be prompted for permission again once the permissions required change, or when they are invalidated by the `ScriptApp.invalidateAuth()` function. \n\nThis script takes the following steps to retrieve the active user's uploaded videos:\n\n1. Fetches the user's channels.\n2. Fetches the user's 'uploads' playlist.\n3. Iterates through this playlist and logs the video IDs and titles.\n4. Fetches a next page token, if any. If there is one, fetches the next page. Repeat step 3.\n\n```gdscript\n/**\n * This function retrieves the current script user's uploaded videos. To execute,\n * it requires the OAuth read/write scope for YouTube as well as user authorization.\n * In Apps Script's runtime environment, the first time a user runs a script, Apps\n * Script will prompt the user for permission to access the services called by the\n * script. After permissions are granted, they are cached for some periodF of time.\n * The user running the script will be prompted for permission again once the\n * permissions required change, or when they are invalidated by the\n * ScriptApp.invalidateAuth() function.\n *\n * This script takes the following steps to retrieve the active user's uploaded videos:\n * 1. Fetches the user's channels\n * 2. Fetches the user's 'uploads' playlist\n * 3. Iterates through this playlist and logs the video IDs and titles\n * 4. Fetches a next page token (if any). If there is one, fetches the next page. GOTO Step 3\n */\nfunction retrieveMyUploads() {\n var results = YouTube.Channels.list('contentDetails', {mine: true});\n for(var i in results.items) {\n var item = results.items[i];\n // Get the playlist ID, which is nested in contentDetails, as described in the\n // Channel resource: https://developers.google.com/youtube/v3/docs/channels\n var playlistId = item.contentDetails.relatedPlaylists.uploads;\n\n var nextPageToken = '';\n\n // This loop retrieves a set of playlist items and checks the nextPageToken in the\n // response to determine whether the list contains additional items. It repeats that process\n // until it has retrieved all of the items in the list.\n while (nextPageToken != null) {\n var playlistResponse = YouTube.PlaylistItems.list('snippet', {\n playlistId: playlistId,\n maxResults: 25,\n pageToken: nextPageToken\n });\n\n for (var j = 0; j \u003c playlistResponse.items.length; j++) {\n var playlistItem = playlistResponse.items[j];\n Logger.log('[%s] Title: %s',\n playlistItem.snippet.resourceId.videoId,\n playlistItem.snippet.title);\n\n }\n nextPageToken = playlistResponse.nextPageToken;\n }\n }\n}\n```\n\nSearch by keyword This function searches for videos related to the keyword `'dogs'`. The video IDs and titles of the search results are logged to Apps Script's log. \n\nNote that this sample limits the results to 25. To return more results, pass additional parameters as documented in [Search:list](https://developers.google.com/youtube/v3/docs/search/list). \n\n```transact-sql\n/**\n * This function searches for videos related to the keyword 'dogs'. The video IDs and titles\n * of the search results are logged to Apps Script's log.\n *\n * Note that this sample limits the results to 25. To return more results, pass\n * additional parameters as documented here:\n * https://developers.google.com/youtube/v3/docs/search/list\n */\nfunction searchByKeyword() {\n var results = YouTube.Search.list('id,snippet', {q: 'dogs', maxResults: 25});\n for(var i in results.items) {\n var item = results.items[i];\n Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);\n }\n}\n```\n\nSearch by topic This function searches for videos that are associated with a particular Freebase topic, logging their video IDs and titles to the Apps Script log. This example uses the topic ID for Google Apps Script. \n\nNote that this sample limits the results to 25. To return more results, pass additional parameters as documented in [Search:list](https://developers.google.com/youtube/v3/docs/search/list). \n\n```transact-sql\n/**\n * This function searches for videos that are associated with a particular Freebase\n * topic, logging their video IDs and titles to the Apps Script log. This example uses\n * the topic ID for Google Apps Script.\n *\n * Note that this sample limits the results to 25. To return more results, pass\n * additional parameters as documented here:\n * https://developers.google.com/youtube/v3/docs/search/list\n */\nfunction searchByTopic() {\n var mid = '/m/0gjf126';\n var results = YouTube.Search.list('id,snippet', {topicId: mid, maxResults: 25});\n for(var i in results.items) {\n var item = results.items[i];\n Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);\n }\n}\n```\n\nSubscribe to channel This sample subscribes the active user to the Google Developers YouTube channel, specified by the channelId. \n\n```gdscript\n/**\n * This sample subscribes the active user to the Google Developers\n * YouTube channel, specified by the channelId.\n */\nfunction addSubscription() {\n // Replace this channel ID with the channel ID you want to subscribe to\n var channelId = 'UC_x5XG1OV2P6uZZ5FSM9Ttw';\n var resource = {\n snippet: {\n resourceId: {\n kind: 'youtube#channel',\n channelId: channelId\n }\n }\n };\n\n try {\n var response = YouTube.Subscriptions.insert(resource, 'snippet');\n Logger.log(response);\n } catch (e) {\n if(e.message.match('subscriptionDuplicate')) {\n Logger.log('Cannot subscribe; already subscribed to channel: ' + channelId);\n } else {\n Logger.log('Error adding subscription: ' + e.message);\n }\n }\n}\n```\n\nUpdate video This sample finds the active user's uploads, then updates the most recent upload's description by appending a string. \n\n```gdscript\n/**\n * This sample finds the active user's uploads, then updates the most recent\n * upload's description by appending a string.\n */\nfunction updateVideo() {\n // 1. Fetch all the channels owned by active user\n var myChannels = YouTube.Channels.list('contentDetails', {mine: true});\n // 2. Iterate through the channels and get the uploads playlist ID\n for (var i = 0; i \u003c myChannels.items.length; i++) {\n var item = myChannels.items[i];\n var uploadsPlaylistId = item.contentDetails.relatedPlaylists.uploads;\n\n var playlistResponse = YouTube.PlaylistItems.list('snippet', {\n playlistId: uploadsPlaylistId,\n maxResults: 1\n });\n\n // Get the videoID of the first video in the list\n var video = playlistResponse.items[0];\n var originalDescription = video.snippet.description;\n var updatedDescription = originalDescription + ' Description updated via Google Apps Script';\n\n video.snippet.description = updatedDescription;\n\n var resource = {\n snippet: {\n title: video.snippet.title,\n description: updatedDescription,\n categoryId: '22'\n },\n id: video.snippet.resourceId.videoId\n };\n YouTube.Videos.update(resource, 'id,snippet');\n }\n}\n```"]]