2014-02-10 67 views
0

作爲我在大學的最後一年項目的一部分,我使用圖熵來分析Twitter數據。簡要概述目的:Twitter4j獲得關注者和關注任何用戶

  • 我想收集包含關鍵字「cold」,「flu」等的某個區域(倫敦)的所有推文。本部分使用Streaming API完成。
  • 然後,我想要訪問每個用戶(誰在關於生病,誰在上一節收集)列表的追隨者和以下能夠建立一個圖形進一步分析。在這裏,我卡住了。

我假設第二部分我應該使用Search API,但即使對於單個用戶,我也會收到錯誤88。

下面是我使用的第一部分的代碼:

final TwitterStream twitterStream = new TwitterStreamFactory(cb.build()) 
      .getInstance(); 
    StatusListener listener = new StatusListener() { 
    public void onStatus(Status status) { 
      User user = status.getUser(); 

      long userid = user.getId(); 

      String username = status.getUser().getScreenName(); 

      String content = status.getText(); 

      GeoLocation geolocation = status.getGeoLocation(); 

      Date date = status.getCreatedAt(); 

      if (filterText(content)) { 
       System.out.println(username+"\t"+userid); 
       System.out.println(content); 
       System.out.println(geolocation); 
       System.out.println(date); 
       try { 
        getConnections(userid); 
       } catch (TwitterException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

     //OTHER LISTENER METHODS 
    }; 

    twitterStream.addListener(listener); 

    // London 
    double lat3 = 51.23; 
    double lat4 = 51.72; 
    double lon3 = -0.56; 
    double lon4 = 0.25; 

    double[][] bb = { { lon3, lat3 }, { lon4, lat4 } }; 

    FilterQuery fq = new FilterQuery(); 
    fq.locations(bb); 

    twitterStream.filter(fq); 

    private static boolean filterText(String tweet) { 
    return tweet.contains("flu") 
      || tweet.contains("cold") 
      || tweet.contains("cough") 
      || tweet.contains("virus"); 

} 

而這正是我試圖完成的第二部分用:

private static void getConnections(long id) throws TwitterException { 
    Twitter twitter = new TwitterFactory().getInstance(); 

    long lCursor = -1; 
    IDs friendsIDs = twitter.getFriendsIDs(id, lCursor); 
    System.out.println(twitter.showUser(id).getName()); 
    System.out.println("=========================="); 
    do 
    { 
     for (long i : friendsIDs.getIDs()) 
     { 
      System.out.println("follower ID #" + i); 
      System.out.println(twitter.showUser(i).getName()); 
     } 
    }while(friendsIDs.hasNext()); 
} 

有什麼建議?

回答

3

當您收到error 88,這就是Twitter的告訴你,你是速率的限制:

該資源的要求已達到極限當前速率限制窗口。

搜索呼叫限於15分鐘內的180或450次呼叫。你可以看到the rate limits here,這個documentation詳細解釋了速率限制。

至於如何解決這個問題,您可能需要限制對API的搜索調用。 Twitter4J提供了檢查可能有所幫助的電流限制/耗盡的方法 - 請參閱Twitter#getRateLimitStatus()