2010-08-08 73 views
8

我正在使用java Twitter應用程序(使用Twitter4J api)。我已經創建了應用程序,並可以查看當前用戶的時間軸,用戶的配置文件等。超出限制速度 - 自定義Twitter應用程序

但是,使用應用程序時,它似乎很快超過了150個請求在Twitter客戶端設置一個小時的速率限制(我知道開發人員可以在給定賬戶上將這個數字增加到350,但這對其他用戶無法解決)。

這當然不會影響所有的客戶,關於如何解決這個問題的任何想法?

有誰知道什麼算作請求?例如,當我查看用戶的配置文件時,我加載用戶對象(twitter4j),然後獲取屏幕名稱,用戶名,用戶描述,用戶狀態等放入JSON對象 - 這是一個單一的調用來獲取對象或者它會包含所有的user.get ...調用?

在此先感謝

回答

4

你真的需要保持跟蹤你的當前請求數就是與Twitter打交道時。

但是,twitter似乎沒有刪除304 Not Modified的計數(至少它沒有最後一次處理它),所以請確保沒有任何東西會破壞您正常使用HTTP緩存的情況,而且你每小時的實際要求也會提高。

請注意,twitter在Apache上的mod_gzip中存在一個錯誤,其中電子標籤在更改時發生錯誤,以反映內容編碼與非gzip的實體不同(這是正確的事情這樣做,實施中只是一個錯誤)。因此,接受來自twitter的gzip內容意味着它永遠不會發送304,這會增加您的請求數量,並且在很多情況下會破壞使用gzip的效率收益。因此,如果您接受gzip(您的網絡庫可能會默認這樣做,請參閱使用像Fiddler這樣的工具可以看到的內容,我是一個只具有一點Java知識的.NET人員,回答關於Twitter如何處理HTTP的級別,所以我不知道Java Web庫的細節),嘗試關閉它,看看它是否改善了事情。

+0

感謝您的建議 - 我將調查HTTP緩存並確保我正確緩存了調用。 我已經成功地確定了問題的一大部分是當我製作JSON對象列表(例如,最近的時間軸)時,我正在獲取可能需要的所有數據(例如,對於每個更新時間線我是提取所有的用戶信息,如名稱/描述/號碼追隨者等)。我改變了它,因此它只提取列表的基本數據,然後在需要時「懶洋洋地」提取更多數據。 再次感謝! – rhinds 2010-08-08 18:05:05

+0

FWIW,我報告了304與gzip之間的交互與twitter的錯誤。由於這是一個Apache的bug,它可能不會被固定在他們的級別。當我在twitter上發現這個問題時,apache bug已經在apache上知道了。 – 2010-08-08 18:11:38

1

幾乎從Twitter的服務器讀取任何類型的數據(即任何調用HTTP GET的數據)都被視爲請求。獲取用戶時間表,轉發,直接消息,獲取用戶數據均爲1次請求。從服務器讀取的唯一一個Twitter API調用,不計入您的API限制,就是查看速率限制狀態。