用Java将Twitter状态更新发布到专用帐户的最简单方法
我正在寻找一个非常简单的方式来发布状态更新到一个专用的Twitter帐户 目前,我们正在使用POST请求来验证https基本身份验证。但Twitter将禁用此API: 这个oauth的东西真的,真的很复杂,根本没有解释清楚 我试着使用路标,但在玩了几个小时后,我得到的只是一个401用Java将Twitter状态更新发布到专用帐户的最简单方法,java,twitter,oauth,Java,Twitter,Oauth,我正在寻找一个非常简单的方式来发布状态更新到一个专用的Twitter帐户 目前,我们正在使用POST请求来验证https基本身份验证。但Twitter将禁用此API: 这个oauth的东西真的,真的很复杂,根本没有解释清楚 我试着使用路标,但在玩了几个小时后,我得到的只是一个401 OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret, SignatureMethod.HMAC_SHA1); c
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();
对于所有使用外部应用程序的专用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调用都应该是正确的。对于所有使用外部应用的专用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使用signpost的(不要问),但是所有API调用都应该是正确的。使用signpost比使用signpost幸运得多。核心jar只有300k,而且它与googleappengine和Android(实际上我就是在这里使用的)兼容。保养得很好,;它从一开始就支持xAuth。还有一些好处
以防你想看到我为之实现的应用程序的真实代码。我的运气比路标好得多。核心jar只有300k,而且它与googleappengine和Android(实际上我就是在这里使用的)兼容。保养得很好,;它从一开始就支持xAuth。还有一些好处
以防您想看到我为其实现的应用程序的真实代码。这是我的代码。我在twitter中创建了一个应用程序(我只需要发布到我的twitter帐户),并从“twitter应用程序设置”和“我的twitter访问令牌”屏幕收到了消费者密钥、消费者机密、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帐户,这非常有用,并且如果您要以编程方式访问密钥,则可以绕过复杂的编程步骤。以下是我的代码。我在twitter中创建了一个应用程序(我只需要发布到我的twitter帐户),并从“twitter应用程序设置”和“我的twitter访问令牌”屏幕收到了消费者密钥、消费者机密、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帐户,并且绕过以编程方式访问密钥所需的复杂编程步骤,这将非常有用。这与Java相关,但重点是Java。这与Java相关,但重点是Java。另外,还有一点需要注意的是,一旦您获得访问令牌/密码,您需要保存这些内容,并在下次发出请求时使用这些内容创建一个新的使用者(无需再次获得请求/授权访问令牌)。此外,还有一点需要注意的是,一旦获得访问令牌/密码,您需要保存这些内容,并在下次发出请求时使用这些内容创建一个新的使用者(无需再次获得请求/授权访问令牌)。