226 lines
7.2 KiB
JavaScript
226 lines
7.2 KiB
JavaScript
/*
|
||
* @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("<strong>", "").replaceAll("</strong>", "")
|
||
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} |