From 1ad891e2020878d600b9df704665d662c03a967b Mon Sep 17 00:00:00 2001 From: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com> Date: Fri, 19 Aug 2022 22:29:11 -0300 Subject: [PATCH] Fix HTTP error 400 in HN. (#13096) --- src/pt/hqnow/build.gradle | 2 +- .../tachiyomi/extension/pt/hqnow/HQNow.kt | 115 +++++++----------- 2 files changed, 43 insertions(+), 74 deletions(-) diff --git a/src/pt/hqnow/build.gradle b/src/pt/hqnow/build.gradle index 4b87b16bb..5165f5c36 100644 --- a/src/pt/hqnow/build.gradle +++ b/src/pt/hqnow/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'HQ Now!' pkgNameSuffix = 'pt.hqnow' extClass = '.HQNow' - extVersionCode = 6 + extVersionCode = 7 } apply from: "$rootDir/common.gradle" diff --git a/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt b/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt index 3b77e3fdf..7fb7b771b 100644 --- a/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt +++ b/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt @@ -11,12 +11,12 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.decodeFromJsonElement import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.put -import kotlinx.serialization.json.putJsonObject import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.Request @@ -32,7 +32,7 @@ class HQNow : HttpSource() { override val name = "HQ Now!" - override val baseUrl = "http://www.hq-now.com" + override val baseUrl = "https://www.hq-now.com" override val lang = "pt-BR" @@ -79,24 +79,15 @@ class HQNow : HttpSource() { """.trimIndent() } - val payload = buildJsonObject { - put("operationName", "getHqsByFilters") - put("query", query) - putJsonObject("variables") { + return queryRequest( + query = query, + operationName = "getHqsByFilters", + variables = buildJsonObject { put("orderByViews", true) put("loadCovers", true) put("limit", 300) } - } - - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(GRAPHQL_URL, newHeaders, body) + ) } override fun popularMangaParse(response: Response): MangasPage { @@ -125,19 +116,7 @@ class HQNow : HttpSource() { """.trimIndent() } - val payload = buildJsonObject { - put("operationName", "getRecentlyUpdatedHqs") - put("query", query) - } - - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(GRAPHQL_URL, newHeaders, body) + return queryRequest(query = query, operationName = "getRecentlyUpdatedHqs") } override fun latestUpdatesParse(response: Response): MangasPage { @@ -166,22 +145,13 @@ class HQNow : HttpSource() { """.trimIndent() } - val payload = buildJsonObject { - put("operationName", "getHqsByName") - put("query", queryStr) - putJsonObject("variables") { + return queryRequest( + query = queryStr, + operationName = "getHqsByName", + variables = buildJsonObject { put("name", query) } - } - - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(GRAPHQL_URL, newHeaders, body) + ) } override fun searchMangaParse(response: Response): MangasPage { @@ -228,22 +198,13 @@ class HQNow : HttpSource() { """.trimIndent() } - val payload = buildJsonObject { - put("operationName", "getHqsById") - put("query", query) - putJsonObject("variables") { + return queryRequest( + query = query, + operationName = "getHqsById", + variables = buildJsonObject { put("id", comicBookId.toInt()) } - } - - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(GRAPHQL_URL, newHeaders, body) + ) } override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply { @@ -298,22 +259,13 @@ class HQNow : HttpSource() { """.trimIndent() } - val payload = buildJsonObject { - put("operationName", "getChapterById") - put("query", query) - putJsonObject("variables") { + return queryRequest( + query = query, + operationName = "getChapterById", + variables = buildJsonObject { put("chapterId", chapterId.toInt()) } - } - - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(GRAPHQL_URL, newHeaders, body) + ) } override fun pageListParse(response: Response): List { @@ -339,6 +291,23 @@ class HQNow : HttpSource() { private fun buildQuery(queryAction: () -> String) = queryAction().replace("%", "$") + private fun queryRequest(query: String, operationName: String, variables: JsonObject? = null): Request { + val payload = buildJsonObject { + put("operationName", operationName) + put("query", query) + variables?.let { put("variables", it) } + } + + val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) + + val newHeaders = headersBuilder() + .add("Content-Length", body.contentLength().toString()) + .add("Content-Type", body.contentType().toString()) + .build() + + return POST(GRAPHQL_URL, newHeaders, body) + } + private fun String.toSlug(): String { return Normalizer .normalize(this, Normalizer.Form.NFD) @@ -355,8 +324,8 @@ class HQNow : HttpSource() { } companion object { - private const val STATIC_URL = "http://static.hq-now.com/" - private const val GRAPHQL_URL = "http://admin.hq-now.com/graphql" + private const val STATIC_URL = "https://static.hq-now.com/" + private const val GRAPHQL_URL = "https://admin.hq-now.com/graphql" private val JSON_MEDIA_TYPE = "application/json; charset=utf-8".toMediaTypeOrNull() }