dyttbt.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. /*
  2. * @File : freeok.js
  3. * @Author : jade
  4. * @Date : 2024/1/19 10:26
  5. * @Email : jadehh@1ive.com
  6. * @Software : Samples
  7. * @Desc : 电影天堂(已失效)
  8. */
  9. import {_, load} from '../lib/cat.js';
  10. import {VodDetail, VodShort} from "../lib/vod.js"
  11. import * as Utils from "../lib/utils.js";
  12. import {Spider} from "./spider.js";
  13. class DyttSpider extends Spider {
  14. constructor() {
  15. super();
  16. this.siteUrl = "https://www.dy2018.com"
  17. this.dyttReconnectTimes = 0
  18. }
  19. getName() {
  20. return `👼┃电影天堂BT┃👼`
  21. }
  22. getAppName() {
  23. return "电影天堂BT"
  24. }
  25. getJSName() {
  26. return "dyttbt"
  27. }
  28. getType() {
  29. return 3
  30. }
  31. // getHeader() {
  32. // return {"User-Agent": "PostmanRuntime/7.36.1", "Host":"www.dy2018.com"};
  33. // }
  34. async getHtml(url = this.siteUrl, headers = this.getHeader()) {
  35. try {
  36. let buffer = await this.fetch(url, null, headers, false, false, 1)
  37. let html = Utils.decode(buffer, "gb2312")
  38. if (!_.isEmpty(html) && Utils.getStrByRegex(/<script src="(.*?)"><\/script>/, html) !== "/_guard/auto.js") {
  39. return load(html)
  40. } else {
  41. if (this.dyttReconnectTimes < this.maxReconnectTimes) {
  42. Utils.sleep(2)
  43. this.dyttReconnectTimes = this.dyttReconnectTimes + 1
  44. return await this.getHtml(url, headers)
  45. } else {
  46. await this.jadeLog.error(`html获取失败`, true)
  47. }
  48. }
  49. } catch (e) {
  50. await this.jadeLog.error(`获取html出错,出错原因为${e}`)
  51. }
  52. }
  53. async setFilterObj() {
  54. }
  55. async setClasses() {
  56. let $ = await this.getHtml()
  57. let vodShortElements = $("[class=\"title_all\"]")
  58. for (const vodShortElement of vodShortElements) {
  59. let spanElement = $(vodShortElement).find("span")[0]
  60. let aElement = $(vodShortElement).find("a")[0]
  61. let type_name = $(spanElement).text()
  62. let type_id = aElement.attribs["href"]
  63. if (type_id.indexOf("https:") === -1 && type_id.indexOf("http:") === -1) {
  64. type_id = this.siteUrl + type_id
  65. }
  66. this.classes.push(this.getTypeDic(type_name, type_id))
  67. }
  68. let containElements = $($("[id=\"menu\"]").find("[class=\"contain\"]")).find("a").slice(0, -3)
  69. for (const contaElement of containElements) {
  70. let type_name = $(contaElement).text()
  71. let type_id = contaElement.attribs["href"]
  72. if (type_id.indexOf("https:") === -1 && type_id.indexOf("http:") === -1) {
  73. type_id = this.siteUrl + type_id
  74. }
  75. this.classes.push(this.getTypeDic(type_name, type_id))
  76. }
  77. }
  78. async parseVodShortListFromDocByCategory($) {
  79. let vod_list = []
  80. let vodShortElements = $($("[class=\"co_content8\"]")[0]).find("tbody")
  81. for (const vodShortElement of vodShortElements) {
  82. let vodShort = new VodShort()
  83. let vodElements = $(vodShortElement).find("tr")
  84. vodShort.vod_name = Utils.getStrByRegex(/《(.*?)》/, $(vodElements[1]).text())
  85. vodShort.vod_id = $(vodElements[1]).find("a").slice(-1)[0].attribs.href
  86. vodShort.vod_remarks = "日期:" + Utils.getStrByRegex(/日期:(.*?) /, $(vodElements[2]).text()) + " 热度:" + Utils.getStrByRegex(/点击:(.*?) /, $(vodElements[2]).text())
  87. vodShort.vod_pic = Utils.RESOURCEURL + "/resources/dytt.jpg"
  88. vod_list.push(vodShort)
  89. }
  90. return vod_list
  91. }
  92. async parseVodShortListFromDoc($) {
  93. let vod_list = []
  94. let vodShortElements = $($("[class=\"co_area2\"]")[0]).find("li").slice(1)
  95. for (const vodShortElement of vodShortElements) {
  96. let vodShort = new VodShort()
  97. let vodElement = $(vodShortElement).find("a")[0]
  98. vodShort.vod_id = vodElement.attribs["href"]
  99. vodShort.vod_name = Utils.getStrByRegex(/《(.*?)》/, vodElement.attribs["title"])
  100. vodShort.vod_remarks = $($(vodShortElement).find("span")).text().replaceAll("", "")
  101. vodShort.vod_pic = Utils.RESOURCEURL + "/resources/dytt.jpg"
  102. vod_list.push(vodShort)
  103. }
  104. return vod_list
  105. }
  106. async parseVodDetailFromDoc($) {
  107. let vodDetail = new VodDetail()
  108. vodDetail.vod_name = Utils.getStrByRegex(/《(.*?)》/, Utils.getStrByRegex(/<title>(.*?)<\/title>/, $.html()))
  109. let zoomElement = $("[id=\"Zoom\"]")
  110. vodDetail.vod_pic = $(zoomElement).find("img")[0].attribs.src
  111. let content = $(zoomElement).text()
  112. vodDetail.vod_year = Utils.getStrByRegex(/年  代 (.*?)◎/, content)
  113. vodDetail.type_name = Utils.getStrByRegex(/类  别 (.*?)◎/, content)
  114. vodDetail.vod_area = Utils.getStrByRegex(/产  地 (.*?)◎/, content)
  115. vodDetail.vod_director = Utils.getStrByRegex(/导  演 (.*?)◎/, content)
  116. vodDetail.vod_content = Utils.getStrByRegex(/简  介 (.*?)◎/, content)
  117. vodDetail.vod_actor = Utils.getStrByRegex(/主  演(.*?)◎/, content).replaceAll("      ", "*")
  118. vodDetail.vod_remarks = Utils.getStrByRegex(/豆瓣评分 (.*?)\//, content)
  119. vodDetail.vod_play_from = "磁力链接"
  120. let playList = $(zoomElement).find("[class=\"player_list\"]").find("a")
  121. let vodItems = []
  122. for (const playEle of playList) {
  123. vodItems.push($(playEle).text() + "$" + playEle.attribs.href);
  124. }
  125. vodDetail.vod_play_url = [vodItems.join("#")].join("$$$")
  126. return vodDetail
  127. }
  128. async setHomeVod() {
  129. let $ = await this.getHtml()
  130. this.homeVodList = await this.parseVodShortListFromDoc($)
  131. }
  132. async setCategory(tid, pg, filter, extend) {
  133. let cateUrl = tid
  134. if (tid.indexOf("index") > -1){
  135. cateUrl = tid.split(".html")[0] + "_" + pg + ".html"
  136. }
  137. let $ = await this.getHtml(cateUrl)
  138. this.vodList = await this.parseVodShortListFromDocByCategory($)
  139. }
  140. async setDetail(id) {
  141. let $ = await this.getHtml(this.siteUrl + id)
  142. this.vodDetail = await this.parseVodDetailFromDoc($)
  143. }
  144. }
  145. let spider = new DyttSpider()
  146. async function init(cfg) {
  147. await spider.init(cfg)
  148. }
  149. async function home(filter) {
  150. return await spider.home(filter)
  151. }
  152. async function homeVod() {
  153. return await spider.homeVod()
  154. }
  155. async function category(tid, pg, filter, extend) {
  156. return await spider.category(tid, pg, filter, extend)
  157. }
  158. async function detail(id) {
  159. return await spider.detail(id)
  160. }
  161. async function play(flag, id, flags) {
  162. return await spider.play(flag, id, flags)
  163. }
  164. async function search(wd, quick) {
  165. return await spider.search(wd, quick)
  166. }
  167. async function proxy(segments, headers) {
  168. return await spider.proxy(segments, headers)
  169. }
  170. export function __jsEvalReturn() {
  171. return {
  172. init: init,
  173. home: home,
  174. homeVod: homeVod,
  175. category: category,
  176. detail: detail,
  177. play: play,
  178. proxy: proxy,
  179. search: search,
  180. };
  181. }
  182. export {spider}