【问题标题】:Updating YouTube PHP Function for V3 API更新 V3 API 的 YouTube PHP 函数
【发布时间】:2015-09-11 14:17:15
【问题描述】:

我一直在使用我为我的 Wordpress 博客拼凑不同代码位后创建的函数。它允许我传入一个短代码,其中包含一个定义 YouTube 视频 URL 的值,然后它会打印嵌入的视频、观看次数和其下方的持续时间。

不幸的是,我使用的 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 的经验和知识相当有限,否则我可能会在睡梦中解决这个问题!有关如何解决此问题的任何建议?

【问题讨论】:

  • 欢迎来到堆栈:代码到底有什么问题?有错误吗?顺便说一句,Gdata 没有关闭,您仍然可以使用它。它是关闭的客户端登录服务器,您现在需要使用 Oauth2。

标签: php wordpress youtube youtube-api youtube-data-api


【解决方案1】:

您可以像这样在 YouTube API 的 v3 上使用 videos:list 调用:

$JSON = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=statistics,contentDetails&id=$videoId&key={YOUR-API-KEY}");
$json_data = json_decode($JSON, true);

$views = $json_data['items'][0]['statistics']['viewCount'];
$duration =  $json_data['items'][0]['contentDetails']['duration'];

这将获得$videoId中指定的视频的观看次数和时长。

$duration 将以 ISO 8601 格式返回,类似于PT4H48M18S。您可以根据需要将其传递给DateInterval 类,然后传递给format。例如:

$dateInterval = new DateInterval($duration);
$formattedDuration = $dateInterval->format("%H:%I:%S");

将采用 PT4H48M18S 并使其看起来像这样 04:48:18

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2015-10-04
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2015-09-05
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多