截至2012年11月,通过JSON和PHP获取YouTube数据的正确语法是什么?



我很难通过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&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>";

收到了您的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个错误。另外,您给出的错误表示您正在尝试打印一个值。您没有尝试打印值的示例代码。当打印另一个值不是。

时,打印$ video_title可能是有效的。

相关内容

  • 没有找到相关文章

最新更新