带Netbeans的twitter4j

带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

第一次贴海报,但我真的被卡住了。 我正在做一个小项目,我正试图用一个netbeans项目发送一条tweet。我使用的是twitter4j,最近情况似乎已经发生了变化,您必须使用其OAuth功能。我已经在twitter上创建了一个应用程序,并尝试了一些代码,但我一直收到以下错误:线程“main”连接中的异常超时相关讨论可以在Internet上的以下位置进行:

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网站获取的…这是一个不同于您在上面代码中包含的令牌吗?