我正在寻找一种将状态更新发布到专用Twitter帐户的简单方法。
目前,我们正在使用https basic auth对https://api.twitter.com/1/statuses/update.xml发送POST请求。但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();
答案 0 :(得分:5)
我使用Twitter4J获得 更好的运气而不是使用Signpost。核心jar只有300k,它也是Google App Engine和Android(这实际上是我用过的地方)兼容的。它维护得很好;它几乎支持xAuth。还有一些好code examples on their website。
如果您想要查看真实代码here's the source,我为此实现了此目的。
答案 1 :(得分:1)
似乎对使用外部应用程序的所有专用Twitter帐户“简化”oauth的需求很高。发布到一个帐户。
对于使用路标的完整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()
我关闭了变量声明,因为我通过php使用路标(不要问),但所有的API调用都应该是正确的。
答案 2 :(得分:1)
这是我的代码。我在twitter上创建了一个应用程序(我只需要发布到我的推特帐户),并从“Twitter应用程序设置”和“我的推特访问令牌”屏幕中接收消费者密钥,消费者密钥,推特访问令牌和推特访问令牌秘密。在应用程序设置中,将默认访问类型设置为读取和写入。
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帐户,并且绕过了以编程方式访问密钥时需要的复杂程序步骤,这非常有用。