截至 2012 年 11 月,通过 json 和 php 获取 youtube 数据的正确语法是啥?

Posted

技术标签:

【中文标题】截至 2012 年 11 月,通过 json 和 php 获取 youtube 数据的正确语法是啥?【英文标题】:what is the correct syntax to use for getting youtube data via json and php as at november 2012?截至 2012 年 11 月,通过 json 和 php 获取 youtube 数据的正确语法是什么? 【发布时间】: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/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: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&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>";

【问题讨论】:

看看这个,会有用的:***.com/questions/13219020/… 去掉卷曲和单引号。 $json_data-&gt;entry-&gt;title 或者,将true 的第二个参数传递给json_decode 并将其作为数组$json_data['entry']['title'] 访问。箭头和花括号看起来像是 Perl 中的东西,它是访问嵌套数组引用的语法。在 PHP 中,像这样的卷曲和引号会进行一些有趣的字符串化,通常不应该在不了解实际情况的情况下使用。 感谢您的回复,尝试测试第一个解决方案,代码编辑器不喜欢$video_duration = $json_data-&gt;entry-&gt;media:group-&gt;yt$duration;$video_views = $json_data-&gt;entry-&gt;yt$statistics-&gt;viewCount; - 你能告诉我这些的语法应该是什么吗?谢谢。 @charles:feed 中返回的属性经常使用$ 字符。大括号和单引号可以去掉,除非$ 出现在属性名称中。 @SalmanA,听起来像是精神错乱的秘诀,尤其是考虑到: 似乎也经常被使用。我个人强烈建议将 JSON 数据解码为数组,这自然会使用字符串键。 【参考方案1】:

收到您的 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 的示例输出:

string(66) 《芝麻街:雷·查尔斯与伯特合唱《我有歌》 和厄尼”

字符串(24)“2008-08-06T18:56:56.000Z”

字符串(3)“129”

字符串(6)“828277”

string(342) "欲了解更多视频和游戏,请查看我们的新网站: http://www.sesamestreet.org

在此视频中,Bert 和 Ernie 与 Ray Charles 一起表演。

芝麻街是非营利组织芝麻工作室的作品 教育组织也生产 Pinky Dinky Doo, The Electric Company 和其他面向世界各地儿童的计划。”

PS:如果您对关联数组感到满意,请将 true 作为第二个参数传递给 json_decode

mixed json_decode(string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]])

PPS:var_dump 数据要容易得多,找到您需要的所有位,然后编写代码。

【讨论】:

非常感谢,我目前正在解决一些问题,并在我测试完所有内容后返回这里,再次感谢您!【参考方案2】:

您收到的错误意味着您正在尝试打印出一个对象。您可以使用 var_dump($json_data) 更好地了解您正在使用的对象。然后你可以找出可以打印哪些字符串。

为了获得更好的帮助,请提供最短的代码示例来显示您的问题。从 youtube 检索数据的行最终给出 400 错误。此外,您给出的错误表明您正在尝试打印一个值。您提供的示例代码均未尝试打印值。打印 $video_title 可能有效,而打印另一个值无效。

【讨论】:

您好,感谢您的回复,上面的 file_get_contents url 包含一个变量 $random_text 所以如果您尝试访问该 url,这就是我认为出现 400 错误的原因。我已经用代码示例修改了上面的帖子。非常感谢。

以上是关于截至 2012 年 11 月,通过 json 和 php 获取 youtube 数据的正确语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

杂项-公司:Facebook

OSMDROID android 4.2:Mapquest:截至 2016 年 7 月 11 日,直接磁贴访问已停止

曾为boston.gov提供代码。截至2019年11月,已移至Drupal 8。

富士康员工死亡记录(截至5月27日)

如何使用新的 Instagram Graph 或 Basic Display API 获取普通用户的个人资料图片(截至 2020 年 6 月 29 日)

096