1

YouTube プレイリスト内のすべてのビデオのすべての再生時間をカウントする、drupal サイト用の小さな php スニペットを作成したいと思います。このサイトで良い出発点を見つけることができました。いくつかの変更を加えましたが、ほとんど良いです。

<?php
$playlist_id = "266DBEDBE6892C11";
$url = "https://gdata.youtube.com/feeds/api/playlists/".$playlist_id."?v=2&alt=json&start-index=1&max-results=50";
$data = json_decode(file_get_contents($url),true);
$info = $data["feed"];
$video = $info["entry"];
$nVideo = count($video);
$length = 0;

echo "Playlist Name: ".$info["title"]['$t'].'<br/>';
echo "Number of Videos (".$nVideo."):<br/>";
for($i=0;$i<200;$i++){
$temporary_length =  $video[$i]['media$group']['yt$duration']['seconds'];
$length += $temporary_length;
echo "Lenght: ". $temporary_length ."<br/>";
}

echo "Length: " . $length ;

?>

私の問題は、ページネーションができないことです。YouTube では最大 50 件の結果しか得られません。start-index パラメーターを使用してみましたが、うまくいきませんでした。YouTube APIページを検索しましたが、それを行う手がかりがありません。私はプログラマーではありません。これは、限られたプログラミング知識で思いついたものです。プレイリスト内のすべての動画をカウントするには、コードに何を追加すればよいですか? または、誰かが別のスニペットで私を助けることができれば、それも完璧です.

ありがとうございました!

4

1 に答える 1

0

申し訳ありませんが、ここでこれをテストすることはできませんが、発生しているエラーを考慮して、YouTube から受け取ったデータを最初に確認する必要があると思います。

また、現在のページとページごとのリクエストをテストするためのフレンドリーな方法も用意しました。

<?php

//Configurable
$playlist_id = "266DBEDBE6892C11";
$results_per_request = 50;
$current_page = 1;

$start_index = $request_per_page * ($current_page - 1) + (($current_page > 1) ? 1 : 0);
$url = "https://gdata.youtube.com/feeds/api/playlists/".$playlist_id."?v=2&alt=json&start-index=".$start_index."&max-results=".$results_per_request;
$data = json_decode(file_get_contents($url),true);

if (is_array($data) && count($data) > 0)
{
$info = $data["feed"];
$video = $info["entry"];
$nVideo = count($video);
$length = 0;

echo "Playlist Name: ".$info["title"]['$t'].'<br/>';
echo "Number of Videos (".$nVideo."):<br/>";
for($i=0;$i<200;$i++){
$temporary_length =  $video[$i]['media$group']['yt$duration']['seconds'];
$length += $temporary_length;
echo "Lenght: ". $temporary_length ."<br/>";
}

echo "Length: " . $length ;
}
else
{
echo "Youtube did not return any more results."
}

?>
于 2012-07-29T09:36:15.670 に答える