2017-07-25 4 views
1

Twitter4J(twitter4j-core:4.0.6)を使用して友人やフォロワーをクロールするアプリケーションをJava 8で構築しています。私はグラフの構造にデータを取り込みますが、レート制限をかなり速く打つことを期待していますので、使い終わったエンドポイントだけがスリープ状態になるような方法でアプリケーションを構築しようとしています。 Twitter4j RateLimitStatusEventにどのエンドポイントを指定するか

は、私は他のアプリ、スレッドやインスタンスはまた、要求の同じプールを使い果たして、私はスリープフラグを onRateLimitStatus(RateLimitStatusEvent event)を持っていると onRateLimitReached(RateLimitStatusEvent event)制御するRateLimitStatusListenerインターフェイスを使用しようとしています、残りのコールの正確な数があることを確認してくださいするにはループ。

ただし、「/ friends/ids」、「/ followers/ids」、「/ users/lookup」など、どのエンドポイントにアクセスするのかわからないというのは、RateLimitStatusEventが。

私はレート制限を調べてローカルカウントを保持することを検討しましたが、複数のインスタンス、同時に情報にアクセスする他のアプリケーションなどがある場合、レート制限はローカルカウントが達成される前に達します注意してください。私が完成したらアプリケーションを公開するかもしれませんし、同時に複数のユーザーがいるかもしれません。

誰かが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

関連する問題