2012-10-09 91 views
0

好的,我每次運行我的程序時都會爲Twitter獲取一個訪問令牌...(目前很乏味,但我會發現如何使它成爲一個持久存儲)...我如何去使用此訪問令牌,這樣,當我搜索,我不會得到一個使用OAuth搜索Twitter

「頻率超過上限,客戶可以不使時速超過150名的請求。」 錯誤?

它,當我在尋找以下情況:「https://api.twitter.com/1/users/show.json?screen_name=[screenName]」 被編碼爲:

BufferedReader ff = new BufferedReader(new InputStreamReader(ffUser.openConnection().getInputStream())); 

在下面我的代碼:

public class UDC { 
private static String term1; 
private static String term2; 
public static String PIN; 

private static final String twitterSearch = "http://search.twitter.com/search.json?q=%23"; 
private static String rppPage = "&rpp=500&page=1"; 

private static final String ffGet = "https://api.twitter.com/1/users/show.json?screen_name="; 
private static final String CONSUMER_KEY = "K7el7Fqu7UtcJv3A3ssOQ"; 
private static final String CONSUMER_SECRET = "w7ZX27ys58mafLYeivuA2POVe0gjhTIIUH26f2IM"; 

private static String entities = "&include_entities=true"; 

static Object[][] tableData = new Object[500][6]; 
static SearchResultC s = new SearchResultC(); 
static StringBuffer buff = new StringBuffer(); 
static StringBuffer buff1 = new StringBuffer(); 

public static void main (String args[]) throws Exception{ 
    verifyURL v = new verifyURL(); 
    Twitter twitter = new TwitterFactory().getInstance(); 
     twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     RequestToken requestToken = twitter.getOAuthRequestToken(); 
     AccessToken accessToken = null; // = loadAccessToken(Integer.parseInt(args[0])); 
      //Twitter twitter = factory.getInstance); 
      //twitter.setOAuthConsumerKey(COMSUMER_KEY, COMSUMER_SECRET); 
      //twitter.setOAuthAccessToken(accessToken); 

     v.valURLText.setText(requestToken.getAuthorizationURL()); 
     v.vFrame.setVisible(true); 
     int p = 0; 

     do { 
      //nothing 
     } while (v.vFrame.isVisible()); 
       try { 
        if (PIN.length() > 0) { 
         accessToken = twitter.getOAuthAccessToken(requestToken, PIN); 
        } else { 
         accessToken = twitter.getOAuthAccessToken(); 
        } 
       } catch (TwitterException te) { 
        if(401 == te.getStatusCode()) { 
         showErrorPane("Unable to get access code", "Error"); 
         p = 1; 
        } else { 
         te.printStackTrace(); 
        } 
       } 

     //storeAccessToken(twitter.verifyCredentials().getId(), accessToken); 


    if (p == 0) { 
     initComponents(); 
     UDTFrame.setVisible(true); 
    } else { 
     System.exit(0); 
    } 
} 


@SuppressWarnings({ "static-access"}) 
private static void searchButtonMouseClicked(String t1, String t2) throws IOException { 

    if(t1.equals("") || t2.equals("") || t1.equals(t2)) 
     { 
     showErrorPane("Invalid Search Terms", "Search Error"); 
    } 

    else 
    { 
     s.getInitComponents(); 
     clicked(t1, 0); 
     clicked(t2, 3); 
     s.SRTFrame.setVisible(true); 
     s.sTerm1Field.setText(t1); 
     s.sTerm2Field.setText(t2); 
    } 
} 

@SuppressWarnings("static-access") 
public static void clicked(String term, int t){ 
    UDTFrame.setVisible(false); 
    float follower; 
    float friends; 
    float ffRatio; 
    float DUA; 
    int statuses; 
    int day; 
    int year; 
    String month; 

    try { 
     URL searchURL1 = new URL (twitterSearch + term + rppPage); 
     //String searchURL = new String (twitterSearch + term + rppPage); 
     BufferedReader br = new BufferedReader(new InputStreamReader(searchURL1.openConnection().getInputStream())); 

     //OAuthRequest request = new OAuthRequest(Verb.POST, searchURL); 

     int c; 
     while ((c=br.read()) != -1) { 
      buff.append((char)c); 
     } 
     br.close(); 

     /*******************************************************************************************/ 
     /*******************************************************************************************/ 
     /******************************** follower/friend ratio ************************************/ 
     /*******************************************************************************************/ 
     /*******************************************************************************************/ 
     JSONObject js = new JSONObject(buff.toString()); 
     JSONArray tweets = js.getJSONArray("results"); 
     JSONObject tweet = new JSONObject(); 
     for(int i=0; i < tweets.length(); i++) { 
      tweet = tweets.getJSONObject(i); 
      //System.out.println(tweet); 
      //user[i] = tweet.getString("from_user_name"); 
      //System.out.println(tweet.getString("from_user_name")); 
      //System.out.println(user[i]); 
      String userName = tweet.getString("from_user"); 

      //URL ffUser = new URL(ffGet + user[i] + entities); 
      URL ffUser = new URL(ffGet + userName + entities); 
      String ffUser1 = new String(ffGet + userName + entities); 

      BufferedReader ff = new BufferedReader(new InputStreamReader(ffUser.openConnection().getInputStream())); 
      OAuthRequest request = new OAuthRequest(Verb.POST, ffUser1); 

      int d, e = 0; 
      while((d = ff.read()) != -1) { 
       buff1.append((char)d); 
       e++; 
      } 
      ff.close(); 

      JSONObject js1 = new JSONObject(buff1.toString()); 
      //System.out.println(js1); 
      //JSONArray userData = new JSONArray(buff1.toString()); 
      //JSONObject userData1; 
      //for(int j = 0; j < js1.length(); i++){ 
       //userData1 = userData.getJSONObject(j); 
       follower = js1.getInt("followers_count"); 
       friends = js1.getInt("friends_count"); 
       ffRatio = friends/follower; 

       String createdDate = js1.getString("created_at"); 
       statuses = js1.getInt("statuses_count"); 

       String nameData = js1.getString("name"); 
       String gen = gender(nameData); 


     //} 

    } catch (MalformedURLException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (JSONException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
} 

我完全新本的OAuth和訪問令牌和所有所以任何幫助將非常感激。

+0

你爲什麼要用Scribe和Twitter4J做一些事情?這不是一個好兆頭......你也應該編輯你的問題,只包含你的代碼的相關部分。 –

+0

我一開始是在抄寫,但是我無法得到它的工作,所以我試着twitter4j ...猜我一定是混淆了圖書館:/ – Kairu

回答

0

隨着

OAuthRequest request = new OAuthRequest(Verb.POST, ffUser1); 

你正在做使用抄寫庫未認證的請求(你永遠不會實例化的OAuthService對象,它必須被用來sign此要求)。所以當你這樣做的時候,Twitter經常會拒絕這些請求。

所以你的問題確實來自混合Twitter4J和Scribe。

+0

嗯好吧...因爲我已經有twitter4j的訪問令牌,我怎麼使用訪問令牌搜索「https://api.twitter.com/1/users/show.json?screen_name=」?我嘗試使用Google搜索,但我得到的只是更新推文的例子......或者說twitter4j是什麼? – Kairu

+0

爲什麼不[請檢查他們的文檔](http://twitter4j.org/en/api-support.html)?你會發現['showUser(String screenName)'](http://twitter4j.org/en/javadoc/twitter4j/api/UserMethods.html#showUser%28java.lang.String%29)方法。 –

+1

噢,謝謝它的工作原理:D 非常感謝^ - ^ – Kairu