Я использовал функцию, которую создал после объединения разных фрагментов кода для своего блога Wordpress. Это позволило мне передать шорткод со значением, определяющим URL-адрес видео на YouTube, после чего он распечатал встроенное видео, количество просмотров и продолжительность непосредственно под ним.
К сожалению, похоже, что API, который я использовал, устарел Google, и я не могу заставить текущий API (v3) работать с этим кодом, поэтому я был бы признателен за помощь в попытке сделать это правильно. Я получил ключ разработчика от Google и могу получить ответ JSON, когда я открываю его прямо в своем браузере, но похоже, что вызовы в приведенном ниже коде по какой-то причине не хотят совпадать. Было бы полезно, если бы я все еще мог ссылаться на старый ответ API для сравнения, поэтому здесь я как бы летаю вслепую.
add_shortcode('yt', 'getYoutubeFrame');
// Convert Seconds to Minutes
function sec2hms ($sec, $padHours = false)
{
$hms = "";
$hours = intval(intval($sec) / 3600);
$hms .= ($padHours)
? str_pad($hours, 2, "0", STR_PAD_LEFT). ":"
: $hours. ":";
$minutes = intval(($sec / 60) % 60);
$hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ":";
$seconds = intval($sec % 60);
$hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
return $hms;
}
function getYoutubeFrame($atts) {
extract(shortcode_atts(array(
'video' => ''
), $atts));
// Get YouTube data via the API
$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos?q=$video&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'};
$views = number_format($views);
$duration = $JSON_Data->{'feed'}->{'entry'}[0]->{'media$group'}->{'yt$duration'}->{'seconds'};
$s = "<iframe width=\"1280\" height=\"720\" src=\"//www.youtube.com/embed/$video?showinfo=0&rel=0&modestbranding=1&theme=light&iv_load_policy=3&autohide=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen></iframe>";
$s .= "<strong>Views:</strong> $views<br><strong>Duration:</strong> ";
$s .= sec2hms($duration);
$s .= "<br /><br />";
return $s;
}
Похоже, что API изменил способ отображения продолжительности (с использованием ISO 8601 вместо необработанного количества секунд). Мой опыт и знания PHP довольно ограничены, иначе я, вероятно, решил бы это во сне! Любые предложения о том, как решить эту проблему?