为什么这个Twitter API脚本失败了?

时间:2010-10-30 22:02:30

标签: php xml api twitter

我从这个Twitter脚本中收到一个错误,导致页面的其余部分无法加载。不知道为什么突然发生这种情况,它在相当长的一段时间内正常运作。

脚本如下所示,它会提取用户当前状态:

<?php  
$response = new SimpleXMLElement('http://twitter.com/users/show/tuscaroratackle.xml',NULL,TRUE);  
echo $response->status->text.'';  
?>

这是另一篇文章,我试图弄清楚另一个错误的答案,这个错误指出了我的Twitter错误。

您可以在页脚中看到它here,也可以在输出屏幕上看到它:http://cl.ly/33IZ

1 个答案:

答案 0 :(得分:2)

相关错误(显示在您链接到的页面的页脚中)是:

Warning: SimpleXMLElement::__construct(http://twitter.com/users/show/tuscaroratackle.xml) [simplexmlelement.--construct]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /home5/tuscaror/public_html/footer.php on line 47

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: I/O warning : failed to load external entity "http://twitter.com/users/show/tuscaroratackle.xml" in /home5/tuscaror/public_html/footer.php on line 47

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home5/tuscaror/public_html/footer.php:47 Stack trace: #0 /home5/tuscaror/public_html/footer.php(47): SimpleXMLElement->__construct('http://twitter....', 0, true) #1 /home5/tuscaror/public_html/index.php(119): include('/home5/tuscaror...') #2 {main} thrown in /home5/tuscaror/public_html/footer.php on line 47

第一个警告告诉您发生了什么:“HTTP请求失败!HTTP / 1.1 400错误请求”。

因此,出于某种原因,在向Twitter发送HTTP请求以检索文档"http://twitter.com/users/show/tuscaroratackle.xml"时,您的服务器失败了。返回码为400 Bad Request

我刚刚从我的网络浏览器尝试了相同的请求,并且它工作正常,因此Twitter暂时“外出吃午餐”(这确实不时发生),或者您的服务器的网络配置有一些独特之处。我的第一个猜测是,从您的服务器上游的某个地方,有人安装了一个HTTP代理(由于某种未知的原因)阻止您的请求。


以下是twitter has to say about it

400 Bad Request: The request was invalid.  An accompanying error message 
will explain why. This is the status code will be returned during rate limiting.

Here is twitter's page on Rate Limiting。我怀疑这是你的罪魁祸首。如果您不这么认为,那么您可以尝试将文档作为字符串检索并在之前检查它,然后尝试解析它,这样您就可以看到消息是什么。

这很快,很脏,但它会收到消息,以便您可以看到正在发生的事情:

$str = file_get_contents('http://twitter.com/users/show/tuscaroratackle.xml');
echo $str;

由于400响应代码可能会失败。如果是这样,您将需要使用php curl来获取未解析的响应正文。

祝你好运!