2012-04-09 2 views
0

처음 포스터지만, 정말 붙어 있습니다. 저는 작은 프로젝트에서 일하고 있는데 넷빈즈 프로젝트를 사용하여 트윗을 보내려고합니다. 나는 twitter4j를 사용하고 있습니다. 최근 OAuth 기능을 사용해야하는 곳으로 바뀌 었습니다. 내가 트위터에서 응용 프로그램을 작성하고 몇 가지 코드를 시도하지만이 오류가 계속했습니다 예외 스레드에서 시간 초과 outRelevant 토론에서 인터넷에있을 수 있습니다 "주요"연결 : 나는 완전히 확실하지 않다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 

무엇 나는 잘못하고있다. 아래 코드는 제가 시도한 코드입니다.

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

맞습니다 .Credentials()가 여전히 존재합니다. 이 코드를 대체하기 위해 내 코드에서 어떤 부분을 제안하고 있습니까? – 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/트위터 코드에서 다른 객체 생성 기능을 구현 서브 클래스와이 클래스를 확장 할 수있다.

나는 상태를 만들어 '와 같은 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