Я пытаюсь получить значения для duration
и viewCount
для каждого видео, оба в разделе video:list api. Я создал отдельную функцию, которая будет возвращать продолжительность каждого видео и статистику. Единственное, что работает, — это список воспроизведения видео, которые были получены и videoId
в рамках функции getPlaylist(...)
. Зашел в консоль и вот что получаю:
console.log("id: " + videoId + " duration: " + vidDuration + " viewCount: " + viewCount); // return value in console
id: xxx duration: undefined viewCount: undefined
У меня никогда не работала продолжительность, но я заметил, что API с part: statistics
извлекает значение общей суммы просмотров из каналов, где они закомментированы. Но это не то, что я ищу. Я хочу, чтобы он работал с каждым видео, используя:
GET https://www.googleapis.com/youtube/v3/videos
Но по какой-то причине я не могу заставить его работать. У меня есть свойство videoId
в качестве параметра, поэтому playlistId может прочитать его и получить указанное значение для продолжительности видео и количества просмотров, но оно по-прежнему остается неопределенным, даже когда videoId
было определено. О, и диалоговое окно предупреждения тоже не появляется.
Что мне здесь не хватает?
Сценарий:
var channelName = 'ExampleChannel';
var vidWidth = 500;
var vidHeight = 400;
var vidResults = 15; /* # of videos to show at once - max 50 */
var vidDuration = "";
var viewCount = 0;
var videoId = "";
$(document).ready(function() {
$.get( // get channel name and load data
"https://www.googleapis.com/youtube/v3/channels",
{
part: 'contentDetails',
forUsername: channelName,
key: 'XXXXXXXXXX'
},
function(data)
{
$.each(data.items,
function(i, item) {
console.log(item); // log all items to console
var playlistId = item.contentDetails.relatedPlaylists.uploads;
//var viewCount = console.log(item.statistics.viewCount);
getPlaylists(playlistId);
})
}
);
// function that gets the playlists
function getPlaylists(playlistId)
{
$.get(
"https://www.googleapis.com/youtube/v3/playlistItems",
{
part: 'snippet',
maxResults: vidResults,
playlistId: playlistId,
key: 'XXXXXXXXXX'
},
// print the results
function(data)
{
var output;
$.each(data.items,
function(i, item) {
console.log(item);
var vidTitle = item.snippet.title; // video title
var vidDesc = item.snippet.description; // video description
var videoId = item.snippet.resourceId.videoId; // video id
// check if description is empty
if(vidDesc == null || vidDesc == "")
{
vidDesc = "No description was written."; // FIX: test msg to see where it still shows up
$('#desc').remove(); // remove video description
}
else vidDesc = item.snippet.description;
vidDuration = getVideoDuration(videoId);
viewCount = getViewCount(videoId);
console.log("id: " + videoId + " duration: " + vidDuration + " viewCount: " + viewCount); // return value in console
output = '<li><iframe height="' + vidHeight + '" width="' + vidWidth + '" src=\"//www.youtube.com/embed/' + videoId + '\"></iframe></li><div id="title">' + vidTitle + '</div><div id="desc">' + vidDesc + '</div><div id="duration">Length: ' + vidDuration + '</div><div id="stats">View Count: ' + viewCount + '</div>';
// Append results to list tag
$('#results').append(output);
})
}
);
}
// return video duration
function getVideoDuration(videoId)
{
$.get(
"https://www.googleapis.com/youtube/v3/videos",
{
part: 'contentDetails',
id: videoId,
key: 'XXXXXXXXXX',
},
function(data)
{
$.each(data.items,
function(i, item) {
//videoId = item.snippet.resourceId.videoId;
alert(item.contentDetails.duration); // video duration
//alert(videoId);
})
}
);
}
// return video view count
function getViewCount(videoId)
{
$.get(
"https://www.googleapis.com/youtube/v3/videos",
{
part: 'contentDetails, statistics',
id: videoId,
key: 'XXXXXXXXXX',
},
function(data)
{
$.each(data.items,
function(i, item) {
//videoId = item.snippet.resourceId.videoId;
alert(item.statistics.viewCount); // view count
//alert(videoId);
})
}
);
}
});
Скриншот: (обновление)