java - 获取大量随机推文

标签 java twitter twitter4j twitter-hbc

我必须收集一大组(3000-5000)条随机选择的推文进行手动注释,但我有一些限制:

  1. 所有推文都必须附有图像;
  2. 不允许重复的推文;
  3. 我需要诸如评论之类的信息,因此在发布时间后几秒钟获取它们是没有用的,
  4. 我必须使用 Java 处理数据,因此我打算使用 Twitter4J 或 Hosebird Client。
  5. 推文可能必须是随机选择的,不指定任何标签(例如“食物”或“运动”)。

我设法使用 Hosebird 客户端创建一个 Stream 并用推文填充 BlockingQueue,但这样我就不会遵守限制 3 和 5。

另一方面,在 Twitter4J 中,使用 Query 类,我无法找到同时满足 1 到 5 的解决方案。

我觉得使用队列可以帮助我解决重复推文的问题,但我并没有成功满足我的所有先决条件。

我的问题是:是否可以尊重我对 twitter4j 或 HBC 的所有限制?如果是,有人可以给我一些代码或建议吗?

谢谢

最佳答案

我认为twitter4j足以满足你的所有条件。您可以在 twitter4J 中使用流式传输。如果您不给它过滤参数,它会给您一个推文流。例如;

条件-1)当您从流中获取推文时,您可以查看 media_entity 部分以检查是否至少有一个媒体对象且其类型为图像。如果是这样,您可以将其保存在任何数据库的表中。

例如:

 MediaEntity[] mediaEntities = status.getMediaEntities();

       for (MediaEntity mediaEntity : mediaEntities)
               if (mediaEntity.getType() == "photo")
               {
                  // Save status object which has the tweet and its metadata

                break;
               }

条件-2) 每条推文都有一个唯一的推文 ID,另一件事是流应用程序不能对同一条推文点击两次。但是,如果您独立运行两个不同的流媒体应用程序,则这两个应用程序可能会点击同一条推文。即使您运行两个应用程序,您也可以在保存之前检查数据库表中的推文 ID。

条件3)(详细说明你的意思!) 据我所知,Twitter还没有像Facebook那样的评论机制。如果您指的是转发,您可以通过 Twitter4J 的另一个应用程序同时搜索特定推文的转发。

条件-4) 我不了解 Hosebird 客户端系统,但我了解并经常使用 Twitter4J。我可以说 Twitter4J 是一个纯基于 Java 的系统。您需要使用的只是添加 jar 文件作为对 java 应用程序的引用,然后就可以使用了。这很简单。

条件-5) 我已经为我的流应用程序提供了一组关键字,以捕获包含特定关键字或主题标签的推文。在您的情况下,您可能不会给出任何参数,因此这意味着流应用程序将无条件地捕获所有推文。为此,你可以看看我的过滤机制作为例子:

 FilterQuery fq = new FilterQuery();
  String keywords[] = {"sport", "politics", "health"}; //etc..

  fq.track(keywords);

  twitterStream.addListener(statusListener);
  twitterStream.filter(fq);

最后,我在下面粘贴了一个完整的 java 方法作为示例,说明如何使用它。我希望它对你有帮助。 :D

  private static void GetTweetStreamForKeywords()
        {
        TwitterStream twitterStream = new TwitterStreamFactory(config).getInstance();

        StatusListener statusListener = new StatusListener() {

         @Override
         public void onStatus(Status status) {
           // The main section that you get the tweet. You can access it by status object.
           // You can save it in a database table.
         }


                @Override
                public void onDeletionNotice(StatusDeletionNotice sdn) {
                    throw new UnsupportedOperationException("Not supported yet."); 
                }

                @Override
                public void onTrackLimitationNotice(int i) {
                    throw new UnsupportedOperationException("Not supported yet."); 
                }

                @Override
                public void onScrubGeo(long l, long l1) {
                    throw new UnsupportedOperationException("Not supported yet."); 
                }

                @Override
                public void onStallWarning(StallWarning sw) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }

                @Override
                public void onException(Exception ex) {
                    logWriter.WriteErrorLog(ex, "onException()");
                }
            };

            FilterQuery fq = new FilterQuery();        

            String keywords[] = {"sport", "politics", "health"};

            fq.track(keywords);        

            twitterStream.addListener(statusListener);
            twitterStream.filter(fq);          
      }   

关于java - 获取大量随机推文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21315425/

相关文章:

java - 我可以在接口(interface)中拥有一个表示常量的字段,然后实现类可以设置该常量吗?

android - 如果我有一个推文字符串 (json),我可以加载到 Twitter4j Tweet[] 中吗?

java - Twitter4J 获取最新推文

java - Spring 和 Hibernate - 在 hibernate.cfg.xml 中无需硬编码密码即可使用

java - HashMap 与 AssertEquals 不匹配

twitter - 防止YouTube嵌入Twitter的代码

ios - 如何从我的应用程序将照片共享到Twitter应用程序?

java - 使用 java api 获取 Twitter 中我所有关注者的计数(推文)

java - ConstraintLayout 以编程方式设置constrainHeight_default

python - urllib2.HTTPError : HTTP Error 410: Gone