שירות YouTube

שירות YouTube מאפשר להשתמש ב-YouTube Data API וב-YouTube Live Streaming API ב-Apps Script. ה-API מאפשר למשתמשים לנהל את הסרטונים, הפלייליסטים, הערוצים והאירועים בשידור חי.

.

חומרי עזר

למידע מפורט על השירות הזה, עיינו במסמכי התיעוד הבאים:

בדומה לכל השירותים המתקדמים ב-Apps Script, גם שירות YouTube משתמש באותם אובייקטים, שיטות ופרמטרים כמו ה-API הציבורי. מידע נוסף זמין במאמר איך נקבעות חתימות שיטה.

כדי לדווח על בעיות ולמצוא תמיכה נוספת, אפשר לעיין בדפי התמיכה המתאימים:

קוד לדוגמה

הקוד לדוגמה שמוצג כאן משתמש בגרסה 3 של ממשק ה-API של YouTube Data.

חיפוש לפי מילת מפתח

הפונקציה הזו מחפשת סרטונים על כלבים, ואז מתעדת ביומן את מזהי הסרטונים ואת השם שלהם. לתשומת ליבכם: הדגימה הזו מגבילה את התוצאות ל-25. כדי להחזיר תוצאות נוספות, עליכם להעביר פרמטרים נוספים כפי שהם מפורטים במסמכי העזר של YouTube Data API.

מתקדם/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. היא חוזרת על עצמה בפלייליסט הזה ומתעדת את מזהי הווידאו והשמות שלהם
  4. אם יש דף תוצאות נוסף, מאחזרים אותו ואז חוזרים לשלב 3
מתקדם/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);
  }
}

הרשמה לערוץ

הדוגמה הזו רושמת את המשתמש לערוץ Google Developers ב-YouTube.

מתקדם/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);
    }
  }
}