Необходимо добавить видео канала в Google Sheets с помощью YouTube Data API v3 - PullRequest
1 голос
/ 04 июля 2019

Я был совершенно ошеломлен всем этим, так как я совершенно новичок в работе с API. Я хотел бы заполнить Google Sheet видеороликами канала, чтобы всегда иметь возможность обновлять их статистику в любое время, когда мне нужно добавить (или заменить самые старые) новые видео в список. Я попробовал следовать видеоинструкции и чувствую, что я рядом, но у меня проблемы.

ПРИМЕЧАНИЕ. Список воспроизведения, который я использовал ниже, предназначен для канала разработчиков Google.

Видео, которое я посмотрел, показало пример, когда видео, по которым вы просматривали видео, были лучшими в результатах поиска по определенному ключевому слову. Вместо этого я хотел бы получить последние 50 видео с определенного канала.

В исходном коде была строка:

var sr = YouTube.Search.list("snippet,id", { q: "guitars", maxResults: 50});

Я изменил это на:

var sr = YouTube.PlaylistItems.list("snippet,id", { playlistId: "UU_x5XG1OV2P6uZZ5FSM9Ttw", maxResults: 50});

Кажется, проблема в этой строке:

var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});

Я пытался пройти через это и после многих попыток проб и ошибок сдался. Я не уверен, как должна выглядеть эта линия.

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var sr = YouTube.PlaylistItems.list("snippet,id", { playlistId: "UU_x5XG1OV2P6uZZ5FSM9Ttw", maxResults: 50});

  var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});
  var modRes = srVidsOnly.map(function(v){ return [v.resourceId.videoId,v.snippet.title]; });

  var ids = modRes.map(function(res){return res[0]; }).join(",");
  var stats = YouTube.Videos.list("statistics", {id: ids});
  var vidStats = stats.items.map(function(res){return [res.statistics.viewCount, res.statistics.likeCount]; });
  activeSheet.getRange(2, 1, modRes.length, modRes[0].length).setValues(modRes);
  activeSheet.getRange(2, 3, vidStats.length, vidStats[0].length).setValues(vidStats);
}

Ошибка:

TypeError: Cannot read property "kind" from undefined. (line 6, file "Code")

Удаление вида из пятой строки, например:

var srVidsOnly = sr.items.filter(function(res){ return res.resourceId === "youtube#playlistItems"});

выдает ошибку:

TypeError: Cannot read property "length" from undefined. (line 12, file "Code")

Следуя исходному видео, руководство точно сработало (видео из результатов поиска). Лист был отформатирован так, как я этого хотел. Мне просто нужны видео с определенного канала, а не результаты поиска.

Спасибо

1 Ответ

0 голосов
/ 05 июля 2019

Как насчет этой модификации?

Очки модификации:

  • Пожалуйста, измените следующим образом.
    • res.resourceId.kind до res.kind
    • youtube#playlistItems до youtube#playlistItem
    • v.resourceId.videoId до v.snippet.resourceId.videoId.

Таким образом, когда вышеуказанные изменения отражаются в вашем сценарии, он становится следующим:

Модифицированный скрипт:

Пожалуйста, измените myFunction() в вашем скрипте следующим образом.

От:
var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});
var modRes = srVidsOnly.map(function(v){ return [v.resourceId.videoId,v.snippet.title]; });
Для того, чтобы:
var srVidsOnly = sr.items.filter(function(res){ return res.kind === "youtube#playlistItem"});
var modRes = srVidsOnly.map(function(v){ return [v.snippet.resourceId.videoId,v.snippet.title]});

Примечание:

  • Из вашего скрипта я понял, что вы используете скрипт Google Apps и расширенные сервисы Google.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

...