【问题标题】:How upload a video to Youtube Using Google Apps Script?如何使用 Google Apps 脚本将视频上传到 Youtube?
【发布时间】:2017-04-20 14:34:18
【问题描述】:

我想使用 Google Apps 脚本通过 YouTube 数据 API v3 上传视频 YouTube。这是我的代码:

function YouTubeAPI()
{
  var url = {URL VIDEO};
  var file = UrlFetchApp.fetch(url).getBlob();
  Logger.log(file.getName());
  var snippet = {
  "snippet": {
    "title": "Summer vacation in California",
    "description": "Had a great time surfing in Santa Cruz",
    "tags": ["surfing", "Santa Cruz"],
    "categoryId": "22"},"status": {"privacyStatus": "private"}};
  YouTube.Videos.insert(snippet, 'snippet,status', file)
}

响应是“未经授权”,我检查了 Google 控制台是否启用,并且在脚本中也启用了 Youtube Data API。

【问题讨论】:

  • 查看下面的新答案。

标签: google-apps-script youtube-api youtube-data-api


【解决方案1】:

如果您的 Google 云端硬盘中有一个小于 50MB 的 MP4 文件,那么您可以从您的 Google 云端硬盘中获取该文件,然后使用 YouTube 数据 API 将其上传到 YouTube。我创建了一个新的 Google Cloud Platform (GCP) 项目,启用了 YouTube Data API 和 Google Drive API,并将新的 GCP 项目与我的 Apps Script 项目相关联。另外,我手动将所需的范围添加到了 appsscript.json 文件中。

{
  "timeZone": "Your time zone will be here",
  "dependencies": {
    "enabledAdvancedServices": [
      {
        "userSymbol": "YouTube",
        "version": "v3",
        "serviceId": "youtube"
      }
    ]
  },
  "oauthScopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/script.external_request","https://www.googleapis.com/auth/youtube"],
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

代码:

function uploadToYouTube(mp4_fileId) {
  var blob,mp4_fileId,part,requestResource,response;
  var options = {},snippet = {};

  /*
    You will need to create a GCP standard project and associate it with this Apps Script project-
    In the new code editor click the settings cog wheel and scroll down to:
    Google Cloud Platform (GCP) Project -
    You may get an error:
    In order to change your project, you will need to configure the OAuth consent screen. Configure your OAuth Consent details.
    
    And if you do not have a Google Workspace account then you wont be able to set up the GCP project as "INTERNAL"
    You will need to enable the Google Drive API and the YouTube API in the associated GCP project -
  */

  /*
    This code needs the file ID of the MP4 file in your Google Drive - 
    To get the file ID of an MP4 video file in Google Drive, right click the MP4 in your Google Drive
    and choose, "Get link"
    The link will look like this:
    https://drive.google.com/file/d/FILE_ID_IS_HERE/view?usp=sharing
    In the URL is the file ID
  */

  options = {
    "method" : "get",
    "headers" : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    "muteHttpExceptions":true
  }
  
  mp4_fileId = mp4_fileId ? mp4_fileId : 'PUT_YOUR_MP4_FILE_ID_HERE';

  const url = `https://www.googleapis.com/drive/v3/files/` + mp4_fileId + `?alt=media`;
  response = UrlFetchApp.fetch(url, options);
  //Logger.log('response.getResponseCode(): ' + response.getResponseCode())

  if (response.getResponseCode() !== 200) {

    return;
  }
  
  blob = response.getBlob();
  //Logger.log('blob.getName(): ' + blob.getName())

  /*
  {"snippet":{
    "playlistId":"YOUR_PLAYLIST_ID",
    "position":0,
    "resourceId":{
      "kind":"youtube#video",
      "videoId":"abcdefg"
      }
    }
  }
  */

  /*
  {
  "snippet": {
    "title": "Summer vacation in California",
    "description": "Had fun surfing in Santa Cruz",
    "tags": ["surfing", "Santa Cruz"],
    "categoryId": "22"
  },
  "status": {
    "privacyStatus": "private"
  }
  }
  */
  
  requestResource = {};

  snippet.title = "AAA_Put_Title_Here";
  snippet.description = "Description of video goes here";
  snippet.categoryId = "22";

  options.snippet = snippet;
  options.status = {
      "privacyStatus": "private"
    }

  part = "snippet,status";//This correlates to the options

  //YouTube.Videos.insert(resource: Youtube_v3.Youtube.V3.Schema.Video, part: string[], mediaData: Blob, optionalArgs: Object)
  var response = YouTube.Videos.insert(requestResource, part, blob, options);

  if (!response || !response.kind) {//There was an error
    console.log("Error!")
  }
  
  //Logger.log('response: ' + response);

}

【讨论】:

    【解决方案2】:

    尝试使用code below。此示例代码查找用户的上传内容,然后通过附加字符串来更新最新上传内容的描述。

    /**
     * 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');
      }
    }
    

    欲了解更多信息,请在此处下载演示应用程序:https://github.com/youtube/api-samples

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2014-04-06
      • 2021-05-22
      • 1970-01-01
      • 2021-06-30
      • 2019-09-24
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多