web-dev-qa-db-ja.com

YouTube APIを使用してビデオの長さを取得するにはどうすればよいですか?

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'/>から期間を取得したい。

この<yt>タグのseconds属性を取得するにはどうすればよいですか?

10
Developer

YouTube v2 APIが間もなく廃止されるため、ここに更新されたソリューションがあります。

  1. GoogleAPIのクローンを作成することから始めますPHPクライアント ここ
  2. 次に、新しいプロジェクトを作成し、[APIと認証→API]セクションでYouTube Data APIをオンにして、アプリケーションをGoogleに登録します ここ
  3. 新しいOAuthクライアントIDを[APIと認証→認証情報]の下に作成し、リダイレクトURIリストにフルパスを追加します(例: http://example.com/get_youtube_duration)。 php
  4. ステップ3の独自の値を$ OAUTH2_CLIENT_ID変数と$ OAUTH2_CLIENT_SECRET変数に入力している間、 this コード( this サンプルコードから適応)を使用します。
  5. $ videoId変数の値をハードコードするか、video_id getパラメーターを使用して設定します(つまり、 http://example.com/get_youtube_duration.php?video_id=XXXXXXX
  6. スクリプトにアクセスし、リンクをクリックしてアプリを認証し、Googleアカウントを使用してトークンを取得します。トークンを取得すると、コードにリダイレクトされ、期間が表示されます。

これがあなたの出力です:

Video Duration

0 mins

29 secs

その他のリソース: https://developers.google.com/youtube/v3/docs/videos#contentDetails.durationhttps://developers.google.com/youtube/v3/ docs/videos/list

以下は、V2 APIでのみ機能します。

これは、フィードに含まれる期間要素が1つだけであるという想定に基づいて機能しました。

<?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
17
Chris Rasco

ここでは、動画の長さを取得する例を示した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'];
}
8
Ams Naser

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);
}
3
Amal Murali

すべての前の回答は、テキスト形式で期間を提供します:

このソリューションでは、時間/分/秒を任意の形式に変換できます。

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;
}
2
Nimrod007

非常に簡単

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");
0
hakiko