2017-07-25 78 views
1

我正在使用Twitter4J(twitter4j-core:4.0.6)在Java 8中構建一個應用程序來抓取友誼和關注者。我將用數據填充一個圖形結構,並且我期望能夠很快達到速率限制,所以我正在嘗試構建應用程序,使得只有耗盡的端點才能進入睡眠狀態。如何識別Twitter4j RateLimitStatusEvent包含限制的端點

要確保我有剩餘的呼叫正確的號碼,如其他應用,線程或實例也耗盡請求的同一個池,我試圖用RateLimitStatusListener接口有onRateLimitStatus(RateLimitStatusEvent event)onRateLimitReached(RateLimitStatusEvent event)控制睡眠的標誌循環。

然而,問題是,我似乎無法找到任何地方訪問RateLimitStatusEvent對應的端點,即「/ friends/id」,「/ followers/id」或「/ users/lookup」 。

我已經考慮過查找速率限制並保留一個本地計數,但是如果有多個實例,同時訪問這些信息的其他應用等,速率限制將在本地計數之前達到意識到。我可能會在完成時發佈應用程序,然後我可能會有多個同時使用的用戶。

有沒有人知道用Twitter4J做這件事的好方法,還是我必須推出自己的?

+1

你見過這個答案嗎?這可能是一個很好的起點我猜https://stackoverflow.com/a/45199642/2183174 – kadir

+1

@kadir你是絕對正確的!這是一個很好的起點!我不知道結果包含對TwitterResult接口的實現的引用,該接口包含該特定請求的返回速率限制。我將重新設計邏輯,看看我是否能以令人滿意的方式工作。 – Canis

回答

2

@kadir評論中未提及的另一種可能性是在Twitter實例上使用Map<String, RateLimitStatus> getRateLimitStatus(String... resources) throws TwitterException

該方法將對application/rate_limit_status端點執行REST調用,並返回給定resource familiy的當前速率限制狀態。這個終點的文檔可以在here找到。

在你的情況,你可以使用這個端點索要資源家庭friendsusersfollowers並能獲得與此相關的家庭所有端點的速率限制狀態。

但是,過於頻繁地調用此端點也可能導致速率限制。

+0

也是一個很好的建議,但就我的使用情況而言,正如我在問題中所解釋的那樣,調用該端點並將其存儲在本地(我必須採取的措施以避免限速)不會以很好的方式擴展到併發用戶。最好的方法是在委託方法'onRateLimitStatus()'的參數中獲取信息,但是@ kadir指出我有可能通過重新設計控制流和邏輯來給出與委託方法。 – Canis