我很难通过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引用,但它们似乎并不是:(。
提要和输入结构:
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_api_tag_entry
标题标签:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_api_tag_title
发布的标签:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_api_tag_published
yt:持续时间标签:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_api_tag_yt:duration
yt:statistics> ViewCount标签:
https://developers.google.com/youtube/2.0/reference#youtube_data_api_api_tag_yt:statistics
内容标签(视频描述):
https://developers.google.com/youtube/2.0/reference#youtube_data_api_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>";
收到了您的SOS消息。这是您需要进行的更改:
$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
,而不是名为$t
的变量。
视频ID GZDS-KFD5XQ的样本输出:
字符串(66)"芝麻街:雷·查尔斯(Ray Charles) &amp;Ernie"
字符串(24)" 2008-08-06T18:56:56.000Z"
字符串(3)" 129"
字符串(6)" 828277"
字符串(342)"有关更多视频和游戏,请查看我们的新网站 http://www.sesamestreet.org
在此视频中,伯特和厄尼与雷·查尔斯一起表演。
芝麻街是芝麻研讨会的制作,这是一个非营利组织 教育组织还生产小指dinky doo, 电力公司和其他针对世界各地儿童的计划。"
ps:如果您对关联阵列感到满意,请将真实的第二个参数传递给json_decode
:
mixed json_decode(string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]])
pps:var_dump
数据要容易得多,找到所需的所有位并之后编写代码。
您收到的错误意味着您正在尝试打印出对象。您可以使用var_dump($ json_data)更好地了解与您一起使用的对象。然后,您可以找出可以打印哪些字符串。
要获得更好的帮助,请包括显示您的问题的最短代码样本。从YouTube检索数据的行最终给出了400个错误。另外,您给出的错误表示您正在尝试打印一个值。您没有尝试打印值的示例代码。当打印另一个值不是。