1


1

Javaの専用アカウントにTwitterステータスの更新を投稿する最も簡単な方法

専用のTwitterアカウントにステータスの更新を投稿する非常に簡単な方法を探しています。

現在、https基本認証を使用してhttps://api.twitter.com/1/statuses/update.xmlへのPOSTリクエストを使用しています。 しかし、TwitterはこのAPIを無効にします:http://apiwiki.twitter.com/Authentication

このoauthの内容は本当に複雑で、まったく説明されていません。

私は道標を使用しようとしましたが、それで何時間も遊んだ後、私が得るすべては401です。

OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret, SignatureMethod.HMAC_SHA1);
consumer.setTokenWithSecret(accessToken, tokenSecret);

URL url = new URL("https://api.twitter.com/1/statuses/update.xml");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// Setup the header for the request
connection.setRequestMethod("POST");
connection.setRequestProperty("User-Agent", "Status Updater");

consumer.sign(connection);

// write the message
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
os.write(("status=" + message.substring(0, Math.min(message.length(), 139))).getBytes("UTF-8"));
os.close();

// send the request
connection.getInputStream().close();

3 Answer


5


Signpostよりもhttp://twitter4j.org/en/index.html[Twitter4J]のほうが幸運でした。 コアjarはわずか300kで、Google App EngineとAndroid(これは実際に使用した場所です)との互換性もあります。 よく管理されています。ほぼ初日からxAuthをサポートしていました。 そして、いくつかの良いhttp://twitter4j.org/en/code-examples.html [彼らのウェブサイトのコード例]があります。

実際のコードを見たい場合に備えて、https://code.discordians.net/projects/remembeer/repository/revisions/master/entry/android/src/com/wanghaus/remembeer/helper/TwitterHelper.java [here’s theソース]私がこれを実装したアプリの。


1


外部アプリを使用するすべての専用ツイッターアカウントに対して、「単純化」されたoauthに対する高い需要があるようです。 単一のアカウントに投稿する。

道標を使用した完全なoauthサイクルでは、最初に3つの要求を行う必要があります。その後、アクセストークンを使用する最後の要求のみを行う必要があります。

テストアプリからいくつかのものを引き出します。 私が書いた、あなたの「迅速で汚い」oauthコードはこのように見えるはずです…​

import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL

import oauth.signpost.OAuth
import oauth.signpost.OAuthConsumer
import oauth.signpost.OAuthProvider
import oauth.signpost.basic.DefaultOAuthConsumer
import oauth.signpost.basic.DefaultOAuthProvider

api_url = "http://twitter.com/statuses/user_timeline.xml"
callback_url = "OOB"
provider = new DefaultOAuthConsumer(key, secret);
consumer = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                         "http://twitter.com/oauth/access_token",
                         "http://twitter.com/oauth/authorize");

auth_url = provider.retrieveRequestToken(consumer, callback_url);

# Visit the auth_url and authorize that token manually

# oauth_verifier should be the digits returned by twitter for OOB authorization

provider.retrieveAccessToken(consumer, oauth_verifier);

access_token = consumer.getToken()
access_secret = consumer.getTokenSecrect()

# Finally, make your request...

url = new URL(api_url)

connection  = url.openConnection()

consumer.sign(connection)
connection.connect()

# In case you wanted to get the data/response.
response = connection.getResponseMessage()

reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))

line = ''
results = ''

while ((line = reader.readLine()) != NULL) {
      results += line;
    }
reader.close()

phpを介して道標を使用しているため(質問しないで)、変数宣言をオフにしましたが、すべてのAPI呼び出しは正しいはずです。


1


これが私のコードです。 ツイッターでアプリケーションを作成し(ツイッターアカウントにのみ投稿する必要があります)、「ツイッターアプリケーション設定」画面と「ツイッターアクセストークン」画面からコンシューマーキー、コンシューマーシークレット、ツイッターアクセストークン、ツイッターアクセストークンシークレットを受け取りました。 アプリケーション設定で、デフォルトのアクセスタイプを読み取りおよび書き込みに設定します。

public void postToTwitter(String message) {
        try {
            ConfigurationBuilder confbuilder  = new ConfigurationBuilder();
            confbuilder.setOAuthAccessToken(TWITTER_ACCESS_TOKEN_HERE)
            .setOAuthAccessTokenSecret(TWITTER_ACCESS_TOKEN_SECRET_HERE)
            .setOAuthConsumerKey(TWITTER_CONSUMER_KEY_HERE)
            .setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_HERE);
            Twitter twitter = new TwitterFactory(confbuilder.build()).getInstance();

            Status status = twitter.updateStatus(message);
            System.out.println("Successfully updated the status to [" + status.getText() + "].");

        } catch (Exception e) {
            e.printStackTrace();
        }
}

これは、自分のtwitterアカウントに投稿したい場合に最適であり、プログラムでキーにアクセスする場合に必要な複雑なプログラム手順をバイパスします。