【问题标题】:Twitter API v2 Streaming with Retrofit or OkHttp使用 Retrofit 或 OkHttp 的 Twitter API v2 流式传输
【发布时间】:2023-03-25 05:10:01
【问题描述】:

我正在尝试在我的 android 应用程序中集成新的 Twitter API,特别是 streaming tweets 部分,我正在使用 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 保存多个推文对象的字符串数据表示,但我如何一次读取一条推文,或者像这样解析响应?

【问题讨论】:

    标签: twitter retrofit2 okhttp twitter-streaming-api


    【解决方案1】:

    从文档中,我认为您需要结合您拥有的两个示例。

    https://github.com/square/retrofit/blob/108fe23964b986107aed352ba467cd2007d15208/retrofit/src/main/java/retrofit2/http/Streaming.java

    按原样处理返回 {@link ResponseBody ResponseBody} 的方法的响应正文,即不将正文转换为 {@code byte[]}。

    以及示例调用代码

    https://github.com/square/retrofit/blob/108fe23964b986107aed352ba467cd2007d15208/retrofit/src/test/java/retrofit2/CallTest.java#L599

    我怀疑,根据您使用的 JSON API,您可能能够使用响应正文中的 Streaming API。但如果不是,您可以只在换行符或换行符上拆分,然后在下一行 { 并单独解析。抱歉,我帮不上忙。

    https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON

    【讨论】:

    • 使用 ResponseBody 进行改造调用有效,然后我在 \r\n 上拆分字符串,它似乎有效,我只是担心它会像那样解析它有多可靠
    • 应该是合理的,你可以改为使用真正的 JSON 解析器,如果你看到 wikipedia 中的示例,应该很清楚,只要它是行拆分,它就会继续工作。
    • @tyczj 你能发布你的解决方案吗?我也面临同样的问题。
    猜你喜欢
    • 2015-04-25
    • 2016-01-31
    • 2013-09-24
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2021-03-28
    相关资源
    最近更新 更多