我们正在更新 Data API,以便与 YouTube 统计 Shorts 短视频观看次数的方式保持一致。
了解详情
Apps 脚本代码示例
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
以下 Apps Script 代码示例适用于 YouTube Data API。您可以从 GitHub 上的 YouTube API 代码示例代码库的 apps-script
文件夹下载这些代码示例。
检索我上传的内容
此函数用于检索当前脚本用户上传的视频。如需执行此操作,需要拥有 YouTube 的 OAuth 读写权限范围以及用户授权。在 Apps Script 的运行时环境中,当用户首次运行脚本时,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 脚本日志中。此示例使用 Google Apps 脚本的主题 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 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-21。
[[["易于理解","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"]],["最后更新时间 (UTC):2025-08-21。"],[[["\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```"]]