11

我想获取 Youtube 视频的持续时间。这是我尝试过的代码:

$vidID="voNEBqRZmBc";
//http://www.youtube.com/watch?v=voNEBqRZmBc
$url = "http://gdata.youtube.com/feeds/api/videos/". $vidID;
$doc = new DOMDocument;
$doc->load($url);
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

请检查 XML 文件。我得到了这个视频的标题。我想从<yt:duration seconds='29'/>.

如何获取这个标签的seconds属性?<yt>

4

6 回答 6

17

由于 YouTube v2 API 即将弃用,这里有一个更新的解决方案。

  1. 首先在此处克隆 Google API PHP 客户端
  2. 接下来,您需要在此处通过创建一个新项目、在“APIs and auth → API”部分下打开 YouTube Data API 来向 Google 注册一个应用程序,然后
  3. 在“APIs and auth → Credentials”下创建一个新的 OAuth 客户端 ID,并将完整路径添加到您的重定向 URI 列表。(即http://example.com/get_youtube_duration.php
  4. 使用代码(改编自此示例代码),同时确保使用步骤 3 中您自己的值填写 $OAUTH2_CLIENT_ID 和 $OAUTH2_CLIENT_SECRET 变量。
  5. 硬编码 $videoId 变量的值或使用 video_id 获取参数设置它(即http://example.com/get_youtube_duration.php?video_id=XXXXXXX
  6. 访问您的脚本,单击链接以授权应用程序并使用您的谷歌帐户获取令牌,它将您重定向回您的代码并显示持续时间。

这是您的输出:

Video Duration

0 mins

29 secs

一些额外的资源: https ://developers.google.com/youtube/v3/docs/videos#contentDetails.duration https://developers.google.com/youtube/v3/docs/videos/list

以下仅适用于 V2 API。

基于提要中只有一个持续时间元素的假设,这对我有用。

<?php

$vidID="voNEBqRZmBc";
//http://www.youtube.com/watch?v=voNEBqRZmBc
$url = "http://gdata.youtube.com/feeds/api/videos/". $vidID;
$doc = new DOMDocument;
$doc->load($url);
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;
$duration = $doc->getElementsByTagName('duration')->item(0)->getAttribute('seconds');

print "TITLE: ".$title."<br />";
print "Duration: ".$duration ."<br />";

输出:

TITLE: Introducing iTime
Duration: 29
于 2013-09-20T16:28:15.407 回答
10

这是 YouTube API V3,以获取视频时长为例,但不要忘记在https://console.developers.google.com/project创建您的 API 密钥

     $vidkey = "cHPMH2sa2Q" ; video key for example 
$apikey = "xxxxxxxxxxxxxxxxxxxxx" ;
$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vidkey&key=$apikey");
$VidDuration =json_decode($dur, true);
foreach ($VidDuration['items'] as $vidTime) 
{
$VidDuration= $vidTime['contentDetails']['duration'];
}
于 2015-04-21T05:53:12.740 回答
3

使用 SimpleXML 的简短解决方案:

function getYouTubeVideoDuration($id) {
 $xml = simplexml_load_file('http://gdata.youtube.com/feeds/api/videos/'.$id);
 return strval($xml->xpath('//yt:duration[@seconds]')[0]->attributes()->seconds);
}
于 2013-09-20T15:47:10.550 回答
2

所有上一个答案都以文本格式提供持续时间:

此解决方案将为您提供小时/分钟/秒,以便您转换为您想要的任何格式:

function getDurationInSeconds($talkId){
   $vidkey = $talkId;
   $apikey = "xxxxx";
   $dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vidkey&key=$apikey");
   $VidDuration =json_decode($dur, true);
   foreach ($VidDuration['items'] as $vidTime)
   {
       $VidDuration= $vidTime['contentDetails']['duration'];
   }
   preg_match_all('/(\d+)/', $VidDuration, $parts);
   $hours = intval(floor($parts[0][0]/60) * 60 * 60);
   $minutes = intval($parts[0][0]%60 * 60);
   $seconds = intval($parts[0][1]);
   $totalSec = $hours + $minutes + $seconds; // This is the example in seconds
   return $totalSec;
}
于 2015-08-07T10:56:04.800 回答
0

很容易

function getYoutubeDuration($videoid) {
      $xml = simplexml_load_file('https://gdata.youtube.com/feeds/api/videos/' . $videoid . '?v=2');
      $result = $xml->xpath('//yt:duration[@seconds]');
      $total_seconds = (int) $result[0]->attributes()->seconds;

      return $total_seconds;
}

//now call this pretty function. As parameter I gave a video id to my function and bam!
echo getYoutubeDuration("y5nKxHn4yVA");
于 2014-07-19T21:36:11.813 回答
-2

您还可以在 JSON 中获取持续时间

       $video_id = "<VIDEO_ID>";
       http://gdata.youtube.com/feeds/api/videos/$video_id?v=2&alt=jsonc

哦!抱歉,您可以通过以下方式获得它:

$duration = $xml->getElementsByTagName('duration')->item(0)->getAttribute('seconds');
于 2013-10-18T10:31:09.893 回答