Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
截至2012年11月,通过json和php获取youtube数据的正确语法是什么?_Php_Json_Syntax_Youtube Api - Fatal编程技术网

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

截至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和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_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保护)
这是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>";
//基本表单信息
$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个错误的原因