6/18/ds/18js/js/aliyunpanshare.js

226 lines
7.2 KiB
JavaScript
Raw 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 : 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}