From 79b57af9c067ed275e97835a114c60cc95a173c4 Mon Sep 17 00:00:00 2001 From: catvod <88956744+catvod@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:26:45 +0800 Subject: [PATCH] Create 13bqg_open.js --- open/13bqg_open.js | 165 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 open/13bqg_open.js diff --git a/open/13bqg_open.js b/open/13bqg_open.js new file mode 100644 index 0000000..b26dc33 --- /dev/null +++ b/open/13bqg_open.js @@ -0,0 +1,165 @@ +import { _, load } from './lib/cat.js'; + +let key = '13bqg'; +let url = 'https://m.13bqg.com'; +let siteKey = ''; +let siteType = 0; + +const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; + +async function request(reqUrl) { + let resp = await req(reqUrl, { + headers: { + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'User-Agent': MOBILE_UA, + }, + }); + return resp.content; +} + +// cfg = {skey: siteKey, ext: extend} +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; +} + +async function home(filter) { + var html = await request(url); + const $ = load(html); + let classes = []; + for (const a of $('div.nav > ul > li > a[href!="/"]')) { + classes.push({ + type_id: a.attribs.href.replace(/\//g, ''), + type_name: a.children[0].data.trim(), + tline: 2, + }); + } + return { + class: classes, + }; +} + +async function category(tid, pg, filter, extend) { + if (pg == 0) pg = 1; + var html = await request(url + `/${tid}/${pg}.html`); + const $ = load(html); + let books = []; + for (const item of $('div.item')) { + const a = $(item).find('a:first')[0]; + const img = $(a).find('img:first')[0]; + const span = $(item).find('span:first')[0]; + books.push({ + book_id: a.attribs.href, + book_name: img.attribs.alt, + book_pic: img.attribs.src, + book_remarks: span.children[0].data.trim(), + }); + } + return { + page: pg, + pagecount: $('div.page > a:contains(>)').length > 0 ? pg + 1 : pg, + list: books, + }; +} + +async function detail(id) { + var html = await request(url + id); + var $ = load(html); + let book = { + book_name: $('[property$=book_name]')[0].attribs.content, + book_year: $('[property$=update_time]')[0].attribs.content, + book_director: $('[property$=author]')[0].attribs.content, + book_content: $('[property$=description]')[0].attribs.content, + }; + html = await request(url + id + `list.html`); + $ = load(html); + let urls = []; + const links = $('dl>dd>a[href*="/html/"]'); + for (const l of links) { + var name = $(l).text().trim(); + var link = l.attribs.href; + urls.push(name + '$' + link); + } + book.volumes = '全卷'; + book.urls = urls.join('#'); + + return { + list: [book], + }; +} + +async function play(flag, id, flags) { + try { + var content = ''; + while (true) { + var html = await request(url + id); + var $ = load(html); + content += $('#chaptercontent') + .html() + .replace(/
|请收藏.*?<\/p>/g, '\n') + .trim(); + id = $('a.Readpage_down')[0].attribs.href; + if (id.indexOf('_') < 0) break; + } + return { + content: content + '\n\n', + }; + } catch (e) { + return { + content: '', + }; + } +} + +async function search(wd, quick, pg) { + const cook = await req(`${url}/user/hm.html?q=${encodeURIComponent(wd)}`, { + headers: { + accept: 'application/json', + 'User-Agent': MOBILE_UA, + Referer: `${url}/s?q=${encodeURIComponent(wd)}`, + }, + }); + const set_cookie = _.isArray(cook.headers['set-cookie']) ? cook.headers['set-cookie'].join(';;;') : cook.headers['set-cookie']; + const cks = set_cookie.split(';;;'); + const cookie = {}; + for (const c of cks) { + const tmp = c.trim(); + const idx = tmp.indexOf('='); + const k = tmp.substr(0, idx); + const v = tmp.substr(idx + 1, tmp.indexOf(';') - idx - 1); + cookie[k] = v; + } + const resp = await req(`${url}/user/search.html?q=${encodeURIComponent(wd)}&so=undefined`, { + headers: { + accept: 'application/json', + 'User-Agent': MOBILE_UA, + cookie: 'hm=' + cookie['hm'], + Referer: `${url}/s?q=${encodeURIComponent(wd)}`, + }, + }); + var data = JSON.parse(resp.content); + let books = []; + for (const book of data) { + books.push({ + book_id: book.url_list, + book_name: book.articlename, + book_pic: book.url_img, + book_remarks: book.author, + }); + } + return { + tline: 2, + list: books, + }; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + category: category, + detail: detail, + play: play, + search: search, + }; +}