You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Twitter4J Scala按地点过滤推特流时遇406错误求助

解决Twitter4J地点过滤的406错误问题

嘿,我刚仔细看了你的问题和代码,这个406 Parameter not accepted with the role错误的根源其实很清晰——你给locations()方法的传参格式不符合Twitter4J的要求!

错误原因分析

错误提示里的Location track items must be given as pairs of comma separated lat/longs: [Ljava.lang.String;@48d1de0f已经给出了关键线索:Twitter的Streaming API要求地点过滤的边界框必须是完整的经纬度组合单元,而Twitter4J的FilterQuery.locations()方法需要接收的是多个二维数组(每个子数组代表一个边界框的[最小经度, 最小纬度, 最大经度, 最大纬度])。

你现在的代码里,直接把一个一维的Array(-122.75,36.8,-121.75,37.8)传给了方法,这会让Twitter4J把这四个数值拆成两个独立的坐标对(而非一个完整的边界框),自然触发了参数格式无效的406错误。

修正方案

我们只需要调整参数的格式,把单个边界框包装成二维数组,同时让方法正确适配Twitter4J的可变参数要求:

1. 修改地点过滤方法

更新filterTwitterStreamByLocation方法,使其接收二维数组的边界框参数,并正确传递给locations():

def filterTwitterStreamByLocation(twitterStream: TwitterStream, boundingBoxes: Array[Array[Double]]) = {
  // 使用: _*将二维数组展开为可变参数,适配Twitter4J的方法签名
  twitterStream.filter(new FilterQuery().locations(boundingBoxes: _*))
}

2. 调整调用代码

在main方法里,把旧金山的边界框包装成二维数组再传递:

def main(args: Array[String]): Unit = {
  val twitterStream = TwitterStreamFilters.configureTwitterStream()
  val counter = new Counter
  twitterStream.addListener(counter)
  // 将单个边界框放入数组中,符合方法的参数要求
  TwitterStreamFilters.filterTwitterStreamByLocation(twitterStream, Array(Array(-122.75,36.8,-121.75,37.8)))
  TwitterStreamFilters.closeTwitterStream(twitterStream)
}

额外扩展说明

如果之后需要同时过滤多个地区的推文,只需要在二维数组里添加更多子数组即可,比如:

// 同时过滤旧金山和纽约的边界框
val multipleBoxes = Array(
  Array(-122.75,36.8,-121.75,37.8),
  Array(-74.0,40.7,-73.0,40.8)
)
TwitterStreamFilters.filterTwitterStreamByLocation(twitterStream, multipleBoxes)

内容的提问来源于stack exchange,提问作者Cassie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:12:10