2012-11-14 192 views
1

全部, 我一直在打比率限制。我只是想從我自己的時間表中獲得最新的狀態。我使用下面的代碼來實現這一目標:對Twitter API進行身份驗證

$url = "https://api.twitter.com/1/statuses/user_timeline.json?screen_name={$username}&count={$how_many}"; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($curl); 
curl_close($curl); 
if (! empty($contents)) { 
    // Decode it. 
    $tweet = json_decode($contents); 
    // Cache it for next time. 
    set_transient($id.'-'.$username, $tweet, 60*60*12); // 3 hour cache 
} 

這工作得很好,但我打150個請求我的限速每小時所有的時間。我已經讀過,如果我通過API進行身份驗證,速率限制已取消。任何人都可以解釋如何做到這一點?

在此先感謝!

回答

1

您是否需要每4分鐘刷新一次您的狀態?我會猜測,你實際上是在你的代碼中設置一個3小時的緩存,所以爲什麼不使用它?

if(get_transient($id.'-'.$username) === false) { 
    $url = "https://api.twitter.com/1/statuses/user_timeline.json?screen_name={$username}& 
    count={$how_many}"; 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    $contents = curl_exec($curl); 
    curl_close($curl); 
    if (! empty($contents)) { 
     // Decode it. 
     $tweet = json_decode($contents); 
     // Cache it for next time. 
     set_transient($id.'-'.$username, $tweet, 60*60*12); // 3 hour cache 
    } 
} 

顯然你可以減少緩存持續多久,如果你需要。

0

Twitter REST API的費率與您的狀態完全相同 - 對未經身份驗證的請求(通過IP地址)爲150,對於Oauth身份驗證請求則爲350。我過去所做的是查看您的查詢,並使用Search API - 進行更高效的通話。或者,從不同的虛擬IP地址執行更多的呼叫。

https://dev.twitter.com/docs/rate-limiting#rest 未經驗證的呼叫每小時允許150個請求。未經身份驗證的呼叫是根據發出請求的服務器或設備的公開IP來衡量的。 OAuth調用每小時允許350個請求,並根據請求中使用的oauth_token進行測量。

您無法獲得更多的白名單。這裏有一個link來支持它。

有關直接從twitter獲得PHP的示例,請嘗試here並查看PHP twitter庫。基本上,你必須通過建立一個Twitter應用程序,並接收Oauth密鑰來進行Oauth連接。