YouTube サービス

YouTube サービスでは、Apps Script で YouTube Data APIYouTube Live Streaming API を使用できます。この API を使用すると、ユーザーは動画、再生リスト、チャンネル、ライブイベントを管理できます。

リファレンス

このサービスの詳細については、次のリファレンス ドキュメントをご覧ください。

Apps Script のすべての高度なサービスと同様に、YouTube サービスは公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。

問題を報告したり、他のサポートを確認したりするには、対応するサポートページをご覧ください。

サンプルコード

次のサンプルコードでは、YouTube Data API のバージョン 3 を使用しています。

キーワードで検索

犬に関する動画を検索し、動画 ID とタイトルを記録します。 このサンプルでは、結果が 25 件に制限されています。その他の結果を取得するには、YouTube Data API のリファレンス ドキュメントに記載されているように、追加のパラメータを渡します。

Advanced/youtube.gs
/**
 * Searches for videos about dogs, then logs the video IDs and title.
 * Note that this sample limits the results to 25. To return more
 * results, pass additional parameters as shown in the YouTube Data API docs.
 * @see https://developers.google.com/youtube/v3/docs/search/list
 */
function searchByKeyword() {
  try {
    const results = YouTube.Search.list('id,snippet', {
      q: 'dogs',
      maxResults: 25
    });
    if (results === null) {
      Logger.log('Unable to search videos');
      return;
    }
    results.items.forEach((item)=> {
      Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);
    });
  } catch (err) {
    // TODO (developer) - Handle exceptions from Youtube API
    Logger.log('Failed with an error %s', err.message);
  }
}

アップロードを取得する

この関数は、ユーザーがアップロードした動画を取得します。この処理は以下の手順で行われます。

  1. ユーザーのチャンネルを取得します。
  2. ユーザーの uploads プレイリストを取得します。
  3. この再生リストを反復処理し、動画 ID とタイトルを記録します
  4. 次のページの結果がある場合は、それを取得してステップ 3 に戻ります。
Advanced/youtube.gs
/**
 * This function retrieves the user's uploaded videos by:
 * 1. Fetching the user's channel's.
 * 2. Fetching the user's "uploads" playlist.
 * 3. Iterating through this playlist and logs the video IDs and titles.
 * 4. If there is a next page of resuts, fetching it and returns to step 3.
 */
function retrieveMyUploads() {
  try {
    // @see https://developers.google.com/youtube/v3/docs/channels/list
    const results = YouTube.Channels.list('contentDetails', {
      mine: true
    });
    if (!results || results.items.length === 0) {
      Logger.log('No Channels found.');
      return;
    }
    for (let i = 0; i < results.items.length; i++) {
      const item = results.items[i];
      /** Get the channel ID - it's nested in contentDetails, as described in the
       * Channel resource: https://developers.google.com/youtube/v3/docs/channels.
       */
      const playlistId = item.contentDetails.relatedPlaylists.uploads;
      let nextPageToken = null;
      do {
        // @see: https://developers.google.com/youtube/v3/docs/playlistItems/list
        const playlistResponse = YouTube.PlaylistItems.list('snippet', {
          playlistId: playlistId,
          maxResults: 25,
          pageToken: nextPageToken
        });
        if (!playlistResponse || playlistResponse.items.length === 0) {
          Logger.log('No Playlist found.');
          break;
        }
        for (let j = 0; j < playlistResponse.items.length; j++) {
          const playlistItem = playlistResponse.items[j];
          Logger.log('[%s] Title: %s',
              playlistItem.snippet.resourceId.videoId,
              playlistItem.snippet.title);
        }
        nextPageToken = playlistResponse.nextPageToken;
      } while (nextPageToken);
    }
  } catch (err) {
    // TODO (developer) - Handle exception
    Logger.log('Failed with err %s', err.message);
  }
}

チャンネル登録

このサンプルでは、YouTube の Google Developers チャンネルにユーザーを登録します。

Advanced/youtube.gs
/**
 * This sample subscribes the user to the Google Developers channel on YouTube.
 * @see https://developers.google.com/youtube/v3/docs/subscriptions/insert
 */
function addSubscription() {
  // Replace this channel ID with the channel ID you want to subscribe to
  const channelId = 'UC_x5XG1OV2P6uZZ5FSM9Ttw';
  const resource = {
    snippet: {
      resourceId: {
        kind: 'youtube#channel',
        channelId: channelId
      }
    }
  };

  try {
    const response = YouTube.Subscriptions.insert(resource, 'snippet');
    Logger.log('Added subscription for channel title : %s', response.snippet.title);
  } catch (e) {
    if (e.message.match('subscriptionDuplicate')) {
      Logger.log('Cannot subscribe; already subscribed to channel: ' +
        channelId);
    } else {
      // TODO (developer) - Handle exception
      Logger.log('Error adding subscription: ' + e.message);
    }
  }
}