Twitter API v2 Streaming with Retrofit 或 OkHttp
Twitter API v2 Streaming with Retrofit or OkHttp
我正在尝试在我的 android 应用程序中集成新的 Twitter API,特别是 streaming 推文部分,我正在为我的 http 调用使用 Retrofit。
当我尝试调用以获取流式推文时,它只是挂起,return 什么也没有。
这是我的改装电话
@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
包含多个推文对象的字符串数据表示,但我如何一次读取一条推文,或像这样解析响应?
根据文档,我认为您需要结合您拥有的两个示例。
Treat the response body on methods returning {@link ResponseBody ResponseBody} as is, i.e. without converting the body to {@code byte[]}.
以及示例调用代码
我怀疑,根据您使用的 JSON API,您可以使用来自响应正文的 Streaming API。但如果不是,您可以在换行符或换行符后跟 { 在下一行上拆分并单独解析。抱歉我帮不了你。
见https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON
我正在尝试在我的 android 应用程序中集成新的 Twitter API,特别是 streaming 推文部分,我正在为我的 http 调用使用 Retrofit。
当我尝试调用以获取流式推文时,它只是挂起,return 什么也没有。
这是我的改装电话
@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
包含多个推文对象的字符串数据表示,但我如何一次读取一条推文,或像这样解析响应?
根据文档,我认为您需要结合您拥有的两个示例。
Treat the response body on methods returning {@link ResponseBody ResponseBody} as is, i.e. without converting the body to {@code byte[]}.
以及示例调用代码
我怀疑,根据您使用的 JSON API,您可以使用来自响应正文的 Streaming API。但如果不是,您可以在换行符或换行符后跟 { 在下一行上拆分并单独解析。抱歉我帮不了你。
见https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON