2013-06-27 83 views
2

我正在使用twitter4j Stream API 3.0.3 jar。我試圖獲取用戶流,並在我的代碼下面給出了推文。它僅在過去1小時內沒有顯示任何輸出。在API中的流API未響應

public class StreamAPI { 

public static void main(String[] args) { 


    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setDebugEnabled(true); 
    cb.setOAuthConsumerKey("xxxx"); 
    cb.setOAuthConsumerSecret("xxxx"); 
    cb.setOAuthAccessToken("xxx-x"); 
    cb.setOAuthAccessTokenSecret("xxxxx"); 
    cb.setUseSSL(true); 

    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance(); 
    RawStreamListener listener = new RawStreamListener() { 
     @Override 
     public void onMessage(String rawJSON) { 
      System.out.println(rawJSON); 
     } 
     @Override 
     public void onException(Exception ex) { 
      ex.printStackTrace(); 
     } 
    }; 

    twitterStream.addListener(listener); 
    twitterStream.sample(); 

} 
} 

,當我嘗試獲取用戶,它顯示了401認證錯誤

static UserStreamListener listener = new UserStreamListener() { 
     @Override 
     public void onStatus(Status status) { 
      System.out.println("onStatus @" + status.getUser().getScreenName() + " - " + status.getText()); 
     } 

     @Override 
     public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
      System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
     } 

     @Override 
     public void onDeletionNotice(long directMessageId, long userId) { 
      System.out.println("Got a direct message deletion notice id:" + directMessageId); 
     } 

     @Override 
     public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
      System.out.println("Got a track limitation notice:" + numberOfLimitedStatuses); 
     } 

     @Override 
     public void onScrubGeo(long userId, long upToStatusId) { 
      System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
     } 

     @Override 
     public void onStallWarning(StallWarning warning) { 
      System.out.println("Got stall warning:" + warning); 
     } 

     @Override 
     public void onFriendList(long[] friendIds) { 
      System.out.print("onFriendList"); 
      for (long friendId : friendIds) { 
       System.out.print(" " + friendId); 
      } 
      System.out.println(); 
     } 

     @Override 
     public void onFavorite(User source, User target, Status favoritedStatus) { 
      System.out.println("onFavorite source:@" 
        + source.getScreenName() + " target:@" 
        + target.getScreenName() + " @" 
        + favoritedStatus.getUser().getScreenName() + " - " 
        + favoritedStatus.getText()); 
     } 

     @Override 
     public void onUnfavorite(User source, User target, Status unfavoritedStatus) { 
      System.out.println("onUnFavorite source:@" 
        + source.getScreenName() + " target:@" 
        + target.getScreenName() + " @" 
        + unfavoritedStatus.getUser().getScreenName() 
        + " - " + unfavoritedStatus.getText()); 
     } 

     @Override 
     public void onFollow(User source, User followedUser) { 
      System.out.println("onFollow source:@" 
        + source.getScreenName() + " target:@" 
        + followedUser.getScreenName()); 
     } 

     @Override 
     public void onDirectMessage(DirectMessage directMessage) { 
      System.out.println("onDirectMessage text:" 
        + directMessage.getText()); 
     } 

     @Override 
     public void onUserListMemberAddition(User addedMember, User listOwner, UserList list) { 
      System.out.println("onUserListMemberAddition added member:@" 
        + addedMember.getScreenName() 
        + " listOwner:@" + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListMemberDeletion(User deletedMember, User listOwner, UserList list) { 
      System.out.println("onUserListMemberDeleted deleted member:@" 
        + deletedMember.getScreenName() 
        + " listOwner:@" + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListSubscription(User subscriber, User listOwner, UserList list) { 
      System.out.println("onUserListSubscribed subscriber:@" 
        + subscriber.getScreenName() 
        + " listOwner:@" + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListUnsubscription(User subscriber, User listOwner, UserList list) { 
      System.out.println("onUserListUnsubscribed subscriber:@" 
        + subscriber.getScreenName() 
        + " listOwner:@" + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListCreation(User listOwner, UserList list) { 
      System.out.println("onUserListCreated listOwner:@" 
        + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListUpdate(User listOwner, UserList list) { 
      System.out.println("onUserListUpdated listOwner:@" 
        + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserListDeletion(User listOwner, UserList list) { 
      System.out.println("onUserListDestroyed listOwner:@" 
        + listOwner.getScreenName() 
        + " list:" + list.getName()); 
     } 

     @Override 
     public void onUserProfileUpdate(User updatedUser) { 
      System.out.println("onUserProfileUpdated user:@" + updatedUser.getScreenName()); 
     } 

     @Override 
     public void onBlock(User source, User blockedUser) { 
      System.out.println("onBlock source:@" + source.getScreenName() 
        + " target:@" + blockedUser.getScreenName()); 
     } 

     @Override 
     public void onUnblock(User source, User unblockedUser) { 
      System.out.println("onUnblock source:@" + source.getScreenName() 
        + " target:@" + unblockedUser.getScreenName()); 
     } 

     @Override 
     public void onException(Exception ex) { 
      ex.printStackTrace(); 
      System.out.println("onException:" + ex.getMessage()); 
     } 
    }; 

是任何人都可以幫助我獲得有關用戶的詳細信息,用戶的追隨者在Twitter上

+0

結帳[*此*](https://dev.twitter.com/discussions/335) – alfasin

回答

1

以下和鳴叫401錯誤代碼表示您沒有正確認證。你確定這些憑證是正確的嗎?

測試的一種好方法是連接到常規流式API(而不是用戶流)並查看是否仍然有401.如果這樣做,那麼您的憑據是不正確的。如果有效,那麼您請求的用戶流存在問題。

+0

我想了解關於用戶推特朋友和特定用戶的關注者的詳細信息。在正常情況下,我得到的所有細節,但我得到了達到極限例外。以避免我爲Stream API提供的速率限制例外。用戶流不可用於公開意味着我們需要使用我們的憑據登錄? – jackyesind

+0

費率限制問題意味着您需要隨時間推移您的請求。您可以在Twitter開發者網站上找到所有相關信息(https://dev.twitter.com/docs/rate-limiting/1.1)。您可以使用Twitter流媒體API,但是您將使用[Public Streams](https://dev.twitter.com/docs/api/1.1/post/statuses/filter)(請檢查follow參數) [用戶數據流](https://dev.twitter.com/docs/streaming-apis/streams/user),只能通過邀請。但是,401仍然意味着「未經授權」,這使我認爲您的憑證存在問題。 – sigpwned