now finds episode links
This commit is contained in:
@ -18,8 +18,6 @@ import org.jsoup.nodes.Document
|
|||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Locale
|
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
|
||||||
@ -27,7 +25,7 @@ class TwoDGirlsTech : ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val name = "2dgirlstech"
|
override val name = "2dgirlstech"
|
||||||
|
|
||||||
override val baseUrl = "https://2dgirls.tech/"
|
override val baseUrl = "https://2dgirls.tech"
|
||||||
|
|
||||||
override val lang = "en"
|
override val lang = "en"
|
||||||
|
|
||||||
@ -39,7 +37,7 @@ class TwoDGirlsTech : ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
suspend fun get(page: Int): AnimesPage {
|
suspend fun get(page: Int): AnimesPage {
|
||||||
var hasNextPage = true
|
var hasNextPage = true
|
||||||
val request = GET(baseUrl + "api/popular/" + page)
|
val request = GET(baseUrl + "/api/popular/" + page)
|
||||||
val arrayListDetails: ArrayList<SAnime> = ArrayList()
|
val arrayListDetails: ArrayList<SAnime> = ArrayList()
|
||||||
return suspendCoroutine<AnimesPage> { continuation ->
|
return suspendCoroutine<AnimesPage> { continuation ->
|
||||||
client.newCall(request).enqueue(object : Callback {
|
client.newCall(request).enqueue(object : Callback {
|
||||||
@ -56,10 +54,9 @@ class TwoDGirlsTech : ParsedAnimeHttpSource() {
|
|||||||
for (i in 0 until(size - 1)) {
|
for (i in 0 until(size - 1)) {
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
val jsonObjectDetail: JSONObject = jsonArrayInfo.getJSONObject(i)
|
val jsonObjectDetail: JSONObject = jsonArrayInfo.getJSONObject(i)
|
||||||
anime.url = "https://2dgirls.tech/api/details/" + jsonObjectDetail.getString("id")
|
|
||||||
anime.title = jsonObjectDetail.getString("title")
|
anime.title = jsonObjectDetail.getString("title")
|
||||||
anime.thumbnail_url = jsonObjectDetail.getString("image")
|
anime.thumbnail_url = jsonObjectDetail.getString("image")
|
||||||
anime.setUrlWithoutDomain("api/details/" + jsonObjectDetail.getString("id"))
|
anime.setUrlWithoutDomain("/api/detailshtml/" + jsonObjectDetail.getString("id"))
|
||||||
anime.artist = "Randall Munroe"
|
anime.artist = "Randall Munroe"
|
||||||
anime.author = "Randall Munroe"
|
anime.author = "Randall Munroe"
|
||||||
anime.status = SAnime.ONGOING
|
anime.status = SAnime.ONGOING
|
||||||
@ -75,21 +72,46 @@ class TwoDGirlsTech : ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun fetchSearchAnime(page: Int, query: String, filters: FilterList): Observable<AnimesPage> = Observable.just(AnimesPage(emptyList(), false))
|
override fun fetchSearchAnime(page: Int, query: String, filters: FilterList): Observable<AnimesPage> = Observable.just(AnimesPage(emptyList(), false))
|
||||||
|
|
||||||
override fun fetchAnimeDetails(anime: SAnime): Observable<SAnime> = fetchPopularAnime(1)
|
override fun fetchAnimeDetails(anime: SAnime): Observable<SAnime> {
|
||||||
.map { it.animes.first().apply { initialized = true } }
|
return Observable.just(anime)
|
||||||
|
}
|
||||||
|
|
||||||
override fun episodeListSelector() = "div#middleContainer.box a"
|
override fun episodeListSelector() = "div[id^=episode-]"
|
||||||
|
|
||||||
override fun episodeFromElement(element: Element): SEpisode {
|
override fun episodeFromElement(element: Element): SEpisode {
|
||||||
|
val id = element.id().split(":").last()
|
||||||
|
val episodeNumber = element.id().split("episode-").last().split(":").first()
|
||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.url = element.attr("href")
|
episode.episode_number = episodeNumber.toFloat()
|
||||||
val number = episode.url.removeSurrounding("/")
|
episode.name = "Episode $episodeNumber"
|
||||||
episode.episode_number = number.toFloat()
|
return runBlocking { getEpisode(episode, id, episodeNumber) }
|
||||||
episode.name = number + " - " + element.text()
|
}
|
||||||
episode.date_upload = element.attr("title").let {
|
|
||||||
SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse(it)?.time ?: 0L
|
suspend fun getEpisode(episode: SEpisode, id: String, episodeNumber: String): SEpisode {
|
||||||
|
val request = Request.Builder()
|
||||||
|
.url("$baseUrl/api/watching/$id/$episodeNumber")
|
||||||
|
.build()
|
||||||
|
return suspendCoroutine { continuation ->
|
||||||
|
client.newCall(request).enqueue(object : Callback {
|
||||||
|
override fun onFailure(call: Call, e: IOException) {
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
override fun onResponse(call: Call, response: Response) {
|
||||||
|
val strResponse = response.body()!!.string()
|
||||||
|
// creating json object
|
||||||
|
val json = JSONObject(strResponse)
|
||||||
|
// creating json array
|
||||||
|
val jsonArrayInfo: JSONArray = json.getJSONArray("links")
|
||||||
|
val size: Int = jsonArrayInfo.length()
|
||||||
|
for (i in 0 until(size - 1)) {
|
||||||
|
val jsonObjectDetail: JSONObject = jsonArrayInfo.getJSONObject(i)
|
||||||
|
if (jsonObjectDetail.getString("src").startsWith("https://storage.googleapis"))
|
||||||
|
episode.url = jsonObjectDetail.getString("src")
|
||||||
|
}
|
||||||
|
continuation.resume(episode)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return episode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun pageListParse(document: Document): List<Page> {
|
override fun pageListParse(document: Document): List<Page> {
|
||||||
|
Reference in New Issue
Block a user