2012-04-09 5 views
0

初めてのポスターですが、私は本当に立ち往生しています。 私はちょっとしたプロジェクトに取り組んでいます。ネットビーンプロジェクトを使ってツイートを送信しようとしています。私はtwitter4jを使用していますが、最近OAuth関数を使用する必要がある場所に変更されたようです。私はTwitter上でアプリケーションを作成し、いくつかのコードを試してみましたが、私はこのエラーを取得しておくました:私は何を全くわからないんだけどTwitter 4j with Netbeans

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 

:時限式outRelevantの議論は、インターネット上に存在することができます接続するスレッドの例外「メイン」私は間違っている。以下は私が試したコードです。

package login; 

import java.io.IOException; 

import twitter4j.ResponseList; 
import twitter4j.Status; 
import twitter4j.Twitter; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.auth.AccessToken; 

public class Login { 

    private final static String CONSUMER_KEY = "******"; 
    private final static String CONSUMER_KEY_SECRET = 
    "******"; 

    public void start() throws TwitterException, IOException { 

Twitter twitter = new TwitterFactory().getInstance(); 
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_KEY_SECRET); 

// here's the difference 
String accessToken = getSavedAccessToken(); 
String accessTokenSecret = getSavedAccessTokenSecret(); 
AccessToken oathAccessToken = new AccessToken(accessToken, 
    accessTokenSecret); 

twitter.setOAuthAccessToken(oathAccessToken); 
// end of difference 

twitter.updateStatus("Hi, im updating status again from Namex Tweet for Demo"); 

System.out.println("\nMy Timeline:"); 

// I'm reading your timeline 
ResponseList list = twitter.getHomeTimeline(); 
/* for (Status each : list) { 

    System.out.println("Sent by: @" + each.getUser().getScreenName() 
     + " - " + each.getUser().getName() + "\n" + each.getText() 
     + "\n"); 
}*/ 

    } 

    private String getSavedAccessTokenSecret() { 
// consider this is method to get your previously saved Access Token 
// Secret 
return "oC8tImRFL6i8TuRkTEaIcWsF8oY4SL5iTGNkG9O0Q"; 
    } 

    private String getSavedAccessToken() { 
// consider this is method to get your previously saved Access Token 
return "102333999-M4W1Jtp8y8QY8RH7OxGWbM5Len5xOeeTUuG7QfcY"; 
    } 

    public static void main(String[] args) throws Exception { 
      new Login().start(); 
    } 

} 

答えて

0

コードは正常です。あなたは間違いなく正しい消費者キーとあなたのアプリの秘密を使用して確認しましたか? twitter.verifyCredentials()を試して、同じエラーが発生するか、より具体的なエラーが発生するかどうかを確認してください。

プロキシ経由でネットに修正している場合は、接続が成功することを可能にするために、あなたのプロキシ設定を含める必要があります、詳細はさておき、ここでhttp://twitter4j.org/en/configuration.html#HTTP%20proxy%20server

見つけることができ、あなたは削除することもできますあなたはあなたの投稿からトークンと秘密にアクセスし、まだ有効であれば誰かがあなたのアカウントにログインすることができます。

+0

上のMBean/EJB /サーブレットなど

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

詳細情報から行うことができ、それは、プロキシサーバーを使用する必要ですか?私はこれにちょっと新しいので、私が見てきたチュートリアルのすべての細部を知っているわけではありません。私はverifyCredentialsはもはや最新のtwitter4jに存在しないと思う(アクセストークンと秘密はもはや有効ではありません) – user1321171

+0

プロキシサーバー経由でインターネットに接続する場合にのみ必要です。それらは必要ありません。あなたは、ソースコードにバンドルされたOAuthのサンプルを集めて実行しようとしましたか?私は最新のバージョンを使用しています - 2.2.5とverifyCredentials()は確かにそこにあります。 – dpmatheson

+0

あなたは正しいですverifyCredentials()はまだ存在します。私のコードのどの部分をこれに置き換えることを提案していますか? – user1321171

4

私は代替ルートを提案でした。..

私は最近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のは、あなたのコード内の別の場所にオブジェクトを作成する機能を実装したサブクラスで、このクラスを拡張することができます。

私は状況を作成しますと、このような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; 
    } 
} 

は、その後、あなたはに次のステートメントを使用することができますステータスを作成します。これは、構成プロセスhere