当前位置: 首页 > 知识库问答 >
问题:

获取用户推文的Twitter流API

范兴文
2023-03-14

我正在使用twitter流API从用户那里获取推文。我有用户Id列表如何从TwitterStream API获取推文列表。我分析了以下样本

public class TwitterStreamAPI {

    public static void main(String[] args) {
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true);
        cb.setOAuthConsumerKey("xxxx");
        cb.setOAuthConsumerSecret("xxx");
        cb.setOAuthAccessToken("xxx");
        cb.setOAuthAccessTokenSecret("xxx");

        TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

        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());*/
            }
        };

        String useIds[] = {"99901654"};




        twitterStream.addListener(listener);
    twitterStream.user(useIds);
    }
}

https://github.com/yusuke/twitter4j/blob/master/twitter4j-examples/src/main/java/twitter4j/examples/stream/PrintUserStream.java

但它不打印状态

共有2个答案

谢诚
2023-03-14

我在这里详细回答了同样的问题。请检查一下。这将向您展示我们如何使用所需的访问令牌读取和更新twitter。

简而言之,以下是步骤

  1. 将Twitter应用程序打包到https://apps.twitter.com/app/new并获取用户密钥。(如果你在某个地方撞到了,请关注上面提到的博客。)
  2. 使用Twitter4j API获取授权URL,点击它并获取PIN。(所需代码如下所述供参考)
  3. 输入pin码并进入密码(请参阅下面的代码)
  4. 这就是我们现在可以阅读或更新twitter提要的全部内容。(基于创建twitter应用程序时设置的访问级别)

请在这里查看示例代码。https://stackoverflow.com/a/40691881/2405670

卫博雅
2023-03-14

流媒体API为您提供实时事件,因此如果在您收听期间没有用户发推,您将看不到任何输出。

如果您尝试获取用户的历史推文,请考虑使用Twitter#getUserTimeline(屏幕名称)代替,例如:

final Twitter twitter = new TwitterFactory().getInstance();
final List<Status> statuses = twitter.getUserTimeline(screenName);

for (Status status : statuses) {
    System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
}

有关更多详细信息,请参阅此示例。

 类似资料:
  • 问题内容: 我有一个推特ID列表,我想为其下载其文本内容。有什么简单的解决方案,最好是通过Python脚本来实现?我查看了Tweepy之类的其他库,但事情似乎并没有那么简单,并且由于我的清单很长,因此无法手动下载它们。 问题答案: 您可以使用API路由按其ID访问特定的推文。大多数Python Twitter库遵循完全相同的模式,或为这些方法提供“友好的”名称。 例如,Twython提供了几种方法

  • 我正在尝试使用Twitter API实时收听许多用户(特定用户)的推文,但我无法找到任何关于此的留档。我发现了很多关于收听使用某个主题标签或关键字的推文的信息,但没有关于实时收听来自某些用户的所有推文的信息。 使用Twitter4J API,我能够指定多个用户,创建一个流,然后在其中一个用户发推文时运行一段代码。我如何使用PHP完成这一点?

  • 我试图使用Tweepy从特定位置获取推文,但当我运行代码时,会出现此错误 在我的代码中,我尝试从纽约市获取推文,其中包含纽约的位置坐标。我怎样才能从纽约一个人那里得到推特?我的猜测是使用一系列坐标,比如x,y和y,z。我该怎么做呢? 这是我的代码:

  • 我对Twitter API和对OAuth的总体理解存在问题。我可以轻松地请求从我的帐户中提取信息。我遇到的问题是,其他用户可能会使用“使用Twitter登录”。即使我能在他们登录后获得其他用户信息,我也无法在其他网站上单独请求他们的信息。php页面(我不想从MySQL获取信息)。我只能在原件上获得他们的信息一次。在他们登录并加载页面后返回php页面。 我将发布一些代码,但我的主要担忧/问题是——是

  • 问题内容: 我正在尝试浏览特定用户的推文,并获得对该推文的所有回复。我发现twitter的APIv1.1不直接支持它。 是否有破解或变通方法来获取特定推文的回复。我正在使用python Streaming API。 问题答案: 有使用REST API的解决方法。 您将需要要查找回复的原始推文作者的id_str和@username。 您应该将Search API用于作者的“ @用户名”。浏览结果以查

  • 问题内容: 我想从一个Twitter用户获得所有用户推文,到目前为止,这是我想出的: 请忽略不必要的导入。一个问题是,这只会获得用户最近的推文(或前20条推文)。是否可以让所有用户发布推文?据我所知,GEt_user_timeline(?)仅允许限制为3200。是否有办法获得至少3200条推文?我究竟做错了什么? 问题答案: 您的代码存在一些问题,包括一些多余的导入。特别是,你不需要和-能够处理你