2010-10-12 44 views
0

這是我正在使用的代碼,但它在大多數情況下確實返回空白。試圖向我的網站上顯示我的Twitter追隨者沒有運氣

<?php 
$xml=file_get_contents('http://twitter.com/users/show.xml?screen_name=MyTwitterUsernameBla'); 
if (preg_match('/followers_count>(.*)</',$xml,$match)!=0) { 
$count = $match[1]; 
} 
echo $count; 
?> 

我想表明Twitter的追隨者在簡單的方式計算,沒有plugins..it是一個網站,而不是博客。

非常感謝你:)

回答

2

如果它在你的本地主機上工作,但不在你的公共主機上,那麼Twitter很可能會阻止或限制你的公共服務器的IP。許多共享主機被阻止/限制,因爲有多個站點在Twitter API上沒有進行身份驗證。 Twitter將它們視爲一個應用程序,並將整個IP進行遏制。

要解決這個問題,您需要使用oAuth進行身份驗證。這是一個痛苦的屁股,但這是一個必要的步驟。下面是一些你可能會覺得是很方便的資源:

Twitter的爲您提供Twitter Developer website的「你的應用」部分中的一些憑證。一旦您將網站註冊爲應用程序,請點擊我的訪問令牌。這將爲您提供可用於成功進行身份驗證的密鑰/令牌。


另一個想法是,Twitter的僅僅是節流應用。如果是這樣的話,那是因爲你的流量太多,而你沒有緩存API結果。例如,在獲取新副本之前的一個小時內緩存API的結果。如果你這樣做,Twitter將停止將你挑出。

if(filemtime("cache.xml") < (int)$_SERVER["REQUEST_TIME"] - 3600) { 
    $data = file_get_contents("http://twitter.com/users/show.xml?screen_name=username"); 
    file_put_contents("cache.xml", $data); 
} else 
    $data = file_get_contents("cache.xml"); 
+0

不可思議的幫助!緩存的事情做了伎倆..我在網上搜索了一切爲了簡單的解決方案.. :) – 2010-10-12 16:50:51

0

這是更好的(更可靠,更易於維護)來使用XML解析器,而不是試圖用正則表達式來獲取位。

簡單:

$xml = new SimpleXMLElement('http://twitter.com/users/show.xml?screen_name=username', null, true); 

echo $xml->followers_count; 
+0

此代碼適用於localhost,但不適用於我的公共主機。什麼可以禁用主機,並拒絕它的工作? – 2010-10-12 10:34:25

+0

可能allow_url_fopen - http://uk.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen - 嘗試啓用所有錯誤(error_reporting(E_ALL))以獲取錯誤消息,或者您我會盲目地調試 – 2010-10-12 11:29:56

+0

我做到了。沒有錯誤顯示,只是空白.. :( – 2010-10-12 11:40:09

1

想想你的章。進出口。是太貪婪..相信它會匹配一切,直到最後「< /」

嘗試像一個非貪婪匹配:

/followers_count>(.*?)</ 

或匹配除了「<」的一切:

/followers_count>([^<]*)</ 

解析XML可能會更容易,如果你想從XML中提取很多,更「正確」。但在你的情況下似乎過度殺傷。

+0

我嘗試了XML方法。它不會解析webserver上的任何東西。在本地一切都很好..這很奇怪,我檢查是否加載了XML解析器,是的。可能是什麼 – 2010-10-12 10:38:13

+0

在我的文章中看到我的評論。由於這兩種方法在本地工作,我猜測遠程主機上的allow_url_fopen被禁用。您需要將錯誤報告轉爲調試。 – 2010-10-12 11:31:19

相關問題