Самый простой способ опубликовать обновление статуса Twitter в выделенной учетной записи на Java - PullRequest
1 голос
/ 01 августа 2010

Я ищу очень простой способ публикации обновлений статуса в отдельной учетной записи Twitter.

В настоящее время мы используем запрос POST для https://api.twitter.com/1/statuses/update.xml с базовой аутентификацией https.Но Twitter собирается отключить этот API: http://apiwiki.twitter.com/Authentication

Этот материал действительно очень сложен и совсем не объяснен.

Я пытался использовать указатель, но, поиграв с ним в течение нескольких часов, получаю 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 ]

5 голосов
/ 23 августа 2010

У меня было много удачи с Twitter4J , чем с Signpost.Базовый jar всего 300k, и он также совместим с Google App Engine и Android (именно там я и использовал).Это в хорошем состоянии;с самого первого дня он поддерживал xAuth.И на их сайте есть несколько хороших примеров кода .

На всякий случай, если вы хотите увидеть реальный код, вот источник для приложения, для которого я реализовал это.

1 голос
/ 30 апреля 2011

Вот мой код. Я создал приложение в твиттере (мне нужно разместить только мою учетную запись в твиттере) и получил с экрана «Настройки приложения Твиттер» и «Мой токен доступа к твиттеру» ключ пользователя, секретный ключ пользователя, токен доступа к твиттеру и секретный токен доступа. В настройках приложения установите тип доступа по умолчанию для чтения и записи.

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();
        }
}

Это прекрасно работает, если вы хотите опубликовать в своей учетной записи в Твиттере, и обходит сложные программные шаги, которые вы бы в противном случае потребовали бы, если бы вы обращались к клавишам программным путем.

1 голос
/ 05 августа 2010

Похоже, что будет большой спрос на "упрощение" oauth для всех выделенных учетных записей Twitter, которые используют внешнее приложение.отправлять сообщения в одну учетную запись.

Для полного цикла oauth с использованием указателей вам нужно будет сделать три запроса в первый раз, после чего вам нужно будет только сделать последний запрос на использование вашего токена доступа.

Извлечение некоторых вещей из тестового приложения.Я написал, ваш "быстрый и грязный" код 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()

Я оставил объявления переменных отключенными, потому что я использовал signpost через php (не спрашивайте), но всевызовы API должны быть правильными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...