带Netbeans的twitter4j
第一次贴海报,但我真的被卡住了。 我正在做一个小项目,我正试图用一个netbeans项目发送一条tweet。我使用的是twitter4j,最近情况似乎已经发生了变化,您必须使用其OAuth功能。我已经在twitter上创建了一个应用程序,并尝试了一些代码,但我一直收到以下错误:线程“main”连接中的异常超时相关讨论可以在Internet上的以下位置进行:带Netbeans的twitter4j,netbeans,twitter4j,Netbeans,Twitter4j,第一次贴海报,但我真的被卡住了。 我正在做一个小项目,我正试图用一个netbeans项目发送一条tweet。我使用的是twitter4j,最近情况似乎已经发生了变化,您必须使用其OAuth功能。我已经在twitter上创建了一个应用程序,并尝试了一些代码,但我一直收到以下错误:线程“main”连接中的异常超时相关讨论可以在Internet上的以下位置进行: http://www.google.co.jp/search?q=b2b52c28 or http://www.google.co.jp/s
http://www.google.co.jp/search?q=b2b52c28 or
http://www.google.co.jp/search?q=1b442895
TwitterException{exceptionCode=[b2b52c28-1b442895 b2b52c28-1b44286b], statusCode=-1, retryAfter=-1, rateLimitStatus=null, featureSpecificRateLimitStatus=null, version=2.2.5}
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:200)
at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102)
at twitter4j.TwitterImpl.post(TwitterImpl.java:1929)
at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:433)
at login.Login.start(Login.java:36)
at login.Login.main(Login.java:63)
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:483)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:213)
at sun.net.www.http.HttpClient.New(HttpClient.java:300)
at sun.net.www.http.HttpClient.New(HttpClient.java:316)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:992)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:928)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:846)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087)
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:158)
... 6 more
Java Result: 1
你的代码看起来不错。您是否确认您的应用程序使用了正确的消费者密钥和密码?请尝试
twitter.verifyCredentials()
,查看是否出现相同的错误或更具体的错误
如果您正在通过代理更正网络,则需要包括代理设置以允许连接成功,详细信息可在此处找到
另一方面,你可能想从你的帖子中删除你的访问令牌和密码,如果它们仍然有效,那么有人可以用它们登录到你的帐户。你的代码看起来没问题。您是否确认您的应用程序使用了正确的消费者密钥和密码?请尝试
twitter.verifyCredentials()
,查看是否出现相同的错误或更具体的错误
如果您正在通过代理更正网络,则需要包括代理设置以允许连接成功,详细信息可在此处找到
顺便说一句,你可能想从你的帖子中删除你的访问令牌和密码,如果它们仍然有效,那么有人可以用它们登录你的帐户。我可以建议一种替代方法吗 我最近一直在摆弄twitter4j,我的处理方式略有不同——我找到了一种使用ConfigurationBuilder对象对客户端进行身份验证的简便方法,并将其传递给获取所需Twitter对象实例的工厂
package main;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.ConfigurationBuilder;
public class Base {
protected Twitter twitter;
//protected TwitterStream twitterStream;
private ConfigurationBuilder configBuilder;
public Base(){
configBuilder = new ConfigurationBuilder();
configBuilder.setDebugEnabled(true);
configBuilder.setOAuthConsumerKey("[consumer key here]");
configBuilder.setOAuthConsumerSecret("[consumer secret key here]");
configBuilder.setOAuthAccessToken("[OAuthAccessToken here]");
configBuilder.setOAuthAccessTokenSecret("[secret OAuthAccessToken here]");
//use the ConfigBuilder.build() method and pass the result to the TwitterFactory
TwitterFactory tf = new TwitterFactory(configBuilder.build());
//you can now get authenticated instance of Twitter object.
twitter = tf.getInstance();
}
}
然后,您可以使用实现所需功能的子类来扩展此类,或者在代码的其他地方创建ConfigurationBuilder/TwitterFactory/Twitter对象
下面我实现了一个类,该类创建status,并可以返回status对象,该对象包含其他信息,如createdAt()和ID等
package main;
import twitter4j.Status;
import twitter4j.TwitterException;
public class StatusUpdater extends Base{
public StatusUpdater(){}
public Status updateStatus(String statusToUpdate) throws TwitterException{
Status status = twitter.updateStatus(statusToUpdate);
System.out.println("statusToUpdate: " + status + ".");
return status;
}
}
然后可以使用以下语句创建状态。这可以通过mbean/ejb/servlet等实现
try {
StatusUpdater statusUpdater = new StatusUpdater();
String statusTextToSet = "test status";
Status updatedStatus = statusUpdater.updateStatus(statusTextToSet);
System.out.println("Created at: " + updatedStatus.getCreatedAt());
} catch (TwitterException tex) {
System.out.println(tex.getErrorMessage());
}
关于配置过程的更多信息,我可以建议一个替代路线吗 我最近一直在摆弄twitter4j,我的处理方式略有不同——我找到了一种使用ConfigurationBuilder对象对客户端进行身份验证的简便方法,并将其传递给获取所需Twitter对象实例的工厂
package main;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.ConfigurationBuilder;
public class Base {
protected Twitter twitter;
//protected TwitterStream twitterStream;
private ConfigurationBuilder configBuilder;
public Base(){
configBuilder = new ConfigurationBuilder();
configBuilder.setDebugEnabled(true);
configBuilder.setOAuthConsumerKey("[consumer key here]");
configBuilder.setOAuthConsumerSecret("[consumer secret key here]");
configBuilder.setOAuthAccessToken("[OAuthAccessToken here]");
configBuilder.setOAuthAccessTokenSecret("[secret OAuthAccessToken here]");
//use the ConfigBuilder.build() method and pass the result to the TwitterFactory
TwitterFactory tf = new TwitterFactory(configBuilder.build());
//you can now get authenticated instance of Twitter object.
twitter = tf.getInstance();
}
}
然后,您可以使用实现所需功能的子类来扩展此类,或者在代码的其他地方创建ConfigurationBuilder/TwitterFactory/Twitter对象
下面我实现了一个类,该类创建status,并可以返回status对象,该对象包含其他信息,如createdAt()和ID等
package main;
import twitter4j.Status;
import twitter4j.TwitterException;
public class StatusUpdater extends Base{
public StatusUpdater(){}
public Status updateStatus(String statusToUpdate) throws TwitterException{
Status status = twitter.updateStatus(statusToUpdate);
System.out.println("statusToUpdate: " + status + ".");
return status;
}
}
然后可以使用以下语句创建状态。这可以通过mbean/ejb/servlet等实现
try {
StatusUpdater statusUpdater = new StatusUpdater();
String statusTextToSet = "test status";
Status updatedStatus = statusUpdater.updateStatus(statusTextToSet);
System.out.println("Created at: " + updatedStatus.getCreatedAt());
} catch (TwitterException tex) {
System.out.println(tex.getErrorMessage());
}
有关配置过程的更多信息是否需要使用代理服务器?我是个新手,所以我不知道所有的细节,我看过的教程都没有提到。我认为最新的twitter4j中不再存在verifyCredentials(访问令牌和密码也不再有效,不用担心),只有通过代理服务器连接到internet时才需要它,如果不需要,就不需要它们。您是否尝试过将OAuth示例与源代码打包并运行?我使用的是最新版本-2.2.5,verifyCredentials()肯定仍然存在。没错,verifyCredentials()仍然存在。你建议用我的代码的哪一部分来替换它?好的,我知道得到这个错误:线程“main”java.lang.IllegalArgumentException中的异常:无效的访问令牌格式。在twitter4j.auth.AccessToken.(AccessToken.java:50)在login.login.start(login.java:25)在login.login.main(login.java:58)java结果:1但是,访问令牌是直接从twitter网站获取的…这与您在上面代码中包含的令牌不同?是否需要使用代理服务器?我是个新手,所以我不知道所有的细节,我看过的教程都没有提到。我认为最新的twitter4j中不再存在verifyCredentials(访问令牌和密码也不再有效,不用担心),只有通过代理服务器连接到internet时才需要它,如果不需要,就不需要它们。您是否尝试过将OAuth示例与源代码打包并运行?我使用的是最新版本-2.2.5,verifyCredentials()肯定仍然存在。没错,verifyCredentials()仍然存在。你建议用我的代码的哪一部分来替换它?好的,我知道得到这个错误:线程“main”java.lang.IllegalArgumentException中的异常:无效的访问令牌格式。在twitter4j.auth.AccessToken.(AccessToken.java:50)在login.login.start(login.java:25)在login.login.main(login.java:58)java结果:1但是,访问令牌是直接从twitter网站获取的…这是一个不同于您在上面代码中包含的令牌吗?