2013-06-27 45 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