7

ユーザーが自分の Twitter アカウントにログインし、Twitter4j を使用してこのチュートリアルに従ってツイートを送信できるようにするコードをいくつか書きました。

これで、公開アカウントのツイートも取得できます

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setHttpConnectionTimeout(10000)
.setHttpReadTimeout(10000)
.setOAuthConsumerKey(Config.TWITTER_CONSUMER_KEY)
.setOAuthConsumerSecret(Config.TWITTER_CONSUMER_SECRET)
.setOAuthAccessToken(Utils.getPrefsString(getActivity(),
    TwitterPrefsFragment.PREF_KEY_OAUTH_TOKEN, "")) // empty if not authentified
.setOAuthAccessTokenSecret(Utils.getPrefsString(getActivity(),
    TwitterPrefsFragment.PREF_KEY_OAUTH_SECRET, "")); // empty if not authentified
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();

List<twitter4j.Status> statuses = twitter.getUserTimeline(SOME_PUBLIC_TWITTER_ACCOUNT, new Paging(1, 50));

ただし、これはユーザーが認証され、アプリの設定に oauth トークンとシークレットがある場合にのみ機能します。

アクセス トークンなしで、つまりユーザー認証なしで Twitter の公開タイムラインを取得するにはどうすればよいですか?

編集

より明確にするために、質問を再構成しています。

ここに記載されているコードを使用して、Twitter アプリとユーザーを認証することができました。

ユーザーがログインしていない場合、公開タイムラインを取得するにはどうすればよいですか? その場合、 and はなくOAUTH_TOKEN、空文字列がandOAUTH_SECRETに設定されているため、上記の要求は機能しません。ConfigurationBuilder.setOAuthAccessTokenConfigurationBuilder.setOAuthAccessTokenSecret

では、パブリック タイムラインを取得する要求が存在する場合、noOAUTH_TOKENとを使用したものは何OAUTH_SECRETでしょうか?

4

4 に答える 4

8

あなたの場合、Application-only authenticationを使用する必要があります。

Twitter4J でこれを行うには、次のコードを試してください。

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb
    .setOAuthConsumerKey(<YOUR_CONSUMER_KEY>)
    .setOAuthConsumerSecret(<YOUR_CONSUMER_SECRET>)
    .setApplicationOnlyAuthEnabled(true); // IMPORTANT: set T4J to use App-only auth
    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();

    OAuth2Token token = twitter.getOAuth2Token();
    if (token != null) {
        System.out.println("Token Type  : " + token.getTokenType());
        System.out.println("Access Token: " + token.getAccessToken());
    }
    ResponseList<Status> list = twitter.getUserTimeline(783214); // Load @twitter's timeline without user login.

上記のサンプル コードの要点:

  • setApplicationOnlyAuthEnabled(true)アプリケーションのみの認証を有効にするために呼び出します。
  • getOAuth2Token()代わりに使用してアクセストークンを取得しますgetOAuthAccessToken()
于 2013-09-12T06:00:59.240 に答える
7

これは確かに可能であり、私はすでにそれを試しました。アクセス トークンとアクセス トークン シークレットが空であることだけが疑わしい場合は、アプリ ページで提供されているアクセス トークンを使用してみてください。アプリページとは、Twitter アプリを登録したリンクのことです。

dev.twitter.com にアクセスしてアプリの設定に移動すると、コンシューマ キー、コンシューマ シークレット、アクセス トークン、およびアクセス トークン シークレットが表示されます。これらを利用して、以下のコードに従ってください。動作するはずです。

ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey("B*************Q")
                .setOAuthConsumerSecret(
                        "l*************o")
                .setOAuthAccessToken(
                        "1*************s")
                .setOAuthAccessTokenSecret(
                        "s*************s");
        TwitterFactory tf = new TwitterFactory(cb.build());
        twitter = tf.getInstance();
        try {
            List<Status> statuses;
            String user;
            user = "Replace this with the screen name whose feeds you want to fetch";
            statuses = twitter.getUserTimeline(user);
            Log.i("Status Count", statuses.size() + " Feeds");

        } catch (TwitterException te) {
            te.printStackTrace();
        }

これにはtwitter 4j 3.03.jarを使用しました。

于 2013-09-16T12:44:40.727 に答える
2

Twitter4j を使用して、アクセス トークンとシークレットのない Twitter パブリック タイムラインを取得するにはどうすればよいですか?

ああ、それはとても簡単です。あなたはできません

Twitter aa データベースの会社。会社の資産 (会社が所有するもの) の 99% はデータです。このデータを他の人や企業に無料で提供するのは非生産的です。

あなたが望むことが可能であれば、Twitterデータベース全体をバックアップする簡単な方法があります.

そのため、API を使用したいアプリケーションごとにアカウントを登録し、各アカウントを時間枠ごとに特定の量の API 呼び出しに制限することができます。もちろん、ネットワークをスパムなどから守りたいとも考えています。

于 2013-09-11T07:36:28.003 に答える