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

226 lines
7.2 KiB
JavaScript
Raw Normal View History

2024-07-12 09:44:07 +03:00
/*
* @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}