API потоковой передачи Twitter HTTP 420 - PullRequest
0 голосов
/ 10 марта 2020

Я хочу использовать твиттер API для потоковой передачи в android.

Я использовал kotlin сопрограмм и модификацию.

Каким-то образом в третьем запросе я получаю HTTP 420 ОШИБКА (улучшите ваше спокойствие)

Я не могу понять, почему это происходит. Я использую kotlin сопрограмм.

Вот мой код:

    fun getStreamData(str: String) {
        Log.d("debug", "Fetching data..")
        coroutineScope.launch {
            withContext(Dispatchers.Main) {
                //Display loading animation in UI
                _status.value = DataApiStatus.LOADING
            }
            try {
                val listResult = ApiService().api!!.getTweetList(str).await()

                while (!listResult.source().exhausted()) {
                    val reader = JsonReader(InputStreamReader(listResult.byteStream()))
                    // https://stackoverflow.com/questions/11484353/gson-throws-malformedjsonexception
                    reader.setLenient(true);
                    val gson = GsonBuilder().create()
                    val j = gson.fromJson<JsonObject>(reader, JsonObject::class.java)

                    Log.d("debug", "JSON: " + j.toString())

                    if (j.get("text") != null && j.getAsJsonObject("user").get("profile_image_url_https") != null && j.getAsJsonObject("user").get("name") != null){
                        val t = gson.fromJson<Tweet>(j, Tweet::class.java)

                        withContext(Dispatchers.Main) {
                            _status.value = DataApiStatus.DONE
                            // https://stackoverflow.com/questions/47941537/notify-observer-when-item-is-added-to-list-of-livedata
                            tweetsList.add(t)
                            _tweetsList.value = tweetsList
                        }
                    }
                }
            }
            catch (e : JsonSyntaxException) {
                Log.e("error", "JsonSyntaxException ${e.message}");
            }
            catch (e: Exception) {
                Log.e("error", "ERROR ${e.message}")
            }
        }
    }

Эта функция отвечает за поиск потока в соответствии со строкой str , которая является параметром. Кроме того, когда изменяется параметр поиска, я отменяю текущее задание и повторно запускаю новое с фактическим параметром поиска.

fun cancelJob(){
        Log.d("debug", "Cancelling current Job!")
        coroutineScope.coroutineContext.cancelChildren()
    }

Что я делаю не так? В третьем запросе я получаю HTTP 420 ОШИБКА.

Вот полный код:

https://github.com/maiamiguel/RHO-Challenge

1 Ответ

1 голос
/ 10 марта 2020

Код статуса 420 Enhance Your Calm является неофициальным расширением Twitter. Твиттер использовал это, чтобы сообщить клиентам HTTP, что их скорость ограничена. Ограничение скорости означает наложение ограничений на общее количество запросов, которые клиент может выполнить в течение определенного периода времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...