Получить список твитов данного пользователя, используя Twitter API 1.1 и Retrofit

Я пытаюсь получить список твитов пользователя, и у меня возникли проблемы при аутентификации моего вызова API. В настоящее время я получаю 401 при выполнении кода ниже:

    public interface TwitterApi {

    String API_URL = "https://api.twitter.com/1.1";

    String CONSUMER_KEY = "<CONSUMER KEY GOES HERE>";
    String CONSUMER_SECRET = "<CONSUMER SECRET GOES HERE>";
    String ACCESS_TOKEN = "<ACCESS TOKEN GOES HERE>";
    String ACCESS_TOKEN_SECRET = "<ACCESS TOKEN SECRET GOES HERE>";

      @GET("/statuses/user_timeline.json")
      List<Tweet> fetchUserTimeline(
            @Query("count") final int count,
            @Query("screen_name") final String screenName);
      }

Следующее выдает ошибку авторизации 401 при вызове fetchUserTimeline()

RetrofitHttpOAuthConsumer consumer = new RetrofitHttpOAuthConsumer(TwitterApi.CONSUMER_KEY, TwitterApi.CONSUMER_SECRET);
        consumer.setTokenWithSecret(TwitterApi.ACCESS_TOKEN, TwitterApi.ACCESS_TOKEN_SECRET);
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(TwitterApi.API_URL)
                .setClient(new SigningOkClient(consumer))
                .build();


        TwitterApi twitterApi = restAdapter.create(TwitterApi.class)

        tweets = twitterApi.fetchUserTimeline(2, screenName);

Я также включил соответствующий код из плагина signpost-retrofit:

public class SigningOkClient extends OkClient {

    private final RetrofitHttpOAuthConsumer mOAuthConsumer;

    public SigningOkClient(RetrofitHttpOAuthConsumer consumer) {
        mOAuthConsumer = consumer;
    }

    public SigningOkClient(OkHttpClient client, RetrofitHttpOAuthConsumer consumer) {
        super(client);
        mOAuthConsumer = consumer;
    }

    @Override
    public Response execute(Request request) throws IOException {
        Request requestToSend = request;
        try {
            HttpRequestAdapter signedAdapter = (HttpRequestAdapter) mOAuthConsumer.sign(request);
            requestToSend = (Request) signedAdapter.unwrap();
        } catch (OAuthMessageSignerException | OAuthExpectationFailedException | OAuthCommunicationException e) {
            // Fail to sign, ignore
            e.printStackTrace();
        }
        return super.execute(requestToSend);
    }

}

Плагин Signpost-Retrofit можно найти здесь: https://github.com/pakerfeldt/signpost-retrofit

public class RetrofitHttpOAuthConsumer extends AbstractOAuthConsumer {

  private static final long serialVersionUID = 1L;

  public RetrofitHttpOAuthConsumer(String consumerKey, String consumerSecret) {
    super(consumerKey, consumerSecret);
  }

  @Override
  protected HttpRequest wrap(Object request) {
      if (!(request instanceof retrofit.client.Request)) {
        throw new IllegalArgumentException("This consumer expects requests of type " + retrofit.client.Request.class.getCanonicalName());
      }
      return new HttpRequestAdapter((Request) request);
  }
}

Любая помощь здесь будет отличной. Решение не должно включать использование указателя, но я хочу использовать Retrofit. Я также не хочу показывать пользователю экран "Аутентификация с помощью Twitter" в WebView - я просто хочу отобразить несколько соответствующих твитов как часть подробного представления.

1 ответ

Вы уверены, что проект signpost-retrofit работает для твиттера? В прошлом я успешно использовал twitter4j - и если вам не нужна полная библиотека, вы можете использовать их код для справки. twitter4j

Другие вопросы по тегам