我很难通过json和php获取youtube视频数据。
我花了整整一个晚上和一个上午的时间尝试从网络和堆栈溢出的代码片段。
它们不起作用的事实告诉我,我没有使用最新的语法。
我认为,问这个问题最清楚的方法是,询问截至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'};

我不想通过提供太多其他代码和信息来淡化这个问题,但我得到的一个错误是:
Catchable fatal error: Object of class stdClass could not be converted to string

所以我知道其中一个属性是不正确的。
谢谢你的帮助,我去喝杯咖啡回来!
研究
这些资源是对我试图获取的属性的直接api引用,应该可以工作,但它们似乎不是:(。
feed和entry结构:
https://developers.google.com/youtube/2.0/developers_guide_protocol_understanding_video_feeds#Understanding_Video_Entries
条目的内容:
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:持续时间标记:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_yt:duration
yt:statistics>viewcount标记:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_yt:statistics
内容标签(视频描述):
https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_content
代码示例(根据要求)
所以我要做的是:
我有一张表格
提交时由一个php文件(insert.php)处理。
它对数据进行一些更改,然后提交到数据库
我在以$final_li_代码开头的行中得到错误消息(但是如果不包括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&amp;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>";

最佳答案

收到你的求救信息了。以下是您需要做的更改:

$video_title = $json_data->{'entry'}->{'title'}->{'$t'};
$video_date = $json_data->{'entry'}->{'published'}->{'$t'};
$video_duration = $json_data->{'entry'}->{'media$group'}->{'yt$duration'}->{'seconds'};
$video_views = $json_data->{'entry'}->{'yt$statistics'}->{'viewCount'};
$video_description = $json_data->{'entry'}->{'media$group'}->{'media$description'}->{'$t'};

注意$t是紧跟着$的文本,而不是名为t的变量。
视频ID gzds-kfd5xq的输出示例:
弦乐(66)“芝麻街:雷·查尔斯和伯特唱了一首歌”
“Ernie”
字符串(24)“2008-08-06T18:56:56.000Z”
字符串(3)“129”
字符串(6)“828277”
string(342)“有关更多视频和游戏,请访问我们的新网站
http://www.sesamestreet.org
在这段视频中,伯特和厄尼与雷·查尔斯一起表演。
芝麻街是芝麻作坊的产物,一个非盈利组织
教育组织,也生产小指小指嘟嘟
为全世界的儿童提供电力公司和其他项目。”
注:如果您熟悉关联数组,请将true作为第二个参数传递给$t
mixed json_decode(string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]])

pps:这是一个更容易json_decode的数据,找到所有你需要的位,然后写代码。

09-20 10:02