Ссылка на электронную таблицу
вы заметите, что есть два сценария, Page1 и Page2, я удалил их триггеры, поэтому их нужно было запускать вручную, чтобы что-то делать. Page1 раньше обновлял идентификаторы в «Live», а страница 2 обновляла «Live 2», раньше они работали рядом друг с другом, но теперь, похоже, остановились, несмотря на то, что я ничего не изменил.
Заранее спасибо за любую помощь (и извините за мой engli sh)
Вот ошибка, которая появляется при запуске Page2,
[20-04-05 23:04:48:376 BST] TypeError: Cannot read property 'getValues' of null
at getVideoIds(Code:27:22)
at updateStats(Code:18:18)
Это код для обоих сценарии, единственное отличие состоит в имени листа и имени идентификатора данных.
// This is "Sheet1" by default. Keep it in sync after any renames.
var SHEET_NAME = 'Live';
// This is the named range containing all video IDs.
var VIDEO_ID_RANGE_NAME = 'IDs';
// Update these values after adding/removing columns.
var Column = {
VIEWS: 'C',
LIKES: 'D',
DISLIKES: 'E',
COMMENTS: 'F',
DURATION: 'G'
};
function updateStats() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName(SHEET_NAME);
var videoIds = getVideoIds();
var stats = getStats(videoIds.join(','));
writeStats(stats);
}
// Gets all video IDs from the range and ignores empty values.
function getVideoIds() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName(SHEET_NAME);
var range = spreadsheet.getRangeByName(VIDEO_ID_RANGE_NAME);
var values = range.getValues();
var videoIds = [];
for (var i = 0; i < values.length; i++) {
var value = values[i][0];
if (!value) {
return videoIds;
}
videoIds.push(value);
}
return videoIds;
}
// Queries the YouTube API to get stats for all videos.
function getStats(videoIds) {
return YouTube.Videos.list('contentDetails,statistics', {'id': videoIds}).items;
}
// Converts the API results to cells in the sheet.
function writeStats(stats) {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName(SHEET_NAME);
var durationPattern = new RegExp(/PT((\d+)M)?(\d+)S/);
for (var i = 0; i < stats.length; i++) {
var cell = sheet.setActiveCell(Column.VIEWS + (2+i));
cell.setValue(stats[i].statistics.viewCount);
cell = sheet.setActiveCell(Column.LIKES + (2+i));
cell.setValue(stats[i].statistics.likeCount);
cell = sheet.setActiveCell(Column.DISLIKES + (2+i));
cell.setValue(stats[i].statistics.dislikeCount);
cell = sheet.setActiveCell(Column.COMMENTS + (2+i));
cell.setValue(stats[i].statistics.commentCount);
cell = sheet.setActiveCell(Column.DURATION + (2+i));
var duration = stats[i].contentDetails.duration;
var result = durationPattern.exec(duration);
var min = result && result[2] || '00';
var sec = result && result[3] || '00';
cell.setValue('00:' + min + ':' + sec);
}
}