Ответ 1
Я искал ваш запрос и нашел там issue с поиском api.
Альтернативой является вызов видео ресурса Youtube Data API после того, как вы выполните запрос на поиск. Вы можете установить до 50 идентификаторов видео в поиске, поэтому вам не нужно будет вызывать его для каждого элемента
Я обновил ваш codepen, и я сделал следующее:
1) Получить URL-адрес каждого видео, которое вы получили от поиска.
2) Отправьте еще один вызов Ajax, чтобы получить продолжительность: -
for (var i = 0; i < data.items.length; i++) {
var url1 = "https://www.googleapis.com/youtube/v3/videos?id=" + data.items[i].id.videoId + "&key=AIzaSyDYwPzLevXauI-kTSVXTLroLyHEONuF9Rw&part=snippet,contentDetails";
$.ajax({
async: false,
type: 'GET',
url: url1,
success: function(data) {
if (data.items.length > 0) {
var output = getResults(data.items[0]);
$('#results').append(output);
}
}
});
}
3) API дает время в формате ISO, поэтому я преобразовал его в формат mm:ss
(как вам было нужно).
function convert_time(duration) {
var a = duration.match(/\d+/g);
if (duration.indexOf('M') >= 0 && duration.indexOf('H') == -1 && duration.indexOf('S') == -1) {
a = [0, a[0], 0];
}
if (duration.indexOf('H') >= 0 && duration.indexOf('M') == -1) {
a = [a[0], 0, a[1]];
}
if (duration.indexOf('H') >= 0 && duration.indexOf('M') == -1 && duration.indexOf('S') == -1) {
a = [a[0], 0, 0];
}
duration = 0;
if (a.length == 3) {
duration = duration + parseInt(a[0]) * 3600;
duration = duration + parseInt(a[1]) * 60;
duration = duration + parseInt(a[2]);
}
if (a.length == 2) {
duration = duration + parseInt(a[0]) * 60;
duration = duration + parseInt(a[1]);
}
if (a.length == 1) {
duration = duration + parseInt(a[0]);
}
var h = Math.floor(duration / 3600);
var m = Math.floor(duration % 3600 / 60);
var s = Math.floor(duration % 3600 % 60);
return ((h > 0 ? h + ":" + (m < 10 ? "0" : "") : "") + m + ":" + (s < 10 ? "0" : "") + s);
}
4) Добавьте свой результат с заголовком своего видео.
'<p class="cTitle">' + channelTitle + ' --->' + duration + '</p>'