diff --git a/src/main/kotlin/org/dokiteam/doki/parsers/site/all/WebtoonsParser.kt b/src/main/kotlin/org/dokiteam/doki/parsers/site/all/WebtoonsParser.kt index 23bfa2a..7088505 100644 --- a/src/main/kotlin/org/dokiteam/doki/parsers/site/all/WebtoonsParser.kt +++ b/src/main/kotlin/org/dokiteam/doki/parsers/site/all/WebtoonsParser.kt @@ -59,13 +59,18 @@ internal abstract class WebtoonsParser( } private suspend fun fetchEpisodes(titleNo: Long): List { - val url = "https://$mobileApiDomain/api/v1/webtoon/$titleNo/episodes?pageSize=99999" - val json = webClient.httpGet(url).parseJson() - - val episodeList = json.optJSONObject("result")?.optJSONArray("episodeList") - ?: throw ParseException("No episodes found for title $titleNo", url) - - return episodeList.mapChapters { _, jo -> + val url = "https://$mobileApiDomain/api/v1/webtoon/$titleNo/episodes?pageSize=99999" + val testJson = webClient.httpGet(url).parseJson() + val json = if (testJson.getBoolean("success")) { testJson } else { + val fallbackUrl = url.replace("/webtoon/", "/canvas/") + webClient.httpGet(fallbackUrl).parseJson() + } + + val episodeList = json.optJSONObject("result") + ?.optJSONArray("episodeList") + ?: throw ParseException("No episodes found for title $titleNo", url) + + return episodeList.mapChapters { _, jo -> val episodeTitle = jo.getStringOrNull("episodeTitle") ?: "" val episodeNo = jo.getInt("episodeNo") val viewerLink = jo.getString("viewerLink")