【问题标题】:Twitter Api detect my tweet retweeted or favouritedTwitter Api 检测我的推文被转发或收藏
【发布时间】:2014-10-13 08:43:01
【问题描述】:

是否可以检测到有人转发或收藏了我的状态? twitter api 是否为用户的推文 RTd 或 Favourited 提供任何侦听器?

特别是,我正在寻找 twitter4j 允许我这样做的东西。

【问题讨论】:

    标签: java twitter twitter4j twitter-streaming-api


    【解决方案1】:

    Ok 在彻底搜索 Twitter Streaming Api 之后,这是我使用的代码:

    对于收藏,我使用UserStreamListener 来监听其他人收藏的验证用户的推文(参见onFavorite()):

            TwitterStream twitterStream = new TwitterStreamFactory(new ConfigurationBuilder().setJSONStoreEnabled(true).build()).getInstance();
    
            twitterStream.setOAuthConsumer(StaticConstants.API_KEY, StaticConstants.API_SECRET);
            AccessToken token = new AccessToken(StaticConstants.TOKEN_KEY, StaticConstants.TOKEN_SECRET);
            twitterStream.setOAuthAccessToken(token);
    
            UserStreamListener listener = new UserStreamListener() {
                public void onStatus(Status status) {
                    System.out.println("Status: " + status.getText());
                    //do your action here
                }
    
                @Override
                public void onDeletionNotice(StatusDeletionNotice sdn) {
                }
    
                @Override
                public void onTrackLimitationNotice(int i) {
                }
    
                @Override
                public void onScrubGeo(long l, long l1) {
                }
    
                @Override
                public void onStallWarning(StallWarning sw) {
                }
    
                @Override
                public void onException(Exception excptn) {
                }
    
                @Override
                public void onDeletionNotice(long l, long l1) {
                }
    
                @Override
                public void onFriendList(long[] longs) {
                }
    
                @Override
                public void onFavorite(User user, User user1, Status status) {
                    System.out.println("User:"+user.getScreenName());
                    System.out.println("User1 :"+user1.getScreenName());
                    System.out.println("Status: "+status.getText());
                }
    
                @Override
                public void onUnfavorite(User user, User user1, Status status) {
                }
    
                @Override
                public void onFollow(User user, User user1) {
                }
    
                @Override
                public void onDirectMessage(DirectMessage dm) {
                }
    
                @Override
                public void onUserListMemberAddition(User user, User user1, UserList ul) {
                }
    
                @Override
                public void onUserListMemberDeletion(User user, User user1, UserList ul) {
                }
    
                @Override
                public void onUserListSubscription(User user, User user1, UserList ul) {
                }
    
                @Override
                public void onUserListUnsubscription(User user, User user1, UserList ul) {
                }
    
                @Override
                public void onUserListCreation(User user, UserList ul) {
                }
    
                @Override
                public void onUserListUpdate(User user, UserList ul) {
                }
    
                @Override
                public void onUserListDeletion(User user, UserList ul) {
                }
    
                @Override
                public void onUserProfileUpdate(User user) {
                }
    
                @Override
                public void onBlock(User user, User user1) {
                }
    
                @Override
                public void onUnblock(User user, User user1) {
                }
    
            };
            twitterStream.addListener(listener);
            twitterStream.user();
    

    为了收听其他用户为特定用户(不一定是身份验证用户)转发的转发,我使用了StatusListener,如下所示:

              StatusListener statusListner=new StatusListener() {
    
                @Override
                public void onStatus(Status status) {
                    System.out.println("Status Recvd: "+status.getText());
                }
    
                @Override
                public void onDeletionNotice(StatusDeletionNotice sdn) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void onTrackLimitationNotice(int i) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void onScrubGeo(long l, long l1) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void onStallWarning(StallWarning sw) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    
                @Override
                public void onException(Exception excptn) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
            };
    
            TwitterStream twitterStream2 = new TwitterStreamFactory(new ConfigurationBuilder().setJSONStoreEnabled(true).build()).getInstance();
    
            twitterStream2.setOAuthConsumer(StaticConstants.API_KEY, StaticConstants.API_SECRET);
            AccessToken token2 = new AccessToken(StaticConstants.TOKEN_KEY, StaticConstants.TOKEN_SECRET);
            twitterStream2.setOAuthAccessToken(token2);
    
            twitterStream2.addListener(statusListner);
            FilterQuery query = new FilterQuery();
            query.follow(new long[]{12384567l});
            twitterStream2.filter(query);
    

    在这里,我们必须收听其推文以被其他人(不一定是追随者)转发的用户的用户 ID,作为query.follow() 中的参数传递。 这对我来说非常好,并且是这样做的推荐方式。它绝不是黑客。我相信它会帮助其他在网上搜索过类似主题的人,并会回答许多关于 SO 的类似未回答问题。

    【讨论】:

      【解决方案2】:

      是的,但有一点需要注意 - 这是一个未记录且不受支持的 API 调用

      https://api.twitter.com/1.1/activity/about_me.json
      

      只有使用 官方 Twitter 客户端的 API 密钥对其进行签名,才能成功调用该资源。即 iPhone / Android / 等的 Twitter。

      如何获得这些钥匙留作创造力练习。 Twitter 禁止使用此类未记录的 API。也禁止使用他人的钥匙。

      【讨论】:

      • 这就是说不可能这样的同义词:)
      • 可以找到 API 密钥——它们就在外面 :-)
      • 天哪!你能给我链接在哪里吗?我搜索了它,但找不到。令人难以置信的是,您可以为任何应用程序找到这样的 api 密钥和秘密!!!
      • 使用原力,拉胡尔 :-)
      • 终于找到推荐的方法了。
      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 2015-10-06
      • 2016-07-19
      • 2013-09-23
      • 1970-01-01
      • 2011-08-22
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多