json と php 経由で youtube の動画データを取得するのに苦労しています。
私は一晩中朝から晩まで、Web やスタック オーバーフローからコード スニペットを試してみました。
それらが機能していないという事実は、私が最新の構文を使用していないことを示唆しています。
この質問をする最も明確な方法は、次のプロパティが 2012 年 11 月の時点で正しいかどうかを尋ねることだと思います。
これは私の最初の変数宣言です:
$json = file_get_contents("http://gdata.youtube.com/feeds/api/videos/{$random_text}?v=2&alt=json");
$json_data = json_decode($json);
以下が正しいかどうか誰か教えてください。
1. $video_title = $json_data->{'entry'}->{'title'};
2. $video_date = $json_data->{'entry'}->{'published'};
3. $video_duration = $json_data->{'entry'}->{'media:group'}->{'yt$duration'};
4. $video_views = $json_data->{'entry'}->{'yt$statistics'}->{'viewCount'};
5. $video_description = $json_data->{'entry'}->{'content'};
他のコードや情報を提供しすぎて質問を薄めたくはありませんが、取得しているエラーの1つは次のとおりです。
Catchable fatal error: Object of class stdClass could not be converted to string
したがって、これらのプロパティの1つが正しくないことはわかっています。
助けてくれてありがとう、私はコーヒーを飲んでこれに戻ってくるよ!
リサーチ
これらのリソースは、取得しようとしているプロパティへの直接の API 参照であり、機能するはずですが、そうではないようです:(。
フィードとエントリの構造:
エントリの内容:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_entry
タイトルタグ:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_title
公開タグ:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_published
yt:duration タグ:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_yt:期間
yt:statistics > viewCount タグ:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_yt:統計
content タグ (動画の説明):
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_content
コードサンプル(ご要望に応じて)
だから私がやっていることは:
- 私はフォームを持っています
- 送信時にphpファイル(insert.php)によって処理されます
- データにいくつかの変更を加えてから、データベースに送信します
- $final_li_code で始まる行にエラー メッセージが表示されます (ただし、json 変数が含まれていない場合、コードは機能するため、json 変数に問題があります)
- (このフォームは sql インジェクションに対して脆弱であると言われていますが、一般向けのフォームではありません。つまり、htaccess/htpasswd で保護されています)。
これは、insert.php の関連コードです。
// basic form information
$field1 = $_POST["field1"];
$field2 = $_POST["field2"];
$original_link = $_POST["link"];
// add class and video display information
$random_text = array_pop(explode('/',$original_link));
$final_value = "<a class=\'youtube\' href=\"http://www.youtube.com/embed/".$random_text."?rel=0&autohide=1&showinfo=0&autoplay=0&iv_load_policy=3&wmode=transparent\">link</a>";
//start getting the youtube information
$thumb = "<img src=\"http://i.ytimg.com/vi/".$random_text."/mqdefault.jpg\">";
$json = file_get_contents("http://gdata.youtube.com/feeds/api/videos/{$random_text}?v=2&alt=json");
$json_data = json_decode($json);
$video_title = $json_data->entry->title;
$video_date = $json_data->entry->published;
$video_duration = $json_data->entry->media:group->yt:duration;
$video_views = $json_data->entry->ytstatistics->viewCount;
$video_description = $json_data->entry->content;
// put it all together to create an <li>
$final_li_code = "<li class=\".{$field1} .{$field2}\">{$thumb}<div id=\"video_information\"><h3>{$video_title}</h3><div id=\"video_information_left\"><span id=\"date\">{$video_date}</span><span id=\"duration\">{$video_duration}</span><span id=\"another_id\">{$field2}</span></div><div id=\"video_information_right\"><span id=\"video_views\">{$video_views}</span><span id=\"yet_another_id\">{$field1}</span></div><span id=\"description\">{$video_description}</span></div></li>";