Twitter Api 检测我的推文被转发或收藏 [英] Twitter Api detect my tweet retweeted or favourited

查看:37
本文介绍了Twitter Api 检测我的推文被转发或收藏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is it possible to detect that someone retweeted or favourited my status? Does twitter api provide any listeners for a user's tweet RTd or Favourited?

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

In particular, I am looking for something with twitter4j that allows me to do so.

推荐答案

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

Ok After thoroughly searching about Twitter Streaming Api, here is the code I have used:

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

For Favorite, I used UserStreamListener for listening for tweets of authenticating user favorited by other people(see 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 如下:

For listening to retweets retweeted by other users for a particular user(not necessarily the authenticating user), I used StatusListener as follows:

          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 的许多类似未回答的问题.

Here the user id of user whose tweets we have to listen to for being retweeted by others(not necessarily followers), is being passed as parameter in query.follow(). This works perfectly fine for me and is the recommended way for doing so. Its by no means a hack. I am sure that it would help others who have searched the net for a similar topic and would answer many similar unanswered questions on SO.

这篇关于Twitter Api 检测我的推文被转发或收藏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆