newrechaTVBOX/cat/tjs/js/liujiushu.js
2024-08-25 20:53:29 +08:00

260 lines
8.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @File : liujiushu.js
* @Author : jade
* @Date : 2024/04/23 10:02
* @Email : jadehh@1ive.com
* @Software : Samples
* @Desc :
*/
import {_, load} from '../lib/cat.js';
import * as Utils from "../lib/utils.js";
import {Spider} from "./spider.js";
import {BookDetail, BookShort} from "../lib/book.js";
import {formatContent} from "../lib/utils.js";
class LiuJiuShuSpider extends Spider {
constructor() {
super();
this.siteUrl = "https://www.diyi69.com"
}
getAppName() {
return "六九书吧"
}
getJSName() {
return "liujiushu"
}
getType() {
return 10
}
getName() {
return "📚︎┃六九书吧┃📚︎"
}
async spiderInit(inReq = null) {
if (inReq !== null) {
this.jsBase = await js2Proxy(inReq, "img", this.getHeader());
} else {
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', this.getHeader());
}
}
async init(cfg) {
await super.init(cfg);
await this.spiderInit(null)
}
parseVodShortFromElement($, element) {
let bookShort = new BookShort()
let bookShortElements = $(element).find("a")
bookShort.book_remarks = $(bookShortElements[2]).text()
bookShort.book_name = $(bookShortElements[1]).text()
bookShort.book_id = bookShortElements[0].attribs.href
bookShort.book_pic = $(element).find("img")[0].attribs["src"]
return bookShort
}
async parseVodShortListFromDoc($) {
let books = []
let bookElements = $($("[class=\"flex\"]")[0]).find("li")
for (const bookElement of bookElements) {
let bookShort = this.parseVodShortFromElement($, bookElement)
books.push(bookShort)
}
return books
}
async parseVodShortListFromDocByCategory($) {
let bookElements = $("ul.flex > li")
let books = [];
for (const item of bookElements) {
let bookShort = new BookShort()
bookShort.book_id = $(item).find('a:first')[0].attribs.href;
const img = $(item).find('img:first')[0];
bookShort.book_name = img.attribs.title
bookShort.book_pic = img.attribs["data-original"]
bookShort.book_remarks = $($(item).find('em:first')).text();
books.push(bookShort)
}
return books
}
async parseVodShortListFromDocBySearch($) {
let books = []
let bookElements = $('li.searchresult')
for (const bookElement of bookElements) {
let bookShort = new BookShort()
let bookShortElements = $(bookElement).find("a")
bookShort.book_remarks = $(bookShortElements[2]).text()
bookShort.book_name = $(bookShortElements[1]).text()
bookShort.book_id = bookShortElements[0].attribs.href
bookShort.book_pic = $(bookShortElements[0]).find("img")[0].attribs["data-original"]
books.push(bookShort)
}
return books
}
async parseVodDetailFromDoc($, id) {
let html = $.html()
let bookDetail = new BookDetail()
bookDetail.book_name = $('[property$=title]')[0].attribs.content
bookDetail.book_year = $('[property$=update_time]')[0].attribs.content
bookDetail.book_director = $('[property$=author]')[0].attribs.content
bookDetail.book_content = $('[property$=description]')[0].attribs.content
bookDetail.book_remarks = $('[property$=category]')[0].attribs.content
bookDetail.book_pic = $('div.novel_info_main>img')[0].attribs.src
bookDetail.book_id = id
const playBook = {};
const sectionsElements = $("[class=\"flex ulcard\"]").find("li")
const urlElements = $("[class=\"section chapter_list\"]")
for (let i = 0; i < sectionsElements.length; i++) {
const sectionElement = sectionsElements[i]
const urlElemnet = urlElements[i]
let vodItems = []
for (const urlEle of $(urlElemnet).find("a")) {
const epName = $(urlEle).text();
const playUrl = epName + "-" + urlEle.attribs.href;
vodItems.push(epName + '$' + playUrl)
}
let name = $($(urlElemnet).find("[class=\"title jcc\"]")).text()
if (_.isEmpty(name)) {
let text = $(sectionElement).text().split("")[0]
playBook[text] = vodItems.join("#")
} else {
name = name.replaceAll("《","").replaceAll("》","").replaceAll(bookDetail.book_name,"")
playBook[name] = vodItems.reverse().join("#")
}
}
bookDetail.volumes = _.keys(playBook).join('$$$');
bookDetail.urls = _.values(playBook).join('$$$');
return bookDetail
}
async setClasses() {
let $ = await this.getHtml()
for (const a of $('div.navigation > nav > a[href!="/"]')) {
let type_id_list = a.attribs.href.split("/").slice(0, 3)
this.classes.push({
type_id: type_id_list.join("/"), type_name: a.children[0].data.trim(), tline: 2,
});
}
}
async setHomeVod() {
let $ = await this.getHtml()
this.homeVodList = await this.parseVodShortListFromDoc($)
}
async setDetail(id) {
let $ = await this.getHtml(this.siteUrl + id)
this.vodDetail = await this.parseVodDetailFromDoc($, id)
}
async setCategory(tid, pg, filter, extend) {
let $ = await this.getHtml(this.siteUrl + `${tid}/${pg}.html`);
this.vodList = await this.parseVodShortListFromDocByCategory($)
}
async setPlay(flag, id, flags) {
let id_list = id.split("-")
id = id_list[1]
let content = id_list[0] + "\n\n"
while (true) {
let $ = await this.getHtml(this.siteUrl + id)
content += Utils.formatContent($("[class=\"content\"]").html().trim().replaceAll("<p>", " ").replaceAll("</p>", "\n"));
id = $("[id=\"next_url\"]")[0].attribs.href;
if (id.indexOf('_') < 0) break;
}
this.playUrl = {"content": content}
}
async setSearch(wd, quick) {
let params = {"searchkey": wd, "searchtype": "all", "Submit": ""}
let content = await this.fetch(this.siteUrl + "/search/", params, this.getHeader())
let $ = load(content)
this.vodList = await this.parseVodShortListFromDocBySearch($)
}
async proxy(segments, headers) {
await this.jadeLog.debug(`正在设置反向代理 segments = ${segments.join(",")},headers = ${JSON.stringify(headers)}`)
let what = segments[0];
let url = Utils.base64Decode(segments[1]);
if (what === 'img') {
await this.jadeLog.debug(`反向代理ID为:${url}`)
let $ = await this.getHtml(this.siteUrl + url)
let bookDetail = await this.parseVodDetailFromDoc($)
let resp;
if (!_.isEmpty(headers)) {
resp = await req(bookDetail.book_pic, {
buffer: 2, headers: headers
});
} else {
resp = await req(bookDetail.book_pic, {
buffer: 2, headers: {
Referer: url, 'User-Agent': Utils.CHROME,
},
});
}
return JSON.stringify({
code: resp.code, buffer: 2, content: resp.content, headers: resp.headers,
});
}
return JSON.stringify({
code: 500, content: '',
});
}
}
let spider = new LiuJiuShuSpider()
async function init(cfg) {
await spider.init(cfg)
}
async function home(filter) {
return await spider.home(filter)
}
async function homeVod() {
return await spider.homeVod()
}
async function category(tid, pg, filter, extend) {
return await spider.category(tid, pg, filter, extend)
}
async function detail(id) {
return await spider.detail(id)
}
async function play(flag, id, flags) {
return await spider.play(flag, id, flags)
}
async function search(wd, quick) {
return await spider.search(wd, quick)
}
async function proxy(segments, headers) {
return await spider.proxy(segments, headers)
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
proxy: proxy
};
}
export {spider}