4

ユーザーから最新の 5 つのツイートのリストを取得するために Fabric を実装しようとしています。それは数時間うまく機能し、その後機能しなくなりました。ユーザーにログインさせずにこれを行いたいと思います.APIがゲストログインでツイートを読み取ることを許可していることがわかりますが、これはレート制限に大きな影響を与える可能性がありますか?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
    Fabric.with(this, new Twitter(authConfig), new Crashlytics());
    TwitterCore.getInstance().logInGuest(new Callback() {
        @Override
        public void success(Result result) {
            AppSession session = (AppSession) result.data;
            getTweets();
        }

        @Override
        public void failure(TwitterException exception) {
            // unable to get an AppSession with guest auth
        }
    });
}

    public void getTweets() {

    TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
    StatusesService statusesService = twitterApiClient.getStatusesService();


    statusesService.userTimeline([USERID], null, 5, null, null, null, true, null, false, new Callback<List<Tweet>>() {
        @Override
        public void success(Result <List<Tweet>> result) {

            for(Tweet Tweet : result.data) {
                tweetList.add(Tweet.text);
            }
            createListView();
        }
        public void failure(TwitterException exception) {
            Log.e("Failure", exception.toString());
            exception.printStackTrace();
        }
    });
}

403 を取得できない場合、すべてが完全に機能し、リストにデータが入力されます。

さて、私のコードに何か問題があり、レート制限がブラックリストに登録される可能性は十分にありますか? さもないと; 5 つのツイートを表示するためだけに、ユーザーにログインさせる必要がありますか? または、ある種のサーバーサイドキャッシュを実装する必要がありますか?

ヒント/ヘルプに感謝します。

4

3 に答える 3

3

を使用する場合logInGuest、ゲスト AppSession はしばらくすると期限切れになることに注意してください。アプリケーションは、期限切れの TwitterExceptions を処理し、別のゲスト AppSession を要求する必要があります。例えば、

TwitterApiClient twitterApiClient =  TwitterCore.getInstance().getApiClient(guestAppSession);
twitterApiClient.getSearchService().tweets("#fabric", null, null, null, null, 50, null, null, null, true, new Callback<Search>() {
    @Override
    public void success(Result<Search> result) {
        // use result tweets
    }

    @Override
    public void failure(TwitterException exception) {
        final TwitterApiException apiException = (TwitterApiException) exception;
        final int errorCode = apiException.getErrorCode();
        if (errorCode == TwitterApiConstants.Errors.APP_AUTH_ERROR_CODE || errorCode == TwitterApiConstants.Errors.GUEST_AUTH_ERROR_CODE) {
            // request new guest AppSession (i.e. logInGuest)
            // optionally retry
        }
    }
});

AppSessions は、ユーザー コンテキストを必要としない API 要求を行うためにのみ使用できることに注意してください。たとえば、 を使ってツイートすることはできませんAppSession。ユーザーの公開ツイートのタイムラインを取得できます。TwitterKit Android REST API ドキュメントを参照してください。

最後に、Twitter キット グループの TweetUi キットのTweetUtils.loadTweetまたはTweetUtils.loadTweetsヘルパーを使用している場合、ゲスト認証の設定と有効期限の処理は自動的に実行されるため、logInGuest を自分で呼び出す必要はありません。

于 2015-02-18T09:53:56.627 に答える
0

私の場合、APIは次のメッセージで403禁止を返しましたYour app may not allow guest auth. Please talk to us regarding upgrading your consumer key.

あなたが同じ状態にないことを確認してください。

于 2015-10-03T12:32:13.803 に答える