如何在Twitter4J查询中用since/until参数过滤推文?无关键词使用until参数问题
关于Twitter4J中since/until参数使用及无关键词流查询的解决方案
嘿,我来帮你搞定这两个Twitter4J的问题,都是和日期过滤、历史推文获取相关的,咱们一步步说:
1. 如何在Twitter4J的查询中通过since/until参数过滤推文?
首先得明确,since和until这两个参数是给搜索API用的,流API(实时监听的那种)不支持回溯历史数据,所以要获取指定日期的推文,得用搜索接口。
它们的日期格式必须严格是YYYY-MM-DD:
since:表示获取包含该日期及之后的推文until:表示获取该日期之前的推文(注意:不包含该日期当天的内容)
给你个简单的代码示例,不管有没有关键词都能用:
// 先初始化Twitter实例,前提是你已经配置好OAuth认证信息 Twitter twitter = TwitterFactory.getSingleton(); // 创建查询对象 Query query = new Query(); // 设置起始日期:获取2018年4月22日及之后的推文 query.setSince("2018-04-22"); // 设置结束日期:获取2018年4月24日之前的推文(也就是到23日为止) query.setUntil("2018-04-24"); // 如果需要加关键词,比如搜"tech",就这么写 // query.setQuery("tech"); // 执行查询并遍历结果 QueryResult result = twitter.search(query); for (Status status : result.getTweets()) { System.out.println("@" + status.getUser().getScreenName() + ": " + status.getText()); }
2. 无关键词时结合坐标与日期获取指定历史推文
你之前用的是流API监听坐标,但流API只能拿实时数据,没法回溯两天前的内容。要获取2018年4月22-23日的坐标范围内推文,得切换到搜索API,用bounding_box参数限定地理范围,再配合日期过滤就行,不需要关键词。
直接上代码示例:
Twitter twitter = TwitterFactory.getSingleton(); Query query = new Query(); // 设置地理范围,格式是bounding_box:[西经度 南纬度 东经度 北纬度],这里是示例坐标,你替换成自己的就行 query.setQuery("bounding_box:[-122.0 37.0 -121.0 38.0]"); // 日期范围和之前一样,since设为22日,until设为24日,确保包含23日的所有推文 query.setSince("2018-04-22"); query.setUntil("2018-04-24"); // 搜索API单次返回结果有限,所以要处理分页,循环获取所有结果 QueryResult result; do { result = twitter.search(query); for (Status status : result.getTweets()) { // 可以输出推文的坐标信息(如果有的话) String geoInfo = status.getGeoLocation() != null ? status.getGeoLocation().toString() : "无坐标"; System.out.println("@" + status.getUser().getScreenName() + " | " + geoInfo + ": " + status.getText()); } // 获取下一页查询对象,直到没有更多结果 query = result.nextQuery(); } while (query != null);
这里要注意几个点:
- 流API(比如
FilterQuery)真的没法获取历史数据,别再往这上面费功夫啦,切换到搜索API才是正确路径 bounding_box的坐标格式一定要准确,不然搜不到对应区域的推文- 记得处理分页,不然只能拿到第一页的结果,会漏掉很多内容
内容的提问来源于stack exchange,提问作者Mustafa K.
相关产品推荐
相关产品推荐

