2010-10-30 38 views
1

我收到來自此Twitter腳本的錯誤,導致頁面的其餘部分無法加載。不知道爲什麼突然發生這種情況,它在一段時間內運行正常。爲什麼這個Twitter API腳本失敗?

腳本看起來像這樣,並將其拉用戶的當前狀態:

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

下面是我試圖找出答案這向我指出這個錯誤Twitter的另一個bug另一篇文章。

您可以在頁腳中看到它here或輸出的屏幕抓圖:http://cl.ly/33IZ

+0

我一直在開發現場(即大量重新加載) - 它可能與API限制有關嗎? – 2010-10-30 22:17:08

+0

如果您在瀏覽器中打開http://twitter.com/users/show/tuscaroratackle.xml,會發生什麼情況? – 2010-10-30 22:20:29

+1

是的。請參閱下面的答案。 ;-) – Lee 2010-10-30 22:26:57

回答

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錯誤的請求」 。

因此,出於某種原因,您的服務器在向HTTP發送請求以檢索文檔"http://twitter.com/users/show/tuscaroratackle.xml"時失敗。返回碼是400 Bad Request

我剛剛嘗試了來自我的網絡瀏覽器的相同請求,並且它運行良好,所以無論是暫時「外出吃午飯」(時常發生),還是您的服務器的網絡配置都有一些獨特的。我的第一個猜測是,從你的服務器上傳到某個地方,某人已經安裝了一個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來獲得未解析的響應主體。

祝你好運!

+0

非常感謝您提供非常徹底和深思熟慮的回覆 - 我非常感謝您花時間解釋這一切。當你嘗試通過試驗和錯誤學習新東西(比如我用PHP和腳本!)時,它會非常令人沮喪。僅供參考 - 我一直在間歇性地發生,所以我認爲限速肯定會適合。我還被建議緩存可以解決這個問題,但考慮到我的技術水平和效率,我可能會選擇使用Twitter JavaScript小部件的更簡單的解決方案。 Thx再次! – 2010-10-30 22:36:42

+0

沒問題!很高興我能幫上忙。緩存真的很容易。 [這是我剛剛找到的一個簡單示例](http://snipplr.com/view/13646/twitter-cache/)。你可以非常輕鬆地使用這些代碼,並改變'file_get_contents'來使用'SimpleXMLElement'。無論你採取哪個方向 - 祝你好運! – Lee 2010-10-30 23:05:39