使用Twitter Fabric获取user_timeline时禁止403

Jen*_*dar 4 twitter android twitter-fabric

我一直在尝试实现Fabric来获取用户的5条最新推文列表.它工作了几个小时,然后停止工作.我想在没有用户登录的情况下这样做,并且据我所知,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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我没有得到403时,一切都很完美,我的列表就会被填充.

现在,我的代码完全有可能出现错误,让我将速率限制列入黑名单?除此以外; 我是否需要让用户登录才能向他们展示5条推文?或者我应该实现某种服务器端缓存?

感谢任何提示/帮助.

Mar*_*can 5

我想我可能已经想通了.看起来你必须在logInGuest回调中从success方法保存会话,然后将其传递给getApiClient.到目前为止,这里有一些代码对我有用:

private TweetViewFetchAdapter adapter;
...
adapter = new TweetViewFetchAdapter<CompactTweetView>(getActivity());
...
TwitterCore.getInstance().logInGuest( new Callback<AppSession>() {
    @Override
    public void success(Result<AppSession> appSessionResult) {
        AppSession session = appSessionResult.data;
        TwitterApiClient twitterApiClient =  TwitterCore.getInstance().getApiClient(session);
        twitterApiClient.getStatusesService().userTimeline(null, "RadioOkinawa864", 10, null, null, false, false, false, true, new Callback<List<Tweet>>() {
            @Override
            public void success(Result<List<Tweet>> listResult) {
                adapter.setTweets(listResult.data);
            }

            @Override
            public void failure(TwitterException e) {
                Toast.makeText(getActivity().getApplicationContext(), "Could not retrieve tweets", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        });
    }

    @Override
    public void failure(TwitterException e) {
        Toast.makeText(getActivity().getApplicationContext(), "Could not get guest Twitter session", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
});
Run Code Online (Sandbox Code Playgroud)