Youtube api youtube API有时会抛出错误:对非对象调用成员函数children()
当我启动php脚本时,有时工作正常,但很多时候它会检索到这个错误 致命错误:对中的非对象调用成员函数children() /membri/americanhorizon/ytvideo/rilevametadatadaurlyoutube.php在线 二十一, 这是代码的第一部分Youtube api youtube API有时会抛出错误:对非对象调用成员函数children(),youtube-api,php,Youtube Api,Php,当我启动php脚本时,有时工作正常,但很多时候它会检索到这个错误 致命错误:对中的非对象调用成员函数children() /membri/americanhorizon/ytvideo/rilevametadatadaurlyoutube.php在线 二十一, 这是代码的第一部分 // set feed URL $feedURL = 'http://gdata.youtube.com/feeds/api/videos/dZec2Lbr_r8'; // read feed into Simple
// set feed URL
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/dZec2Lbr_r8';
// read feed into SimpleXML object
$entry = simplexml_load_file($feedURL);
$video = parseVideoEntry($entry);
function parseVideoEntry($entry) {
$obj= new stdClass;
// get nodes in media: namespace for media information
$media = $entry->children('http://search.yahoo.com/mrss/'); //<----this is the doomed line 21
//设置提要URL
$feedURL='1http://gdata.youtube.com/feeds/api/videos/dZec2Lbr_r8';
//将提要读入SimpleXML对象
$entry=simplexml\u load\u文件($feedURL);
$video=parseVideoEntry($entry);
函数parseVideoEntry($entry){
$obj=新的stdClass;
//获取媒体中的节点:媒体信息的命名空间
$media=$entry->children('http://search.yahoo.com/mrss/“);//说明。”|“$video->length);
回声“
”;
}
其他的
{
$i--;
}
}
在此模式下,我强制脚本重新检查导致错误的文件首先调用函数:
$entry = simplexml_load_file($feedURL);
该函数有一个返回值。您可以在该功能的手册页上找到它:
$entry = simplexml_load_file($feedURL);
$entry
的形式使用该返回值,而不验证函数调用是否成功
因此,您接下来会遇到一个错误。然而,您的错误是如何处理函数的返回值
不正确处理返回值就像自找麻烦。阅读您使用的函数,检查返回值,并根据成功或错误条件进行操作
$entry = simplexml_load_file($feedURL);
if (FALSE === $entry)
{
// youtube not available.
}
else
{
// that's what I love!
}
有时?真正地
看看这个:
<?php
$dummy; //IN FACT, this var is NULL now
// Will throw exactly the same error you get
$dummy->children();
可能是一个超时问题,因为它是间歇性发生的。错误是在脚本启动后立即检索到的,因此它不是超时问题。此外,我从官方文档页面获取了这段代码。ohh您可以自己尝试脚本@h2oooo:var_dump retrieve me bool(false)当错误发生时happen@AnnaLica如果不是超时,YouTube可能会出现问题。False等于失败:“或失败时为False。
”。如果您想获得更准确的详细信息,那么使用cURL获取数据,并使用simplexml\u load\u string($outputFromCurlExec)代码>将其转换为XML。嗯,这个问题听起来像是在che调用完成之前启动了函数。。所以我需要一些听众,告诉我什么时候通话结束。对吧?有点。您已经有了“listener”,它是$entry
中的返回值。因此,通话将始终完成,但结果并不总是积极的。当您从远程服务加载数据时,可能会发生这种情况,例如网络错误和类似情况。想象一下,youtube的服务因为数据库问题而停止。因此,您需要针对错误进行设计。比如检查函数结果是否为假。因此,youtube似乎存在一个问题:(太好了!!!根据你的建议,我采用了一个温和的解决方案..如果变量不是一个对象,我将强制重新检查它!我更新了我的第一篇文章以共享代码
<?php
if ( is_object($dummy) && method_exists($dummy, 'children') ){
//sure it works
$dummy->children();
}