1

YouTube の API からデータにアクセスしています。すべて正常に動作していますが、ビデオ ID の先頭にダッシュ (-) があると、json データが返されないという問題があります。

$videoID = -FIHqoTcZog;
$json = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json"));

ただし、これを使用して、いつものようにサムネイルを返すことができます。

$thumbnail = "http://i4.ytimg.com/vi/".$videoID."/mqdefault.jpg";   

これは、上記の json から必要な情報を取得するために使用するコードです。

$title = $json->{'feed'}->{'entry'}[0]->{'title'}->{'$t'};
$description = $json->{'feed'}->{'entry'}[0]->{'media$group'}->{'media$description'}->{'$t'};
$thumbnail = "http://i4.ytimg.com/vi/".$videoID."/mqdefault.jpg";   
$ratings = ((round($json->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'average'}, 1)/$json->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'max'})*100)."%";
$views = number_format($json->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'});
$duration = $json->{'feed'}->{'entry'}[0]->{'media$group'}->{'yt$duration'}->{'seconds'};
4

1 に答える 1

0

ID の前にダッシュが付いている場合にのみ問題が発生していますか? gdata フィードは JSON の一部として「$」文字を含むテキストを返すため、貼り付けたコードは Youtube ID では機能しません。その文字は PHP 識別子であるため、フィードが返すものに対して json_decode 関数を実行しようとすると、500 エラーが発生します。

この問題を解決する 1 つの方法は、次のように、json_decode の 2 番目のパラメーターを使用して、オブジェクトではなく連想配列を提供することです。

$json = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json"),true);

もちろん、配列も操作する必要がありますが、その後のコードの変更は最小限に抑える必要があります。

まったく同じコードを使用した他の動画でエラーが発生しない場合は、ここに投稿していただけないでしょうか?

于 2013-01-10T05:41:52.513 に答える