截至2012年11月,通过json和php获取youtube数据的正确语法是什么?
我很难通过json和php获取youtube视频数据 我花了整整一个晚上和一个上午的时间尝试来自web和堆栈溢出的代码片段 它们不起作用的事实向我表明,我没有使用最新的语法 我认为问这个问题最清晰的方式是询问以下属性截至2012年11月是否正确 这是我最初的变量声明:截至2012年11月,通过json和php获取youtube数据的正确语法是什么?,php,json,syntax,youtube-api,Php,Json,Syntax,Youtube Api,我很难通过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 = 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引用,应该可以工作,但它们似乎不是:(
提要和入口结构:
条目的内容:
标题标签:
已发布标签:
yt:持续时间标签:
yt:statistics>viewCount标记:
内容标签(视频描述):
代码示例(根据要求)
所以我现在做的是:
- 我有一张表格
- 提交后,它由一个php文件(insert.php)处理
- 它对数据进行一些更改,然后提交到数据库
- 我在以$final_li_code开头的行中得到了错误消息(但是如果没有包含json变量,那么那里的代码会起作用,所以问题在于json变量)
- (我被告知此表单易受sql注入攻击,但它不是面向公众的表单,即受htaccess/htpasswd保护)
// 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>";
//基本表单信息
$field1=$_POST[“field1”];
$field2=$_POST[“field2”];
$original_link=$\u POST[“link”];
//添加类和视频显示信息
$random_text=array_pop(分解('/',$original_link));
$final_value=“”;
//开始获取youtube信息
$thumb=“”;
$json=文件\u获取\u内容(“http://gdata.youtube.com/feeds/api/videos/{$random_text}?v=2&alt=json“;
$json_data=json_decode($json);
$video\u title=$json\u data->entry->title;
$video\u date=$json\u data->entry->published;
$video\u duration=$json\u data->entry->media:group->yt:duration;
$video\u views=$json\u data->entry->ytstatistics->viewCount;
$video\u description=$json\u data->entry->content;
//将所有这些放在一起,创建一个
$final\u li\u code=“ {$thumb}{$video\u title}{$video\u date}{$video\u duration}{$field2}{$video\u views}{$field1}{$video\u description} ”;
您收到的错误表示您正试图打印出一个对象。您可以使用var_dump($json_data)更好地了解您正在使用的对象。然后您可以找到可以打印的字符串
为了获得更好的帮助,请提供显示您的问题的最短代码示例。从youtube检索数据时给出的行最终给出400错误。此外,您给出的错误表示您正在尝试打印值。您给出的示例代码中没有一个尝试打印值。打印$video\u title可能在以下情况下有效:无法打印其他值。收到您的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的示例输出:
《芝麻街:雷·查尔斯和伯特一起唱《我有一首歌》
&厄尼“
字符串(24)“2008-08-06T18:56:56.000Z”
字符串(3)“129”
字符串(6)“828277”
字符串(342)“更多视频和游戏请访问我们的新网站
在这段视频中,伯特和厄尼与雷·查尔斯一起表演
芝麻街是一家非营利组织芝麻街工作室的产品
教育组织,也生产小指丁基斗,该组织
电力公司和其他面向全世界儿童的项目。”
PS:如果您熟悉关联数组,请将true作为第二个参数传递给json\u decode
:
mixed json_decode(string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]])
PPS:
var_dump
数据更容易,找到所有需要的位,然后编写代码。看看这个,可能有用:去掉卷曲和单引号。$json_data->entry->title
或者,将第二个参数true
传递到json_decode
并作为数组,$json_数据['entry']['title']
。箭头和卷曲看起来像是来自Perl的东西,在Perl中,它将是访问嵌套arrayrefs的语法。在PHP中,类似的卷曲和引号会进行一些有趣的字符串化,通常不应该在不了解实际情况的情况下使用。感谢您的回复,尝试测试第一个解决方案,代码编辑器不会这样做ke$video\u duration=$json\u data->entry->media:group->yt$duration;
和$video\u views=$json\u data->entry->yt$statistics->viewCount;
-你能告诉我这些的语法应该是什么吗?谢谢。@charles:提要中返回的属性经常使用$
字符。大括号和单引号可以删除,除非$
出现在属性名中。@SalmanA,听起来像是疯狂的处方,特别是考虑到:
似乎也经常被使用。我个人强烈建议将JSON数据解码到数组中,这自然会使用字符串键。您好,谢谢您的回复,文件上面的t_contents url包含一个变量{$random_text}
,因此,如果您试图访问该url,我想这就是为什么会出现400个错误的原因