Google Script - 自动将订阅的最近上传的YT视频添加到特定的播放列表

时间:2018-02-19 13:33:08

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

我在github上找到的谷歌脚本有点麻烦。 原始代码:https://github.com/Elijas/auto-youtube-subscription-playlist-2

此脚本的作用:

您将在youtube上订阅的频道ID添加到Google电子表格,并将其引用到您希望添加新视频的播放列表ID:

Spreadsheet Screenshot

我的问题是什么:

只要我打开电子表格并执行" updatePlaylists"脚本本身就可以正常工作。手动功能。

但是,只要我添加时间驱动的触发器(或尝试在脚本编辑器中执行该功能),脚本就会一直失败:

TypeError: Cannot call method "toString" of undefined.

但我找到了一个"修复"对于互联网上的特定错误。所以我将此特定代码行更改为:

if (typeof sheet === 'undefined') sheet = SpreadsheetApp.openById('MY_GOOGLE_SHEET_ID').getSheets

但现在我收到以下错误:

"TypeError: Cannot find function getDataRange in object [object Object]. (Row 18, File "Code")"

这将是代码的这一部分:

Cannot find function getDataRange in object [object Object]

由于脚本似乎有效,只要我在电子表格中执行它,我想它必须与“表格”有关。脚本中的变量。但由于我对谷歌的脚本语言并不熟悉,所以我真的希望有人可以帮我解决这个问题。

任何想法都会受到高度赞赏:)

编辑:根据Chris的要求,我将在此处发布部分代码。我只是不想粘贴整个脚本,因为它很大。我希望这就够了。如果没有,您可以从here下载整个脚本。

function updatePlaylists(sheet) {
  if (typeof sheet === 'undefined') sheet = SpreadsheetApp.openById('1Jj1Sx0mvfCKfYFcfX4karP9ztPgkyURj3pBvOExsljQ').getSheets()[0]; // Hotfix, Paste the Sheet ID here, it's the long string in the Sheet URL
  var data = sheet.getDataRange().getValues();
  var reservedTableRows = 3; // Start of the range of the PlaylistID+ChannelID data
  var reservedTableColumns = 2; // Start of the range of the ChannelID data
  var reservedTimestampCell = "F1";
  //if (!sheet.getRange(reservedTimestampCell).getValue()) sheet.getRange(reservedTimestampCell).setValue(ISODateString(new Date()));
  if (!sheet.getRange(reservedTimestampCell).getValue()) {
    var date = new Date();
    date.setHours(date.getHours() - 24); // Subscriptions added starting with the last day
    var isodate = date.toISOString();
    sheet.getRange(reservedTimestampCell).setValue(isodate);
  }

1 个答案:

答案 0 :(得分:1)

感谢剧本的原始创作者普罗米修斯的回复,我终于能够解决问题了。 显然,“updatePlaylists”功能已由github上的贡献者编辑。

每个遇到同样问题的人都会这样做:

只需将Code.gs中的“updatePlalists”函数替换为原始版本:

function updatePlaylists() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var data = sheet.getDataRange().getValues();
  var reservedTableRows = 3; // Start of the range of the PlaylistID+ChannelID data
  var reservedTableColumns = 2; // Start of the range of the ChannelID data
  var reservedTimestampCell = "F1";
  //if (!sheet.getRange(reservedTimestampCell).getValue()) sheet.getRange(reservedTimestampCell).setValue(ISODateString(new Date()));
  if (!sheet.getRange(reservedTimestampCell).getValue()) {
    var date = new Date();
    date.setHours(date.getHours() - 24); // Subscriptions added starting with the last day
    var isodate = date.toISOString();
    sheet.getRange(reservedTimestampCell).setValue(isodate);
  }