【问题标题】:Add Playlist to YouTube Channel using Apps Script使用 Apps 脚本将播放列表添加到 YouTube 频道
【发布时间】:2015-08-21 11:26:22
【问题描述】:

我正在构建一个应该执行以下操作的脚本:

  1. 从电子表格中解析音乐数据(艺术家曲目为字符串)
  2. 使用数据 API 的 .Search 类搜索 YT 上的每个曲目
  3. 获取搜索到的每个曲目的最佳(最“相关”)结果的视频 ID,并将其存储在电子表格列中
  4. 在我的频道中创建播放列表
  5. 将搜索中的每个视频添加到播放列表中

我在第 5 步遇到问题。

我对 JS 和 Google Apps 脚本库只有中级知识。

这是我的功能:

// GLOBAL VARIABLES
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheets()[0];
var sourceDataRange = source.getDataRange();
var sourceValues = sourceDataRange.getValues();
var sourceRows = sourceDataRange.getNumRows();
var sourceColumns = sourceDataRange.getNumColumns();
var now = new Date();
    var nowYear = now.getYear();
    var nowMonth = now.getMonth() + 1;
    var nowDay = now.getDate();
var templateURL = 'https://www.youtube.com/watch?v=';
var vidId = [];

// FUNCTION DEFINITION

function youtubeSearchAndCreate() {
  youtubeSearch();
  createAndInsert();
}

function youtubeSearch() {

  // create new sheet from import copy
  var newSheetName = 'log_' + nowYear + '_' + nowMonth + '_' + nowDay; // names new sheet dynamically with today's date
  var newSheet = ss.insertSheet(newSheetName, 1);

  ss.getDataRange().offset(0, 0, sourceRows, sourceColumns).setValues(sourceValues);

  var artistsCol = 3;
  var artists = newSheet.getRange(2, artistsCol, sourceRows).getValues();
  var tracksCol = 4;
  var tracks = newSheet.getRange(2, tracksCol, sourceRows).getValues();
  var resultsCol = 1 + sourceColumns;

  newSheet.getRange(1, resultsCol).setValue('video_URL'); // set new search results column title

  var searchQueries = []; // search queries container array
  // var vidId = []; 
  var resultItems = [];

  for (var i=0; i<=sourceRows-2; i++) {

    searchQueries[i] = artists[i] + " - " + tracks[i]; // search query array generation

    var results = YouTube.Search.list('id', {q: searchQueries[i], maxResults: 1, type: 'video'}); // YouTube API searching for the most relevant video
    resultItems.push(results.items[0]);
    vidId.push(resultItems[i].id.videoId);
    newSheet.getRange(i+2, resultsCol).setValue(templateURL + vidId[i]); // insert each video URL into search results column
  }
}

function createAndInsert() {
  // create a new playlist and name it accordingly
  var newPlaylist = YouTube.Playlists.insert(
    {
      snippet: {
        title: nowYear + '-' + nowMonth + '-' + nowDay + ' TripleJ Hitlist',
        description: 'A playlist created with the YouTube API from ' + sourceRows - 1 + ' songs in the TripleJ Hitlist.'
      },
      status: {
        privacyStatus: 'private'
      }
    },
    'snippet,status'
  );

  // insert videos in the playlist
  var videosInserted = [];
  for (var i=0; i<vidId.length; i++) {
    // insert videos in the playlist according to their video ID gathered by the search script
    var insertVideo = YouTube.PlaylistItems.insert(
      {
        snippet: {
          playlistId: newPlaylist.id,
          resourceId: vidId[i]
        }
      },
      'snippet'
    );
    videosInserted.push(insertVideo.snippet);
  }
  Logger.log(videosInserted);
}

最后一个 for 循环似乎是问题所在:我收到一个错误,只是说“必需”而没有任何其他信息...

任何帮助将不胜感激!

【问题讨论】:

    标签: google-apps-script youtube-api


    【解决方案1】:

    您只需为 PlaylistItem 提供正确的格式。检查这个例子:

    var details = {
        videoId: vidId[i],
        kind: 'youtube#video'
      }
    
     var part= 'snippet';
        var resource = {
          snippet: {
            playlistId: newPlaylist.id,
            resourceId: details
         }
        };
    
        var insertVideo = YouTube.PlaylistItems.insert(resource, part);
    

    检查这是否适合您。

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2015-12-31
      • 2013-01-20
      • 2014-02-12
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多