0

そのため、Android Studio の Twitter4J ライブラリを使用して、公開 Twitter タイムライン (自分の Twitter タイムラインや管理者アクセス権を持つものではなく、ローカル組織の公開タイムライン) からステータス オブジェクトのリストを取得しようとしていますが、私はドキュメントに少し混乱しています。「アクセス トークンの形式が無効です」というエラーが表示されます。

私は Twitter で開発者アカウントを作成し、コンシューマ キーとトークン、およびアクセス トークンと秘密の番号を取得しました。これらの値は、現時点では一連のプライベートな静的文字列に保存されます。TWITTER_ZOO_ID は、表示したいフィードの Twitter ID 番号を含むプライベート long です。私が現在持っている該当するコードは次のとおりです。

    Twitter twitter;
    List<Status> statuses = null;
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
            .setOAuthConsumerKey( TWITTER_CONSUMER_KEY )
            .setOAuthConsumerSecret( TWITTER_CONSUMER_SECRET )
            .setOAuthAccessToken( TWITTER_AUTH_TOKEN )
            .setOAuthAccessTokenSecret( TWITTER_AUTH_TOKEN_SECRET );
    try {
        TwitterFactory tf = new TwitterFactory(cb.build());
        twitter = tf.getInstance();
        twitter.setOAuthConsumer( TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET );
        statuses = twitter.getUserTimeline( TWITTER_ZOO_ID );
    }
    catch( TwitterException e ) {
        Log.e( "TwitterListFragment", "Twitter Exception" );
        return;
    }

    for( Status status : statuses )
        mAdapter.add( status );

誰かが Twitter4J を使用した Twitter 1.1 の良い例へのリンクを持っているか、それらのステータスを取得する方法の例を提供できる場合は、本当に感謝しています。私は現在 Android Studio を使用しており、MavenCentral の Gradle に Twitter4J を含めています。

ありがとうございました!

編集:

さらに読んで、この追加コードを追加しましたが成功しませんでした:

twitter.setOAuthConsumer( TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET );
AccessToken token = new AccessToken( TWITTER_AUTH_TOKEN, TWITTER_AUTH_TOKEN_SECRET );
twitter.setOAuthAccessToken( token );
4

2 に答える 2

1

公開されている Twitter タイムラインから情報を取得したい場合は、ユーザーがログインする必要がないため、アプリケーションのみの認証を使用できます。管理者権限を使用しないため、これが適していると思います。

アプリケーションのみの認証フローは次の手順に従います。

アプリケーションは、そのコンシューマー キーとシークレットを、特別にエンコードされた一連の資格情報にエンコードします。

アプリケーションは、POST oauth2/token エンドポイントに要求を行い、これらの資格情報をベアラー トークンと交換します。

REST API にアクセスするとき、アプリケーションはベアラー トークンを使用して認証します。

twitter4j は最近この機能を追加したため、最新のスナップショット ライブラリを使用する必要があります。

それを使用した例:

private ConfigurationBuilder    builder;
private Twitter                 twitter;
private TwitterFactory          factory;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.init_act_layout);

    // setup
    builder = new ConfigurationBuilder();
    builder.setUseSSL(true);
    builder.setApplicationOnlyAuthEnabled(true);
    builder.setOAuthConsumerKey(Constants.CONSUMER_KEY);
    builder.setOAuthConsumerSecret(Constants.CONSUMER_SECRET);

    Configuration configuration = builder.build();
    factory = new TwitterFactory(configuration);
    ((MyApp) (MyApp.getApp())).setTFactory(factory);

    if (isNeededTwitterAuth()) {
        twitter = factory.getInstance();
            //Get the token async and save it
    }

        //Search tweets

}

/*
 * Checks if twitter access token is already saved in preferences
 * 
 * @return true if auth needed
 */
private boolean isNeededTwitterAuth() {
    SharedPreferences settings = getSharedPreferences(Constants.TWITTER_PREFERENCES, Context.MODE_PRIVATE);
    String twitterAccesToken = settings.getString("bearerAccessToken", "");
    String twitterTokenType = settings.getString("bearerTokenType", "");
    return ((twitterAccesToken.length() == 0) && (twitterTokenType.length() == 0));
}

}

ベアラー トークンを取得するには、AsyncTask を使用して、ネットワーク例外を回避するためにメイン UI スレッドから実行します。

@Override
    protected OAuth2Token doInBackground(Void... params) {
        OAuth2Token bearerToken = null;

        try {
            bearerToken = twitter.getOAuth2Token();
        } catch (TwitterException e) {
            e.printStackTrace();
        }
        return bearerToken;
    }

ベアラー トークンを取得したら、保存します。

SharedPreferences appSettings = getSharedPreferences(Constants.TWITTER_PREFERENCES, MODE_PRIVATE);
            SharedPreferences.Editor prefEditor = appSettings.edit();
            prefEditor.putString("bearerAccessToken", result.getAccessToken());
            prefEditor.putString("bearerTokenType", result.getTokenType());
            prefEditor.commit();

ベアラー トークンを使用するには:

OAuth2Token bearerToken = new OAuth2Token(bearerTokenType, bearerAccesstoken);

        twitter.setOAuth2Token(bearerToken);

ツイートを検索します (常にメイン スレッドから):

@Override
 protected QueryResult doInBackground(Void... params) {

 twitter.setOAuth2Token(bearerToken);
 Query query = new Query();
 [...]
 result = twitter.search(query);

ブログの完全な説明(スペイン語で...)

twitter4j githubの完全な例

それが役に立てば幸い!

于 2013-09-17T11:08:18.540 に答える
0

最近更新された Twitter SDK (Fabric) を使用することをお勧めします。

https://docs.fabric.io/android/twitter/twitter.html

于 2016-01-10T19:37:20.947 に答える