xxxx
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
* @File : gitcafe.js
|
||||
* @Author : jade
|
||||
* @Date : 2024/1/18 9:56
|
||||
* @Email : jadehh@1ive.com
|
||||
* @Software : Samples
|
||||
* @Desc : 阿里纸条
|
||||
*/
|
||||
|
||||
import {_, load} from "../lib/cat.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
|
||||
class GitCafeSpider extends Spider {
|
||||
constructor() {
|
||||
super();
|
||||
this.siteUrl = "https://ali.gitcafe.ink"
|
||||
}
|
||||
|
||||
getName() {
|
||||
return "🦊┃阿里纸条┃🦊"
|
||||
}
|
||||
|
||||
getAppName() {
|
||||
return "阿里纸条"
|
||||
}
|
||||
|
||||
getJSName() {
|
||||
return "gitcafe"
|
||||
}
|
||||
|
||||
getType() {
|
||||
return 3
|
||||
}
|
||||
|
||||
async getApiUrl() {
|
||||
let html = await this.fetch(this.siteUrl, null, this.getHeader())
|
||||
if (!_.isEmpty(html)) {
|
||||
let paper_js_url = Utils.getStrByRegex(/<script src='(.*?)'><\/script>/, html)
|
||||
let paper_js_content = await this.fetch(paper_js_url, null, this.getHeader())
|
||||
return {
|
||||
"api": "https:" + Utils.getStrByRegex(/ return '(.*?)' \+ /, paper_js_content) + new Date().getTime(),
|
||||
"search_api": Utils.getStrByRegex(/const SEARCH_API = '(.*?)';/, paper_js_content)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async getContentJson() {
|
||||
let url_json = await this.getApiUrl()
|
||||
let content = await this.fetch(url_json["api"], null, this.getHeader())
|
||||
this.search_api = url_json["search_api"]
|
||||
if (!_.isEmpty(content)) {
|
||||
return JSON.parse(content)
|
||||
}
|
||||
}
|
||||
|
||||
async spiderInit() {
|
||||
this.content_json = await this.getContentJson()
|
||||
this.token_dic = await this.load_cache()
|
||||
}
|
||||
|
||||
async init(cfg) {
|
||||
await this.spiderInit()
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
}
|
||||
|
||||
|
||||
async parseClassFromJson(obj) {
|
||||
let data_list = Object.keys(obj["data"]).slice(0, 19)
|
||||
for (const data_key of data_list) {
|
||||
this.classes.push({"type_name": obj["data"][data_key]["name"], "type_id": data_key})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async parseVodShortListFromJson(obj) {
|
||||
let vod_list = []
|
||||
let class_id_list = this.getClassIdList()
|
||||
for (const data_obj of obj) {
|
||||
let vodShort = new VodShort()
|
||||
if (class_id_list.includes(data_obj["cat"])) {
|
||||
vodShort.vod_id = JSON.stringify(data_obj)
|
||||
vodShort.vod_name = data_obj["title"]
|
||||
vodShort.vod_remarks = data_obj["date"]
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
}
|
||||
return vod_list
|
||||
|
||||
}
|
||||
|
||||
async parseVodDetailfromJson(obj) {
|
||||
let classNamesList = this.getClassNameList()
|
||||
let classIdList = this.getClassIdList()
|
||||
let vodDetail = new VodDetail()
|
||||
vodDetail.vod_name = obj["title"]
|
||||
vodDetail.vod_remarks = obj["creatime"] ?? obj["date"]
|
||||
vodDetail.type_name = classNamesList[classIdList.indexOf(obj["cat"])]
|
||||
vodDetail.vod_content = obj["des"]
|
||||
let ali_url = "https://www.aliyundrive.com/s/" + obj["alikey"]
|
||||
let aliVodDetail = await detailContent([ali_url])
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
async setClasses() {
|
||||
await this.parseClassFromJson(this.content_json)
|
||||
}
|
||||
|
||||
|
||||
async setHomeVod() {
|
||||
this.homeVodList = await this.parseVodShortListFromJson(this.content_json["info"]["new"])
|
||||
}
|
||||
|
||||
|
||||
async setDetail(id) {
|
||||
let content_json = JSON.parse(id)
|
||||
this.vodDetail = await this.parseVodDetailfromJson(content_json)
|
||||
}
|
||||
|
||||
async setCategory(tid, pg, filter, extend) {
|
||||
this.vodList = await this.parseVodShortListFromJson(this.content_json["data"][tid]["catdata"])
|
||||
}
|
||||
|
||||
async setSearch(wd, quick) {
|
||||
await this.refreshToken();
|
||||
let params = {
|
||||
"action": "search", "from": "web", "token": this.token_dic["token"], "keyword": wd
|
||||
}
|
||||
let content = await this.post(this.search_api, params, this.getHeader())
|
||||
if (!_.isEmpty(content)) {
|
||||
let content_json = JSON.parse(content)
|
||||
this.vodList = await this.parseVodShortListFromJson(content_json["data"])
|
||||
}
|
||||
}
|
||||
|
||||
async refreshToken() {
|
||||
let this_time = new Date().getTime()
|
||||
if (_.isEmpty(this.token_dic["token"])) {
|
||||
await this.get_token()
|
||||
await this.jadeLog.debug("Token为空,刷新Token")
|
||||
} else if (this_time - parseInt(this.token_dic["date"]) > 24 * 60 * 60 * 1000) {
|
||||
await this.jadeLog.debug(`Token到期,上次获取Token时间为:${this_time},当前时间为:${parseInt(this.token_dic["date"])},刷新Token`)
|
||||
await this.get_token()
|
||||
} else {
|
||||
await this.jadeLog.debug(`Token仍然有效,无需刷新`, true)
|
||||
}
|
||||
}
|
||||
|
||||
async get_token() {
|
||||
|
||||
try {
|
||||
let params = {
|
||||
"action": "get_token", "from": "web",
|
||||
}
|
||||
let content = await this.post(this.search_api, params, this.getHeader())
|
||||
if (!_.isEmpty(content)) {
|
||||
let content_json = JSON.parse(content)
|
||||
let this_time = new Date().getTime()
|
||||
this.token_dic["token"] = content_json["data"]
|
||||
this.token_dic["date"] = this_time.toString()
|
||||
await this.write_cache()
|
||||
}
|
||||
} catch (e) {
|
||||
await this.jadeLog.error("获取Token失败,失败原因为:" + e)
|
||||
}
|
||||
}
|
||||
|
||||
async write_cache() {
|
||||
await local.set("gitcafe_token", "token", JSON.stringify(this.token_dic))
|
||||
}
|
||||
|
||||
async load_cache() {
|
||||
try {
|
||||
let str = await local.get("gitcafe_token", "token")
|
||||
return JSON.parse(str)
|
||||
} catch (e) {
|
||||
return {"token": "", "date": ""}
|
||||
}
|
||||
}
|
||||
|
||||
async play(flag, id, flags) {
|
||||
return await playContent(flag, id, flags);
|
||||
}
|
||||
}
|
||||
|
||||
let spider = new GitCafeSpider()
|
||||
|
||||
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}
|
||||
Reference in New Issue
Block a user