/* * @File : aliyunpanshare.js * @Author : jade * @Date : 2024/1/26 13:06 * @Email : jadehh@1ive.com * @Software : Samples * @Desc : 阿里云盘分享 */ import {_, load} from '../lib/cat.js'; import {VodDetail, VodShort} from "../lib/vod.js" import {detailContent, initAli, playContent} from "../lib/ali.js"; import * as Utils from "../lib/utils.js"; import {Spider} from "./spider.js"; import {patternAli} from "../lib/utils.js"; let remark_list = ["4k", "4K"] class AliyunpanShare extends Spider { constructor() { super(); this.siteUrl = 'https://www.alypw.com'; } async init(cfg) { await super.init(cfg); await initAli(this.cfgObj["token"]); } getName() { return "🥏‍┃阿里云盘分享┃🥏‍" } getAppName() { return "阿里云盘分享" } getJSName() { return "aliyunpanshare" } getType() { return 3 } getRemarks(name, title) { if (_.isEmpty(name)) { for (const remark of remark_list) { if (title.indexOf(remark) > -1) { return remark } } } else { return name } } parseVodName(name) { let vod_name = Utils.getStrByRegex(/\[阿里云盘](.*?) /, name) if (name.indexOf("合集") > -1) { return "" } if (_.isEmpty(vod_name)) { vod_name = Utils.getStrByRegex(/\[阿里云盘](.*?)(/, name) } if (vod_name.indexOf("[") > -1) { vod_name = vod_name.split("[")[0] } if (vod_name.indexOf("【") > -1) { vod_name = vod_name.split("【")[0] } if (vod_name === "4K") { return "" } return vod_name } async parseVodShortListFromDoc($) { let vod_list = [] let vodElements = $($("[class=\"hometab\"]").find("[class=\"box\"]")).find("li") for (const vodElement of vodElements) { let ele = $(vodElement).find("[class=\"imgr\"]")[0] let vodShort = new VodShort(); vodShort.vod_id = $(ele).find("a")[0].attribs["href"] let name = $(ele).find("a")[0].attribs["title"] vodShort.vod_name = this.parseVodName(name) vodShort.vod_pic = $(vodElement).find("img")[0].attribs["src"] vodShort.vod_remarks = this.getRemarks(Utils.getStrByRegex(/【(.*?)】/, name), name) vod_list.push(vodShort) } return vod_list } async parseVodShortListFromDocByCategory($) { let vod_list = [] let mainElement = $("[class=\"main container\"]") let vodElements = $($(mainElement).find("[class=\"list\"]")).find("li") if (vodElements.length === 0) { vodElements = $(mainElement).find("li") } for (const vodElement of vodElements) { let name = $(vodElement).find("img")[0].attribs["alt"].replaceAll("", "").replaceAll("", "") let vodShort = new VodShort(); vodShort.vod_id = $(vodElement).find("a")[0].attribs["href"] vodShort.vod_name = this.parseVodName(name) vodShort.vod_pic = $(vodElement).find("img")[0].attribs["src"] vodShort.vod_remarks = this.getRemarks(Utils.getStrByRegex(/【(.*?)】/, name), name) if (!_.isEmpty(vodShort.vod_name)) { vod_list.push(vodShort) } } return vod_list } async parseVodDetailFromDoc($) { let mainElements = $("[class=\"mainl\"]") let name = $($(mainElements).find("[class=\"title\"]")[0]).text() let vodDetail = new VodDetail(); vodDetail.vod_name = Utils.getStrByRegex(/\[阿里云盘](.*?) /, name) vodDetail.vod_remarks = this.getRemarks(Utils.getStrByRegex(/【(.*?)】/, name), name) let articleElement = $(mainElements).find("[class=\"article_content\"]") vodDetail.vod_pic = $(articleElement).find("p>img")[0].attribs["src"] let articleElements = $(articleElement).find("p") let articleContent = "" for (const articleEle of articleElements) { articleContent = articleContent + $(articleEle).text() + "\n" } let share_ali_url_list = [] let share_url_list = Utils.getStrByRegex(Utils.patternAli, articleContent).split("\n") for (const share_url of share_url_list) { let matches = share_url.match(Utils.patternAli); if (!_.isEmpty(matches)) share_ali_url_list.push(matches[1]) } let aliVodDetail = await detailContent(share_ali_url_list) vodDetail.vod_play_url = aliVodDetail.vod_play_url vodDetail.vod_play_from = aliVodDetail.vod_play_from vodDetail.type_name = Utils.getStrByRegex(/标签(.*?)\n/, articleContent).replaceAll(":", "") vodDetail.vod_content = Utils.getStrByRegex(/描述(.*?)\n/, articleContent).replaceAll(":", "") return vodDetail } async setClasses() { let $ = await this.getHtml() let typeElements = $("[id^='navbar-category']").find("a") let key_list = ["影", "剧", "4K", "视", "音", "演", "动漫"] for (const typeElement of typeElements) { let type_name = $(typeElement).text() let type_id = typeElement.attribs["href"] let is_show = false for (const key of key_list) { if (type_name.indexOf(key) > -1) { is_show = true } } if (is_show) { this.classes.push(this.getTypeDic(type_name, type_id)) } } } async setHomeVod() { let $ = await this.getHtml() this.homeVodList = await this.parseVodShortListFromDoc($) } async setCategory(tid, pg, filter, extend) { let cateUrl = tid.split(".html")[0] + "_" + pg + ".html" let $ = await this.getHtml(cateUrl) this.vodList = await this.parseVodShortListFromDocByCategory($) } async setDetail(id) { let $ = await this.getHtml(id) this.vodDetail = await this.parseVodDetailFromDoc($) } async setPlay(flag, id, flags) { let playObjStr = await playContent(flag, id, flags); this.playUrl = JSON.parse(playObjStr)["url"] } async setSearch(wd, quick) { let url = this.siteUrl + `/search.php?q=${wd}` let $ = await this.getHtml(url) this.vodList = await this.parseVodShortListFromDocByCategory($) } } let spider = new AliyunpanShare() 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) } export function __jsEvalReturn() { return { init: init, home: home, homeVod: homeVod, category: category, detail: detail, play: play, search: search, }; } export {spider}