【发布时间】:2012-10-24 20:25:47
【问题描述】:
我很难通过 json 和 php 获取 youtube 视频数据。
我花了一整夜和一上午的时间尝试从网络上获取代码 sn-ps 和堆栈溢出。
他们不工作的事实表明我没有使用最新的语法。
我认为提出这个问题的最清楚的方法是询问以下属性在 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/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: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_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>";
【问题讨论】:
-
看看这个,会有用的:stackoverflow.com/questions/13219020/…
-
去掉卷曲和单引号。
$json_data->entry->title或者,将true的第二个参数传递给json_decode并将其作为数组$json_data['entry']['title']访问。箭头和花括号看起来像是 Perl 中的东西,它是访问嵌套数组引用的语法。在 PHP 中,像这样的卷曲和引号会进行一些有趣的字符串化,通常不应该在不了解实际情况的情况下使用。 -
感谢您的回复,尝试测试第一个解决方案,代码编辑器不喜欢
$video_duration = $json_data->entry->media:group->yt$duration;和$video_views = $json_data->entry->yt$statistics->viewCount;- 你能告诉我这些的语法应该是什么吗?谢谢。 -
@charles:feed 中返回的属性经常使用
$字符。大括号和单引号可以去掉,除非$出现在属性名称中。 -
@SalmanA,听起来像是精神错乱的秘诀,尤其是考虑到
:似乎也经常被使用。我个人强烈建议将 JSON 数据解码为数组,这自然会使用字符串键。
标签: php json syntax youtube-api