twitter - 使用 Retrofit 或 OkHttp 的 Twitter API v2 流式传输
问题描述
我正在尝试集成新的 Twitter API,特别是我的 android 应用程序中的流式推文部分,我正在使用 Retrofit 进行我的 http 调用。
当我尝试拨打电话以获取流式推文时,它只是挂起并且不返回任何内容。
这是我的改装电话
@Streaming
@GET("tweets/search/stream")
suspend fun getFilteredStream(@Header("Authorization") token:String)
然后,我尝试仅使用 OkHttp 进行调用,如文档中所示,我得到了成功的响应,但我不知道如何流式传输数据。
我可以通过 curl 调用成功拨打电话,并且查看数据没有问题。
如何通过改造或 OkHttp 流式传输数据
更新:
使用 OkHttp,我可以通过这样做来获取数据
val client: OkHttpClient = OkHttpClient().newBuilder()
.build()
val request: Request = Request.Builder()
.url("https://api.twitter.com/2/tweets/search/stream")
.method("GET", null)
.build()
val response: Response = client.newCall(request).execute()
val source = response.body?.source()
val buffer = Buffer()
while(!source!!.exhausted()){
response.body?.source()?.read(buffer, 8192)
val data = buffer.readString(Charset.defaultCharset())
}
data
保存多个推文对象的字符串数据表示,但是我如何一次读取一条推文,或者像这样解析响应?
解决方案
从文档中,我认为您需要结合您拥有的两个示例。
按原样处理返回 {@link ResponseBody ResponseBody} 的方法的响应主体,即不将主体转换为 {@code byte[]}。
以及示例调用代码
我怀疑,取决于您使用的 JSON API,您可能能够使用响应正文中的 Streaming API。但如果不是,您可以只在换行符或换行符上拆分,然后在下一行 { 并单独解析。对不起,我在这里帮不上忙。
见https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON
推荐阅读
- git - `git commit --include` 的语义
- security - Securing an IoT device along with TLS
- javascript - 从 HTML 表更新 SQL Server 数据
- firebase - 为动态链接设置自定义路由,而不使用 Firebase 软管
- c# - 已安装服务时如何从外部文件更改 Worker Service 间隔时间
- javascript - VSCODE:没有调试适配器,不能发送“变量””
- jquery - 如何检查 jQuery 事件是否绑定到 cypress 测试中的元素
- java - Android - 如何打开语音邮件设置以使用 LOLLIPOP 中的 Intent 设置号码
- highcharts - Highchart 气泡图阴影
- javascript - 不要在单击浏览器的后退按钮时重新加载组件 - Angular