AndroidCatVodSpider/app/src/main/java/com/github/catvod/spider/DiDa.kt

181 lines
6.0 KiB
Kotlin

package com.github.catvod.spider
import com.github.catvod.bean.Class
import com.github.catvod.bean.Result
import com.github.catvod.bean.Vod
import com.github.catvod.bean.Vod.VodPlayBuilder
import com.github.catvod.net.OkHttp
import com.github.catvod.utils.ProxyVideo
import com.github.catvod.utils.Util
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.select.Elements
import java.net.URLEncoder
class DiDa : Cloud() {
private val headers: HashMap<String?, String?>
get() {
val headers = java.util.HashMap<String?, String?>()
headers.put("User-Agent", Util.CHROME)
return headers
}
private fun parseVodFromDoc(doc: Document): MutableList<Vod?> {
val list: MutableList<Vod?> = ArrayList<Vod?>()
for (element in doc.select("div.myui-vodlist__box")) {
var pic = element.selectFirst("img")?.attr("src")
if (pic.isNullOrBlank()) {
pic = element.selectFirst("a")?.attr("data-original")
}
val url = element.selectFirst("a")?.attr("href")
val name = element.select("h4 > a").text()
list.add(Vod(url, name, pic))
}
return list
}
@Throws(Exception::class)
override fun homeContent(filter: Boolean): String? {
val doc = Jsoup.parse(
OkHttp.string(
siteUrl, this.headers
)
)
var classes: List<Class?>
val menuList = doc.select("ul.nav-menu > li > a")
classes = menuList.map {
val url = it.attr("href")
val title = it.text()
Class(url, title)
}
val list: MutableList<Vod?> = parseVodFromDoc(doc)
return Result.string(classes, list)
}
@Throws(Exception::class)
override fun categoryContent(
tid: String, pg: String, filter: Boolean, extend: java.util.HashMap<String?, String?>?
): String? {
val type = tid.replace("/type/", "").replace(".html", "")
val target: String = siteUrl + "/show/${type}--------${pg}---.html"
val doc = Jsoup.parse(OkHttp.string(target, this.headers))
val list = parseVodFromDoc(doc)
val total = (pg.toInt() + 1) * 24
return Result.get().vod(list).page(pg.toInt(), pg.toInt() + 1, 48, total).string()
}
@Throws(Exception::class)
override fun detailContent(ids: MutableList<String?>): String? {
val doc = Jsoup.parse(
OkHttp.string(
siteUrl + ids.get(0), this.headers
)
)
val name = doc.select("h1").text()
val img = doc.select("a.myui-vodlist__thumb > img")
val pic = img.attr("src") ?: img.attr("data-original")
val desc = doc.select("p.data").text()
val year = Util.findByRegex("年份:(.*)又名", desc, 1).trim()
val area = Util.findByRegex("地区:(.*)语言", desc, 1).trim()
val actor = Util.findByRegex("主演:(.*)导演", desc, 1).trim()
val builder = VodPlayBuilder()
val playFromTab = doc.selectFirst("div.myui-panel__head > ul.nav ")
val playFromEles = playFromTab?.select("ul > li > a") ?: Elements()
for (ele in playFromEles) {
val playUrlList = mutableListOf<Vod.VodPlayBuilder.PlayUrl>()
val id = ele.attr("href")
val playFrom = ele.text()
if (playFrom.contains("网盘")) {
continue
}
val playElement = doc.select("$id")
for (element in playElement.select("ul > li > a")) {
val playUrl = VodPlayBuilder.PlayUrl()
playUrl.url = element.attr("href")
playUrl.name = element.text()
playUrlList.add(playUrl)
}
builder.append(playFrom, playUrlList)
}
var panFrom = ""
var panURl = ""
for (element in doc.select(" div.myui-panel_bd.clearfix > p > a")) {
if (element.attr("href").matches(Util.patternQuark.toRegex())) {
panFrom = super.detailContentVodPlayFrom(listOf<String>(element.attr("href")))
panURl = super.detailContentVodPlayUrl(listOf<String>(element.attr("href")))
}
}
val result = builder.build()
val vod = Vod()
vod.setVodId(ids[0])
vod.setVodPic(ProxyVideo.buildCommonProxyUrl(pic, Util.webHeaders(pic)))
vod.setVodYear(year)
vod.setVodActor(actor)
vod.setVodArea(area)
vod.setVodName(name)
vod.setVodPlayFrom(result.vodPlayFrom + "$$$" + panFrom)
vod.setVodPlayUrl(result.vodPlayUrl + "$$$" + panURl)
return Result.string(vod)
}
@Throws(Exception::class)
override fun searchContent(key: String?, quick: Boolean): String? {
val doc = Jsoup.parse(
OkHttp.string(
searchUrl + URLEncoder.encode(key), this.headers
)
)
val list: MutableList<Vod?> = ArrayList<Vod?>()
for (element in doc.select("a.cover-link")) {
val pic = element.select("img").attr("data-src")
val url = element.attr("href")
val name = element.select("img").attr("alt")
val id: String? = url.split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[2]
list.add(Vod(id, name, ProxyVideo.buildCommonProxyUrl(pic, Util.webHeaders(pic))))
}
return Result.string(list)
}
@Throws(Exception::class)
override fun playerContent(flag: String?, id: String?, vipFlags: MutableList<String?>?): String? {
if (flag == null) {
return Result.get().url("").header(this.headers).string()
} else if (flag.contains("quark")) {
super.playerContent(flag, id, vipFlags)
} else {
}
return Result.get().url(id).header(this.headers).string()
}
companion object {
private const val siteUrl = "https://www.didahd.pro"
private val searchUrl: String = siteUrl + "/search?q="
}
}