6/18/ds/18js/js/jianpian.js

491 lines
16 KiB
JavaScript

/*
* @File : jianpian.js
* @Author : jade
* @Date : 2024/1/15 10:32
* @Email : jadehh@1ive.com
* @Software : Samples
* @Desc : 完成荐片所有功能(添加弹幕)
*/
import {Spider} from "./spider.js";
import {_, load} from "../lib/cat.js";
import {VodDetail, VodShort} from "../lib/vod.js";
import * as Utils from "../lib/utils.js";
class JianPianSpider extends Spider {
constructor() {
super();
this.siteUrl = "http://api2.rinhome.com"
// this.siteUrl = "https://ownjpykxttjzuhy.jiesiwa.com"
}
getName() {
return "🌼┃荐片┃🌼"
}
getAppName() {
return "荐片"
}
getJSName() {
return "jianpian"
}
getType() {
return 3
}
getHeader() {
return {
"User-Agent": "jianpian-android/360",
"JPAUTH": "y261ow7kF2dtzlxh1GS9EB8nbTxNmaK/QQIAjctlKiEv",
"Referer": "www.jianpianapp.com"
}
}
async spiderInit(inReq=null) {
if (inReq !== null){
this.jsBase = await js2Proxy(inReq,"img",this.getHeader());
}else{
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', this.getHeader());
}
}
async init(cfg) {
await super.init(cfg);
this.danmuStaus = true
await this.spiderInit(null)
}
async parseVodShortListFromJson(data_list) {
let vod_list = [];
for (const data of data_list) {
let vodShort = new VodShort();
vodShort.vod_id = data["id"]
if (data["path"] !== undefined) {
if (!this.catOpenStatus) {
vodShort.vod_pic = data["path"] + "@Referer=www.jianpianapp.com@User-Agent=jianpian-version353@JPAUTH=y261ow7kF2dtzlxh1GS9EB8nbTxNmaK/QQIAjctlKiEv"
} else {
vodShort.vod_pic = this.jsBase + Utils.base64Encode(data["path"])
}
} else {
if (!this.catOpenStatus) {
vodShort.vod_pic = data["thumbnail"] + "@Referer=www.jianpianapp.com@User-Agent=jianpian-version353@JPAUTH=y261ow7kF2dtzlxh1GS9EB8nbTxNmaK/QQIAjctlKiE"
} else {
vodShort.vod_pic = this.jsBase + Utils.base64Encode(data["thumbnail"])
}
}
vodShort.vod_name = data["title"]
if (this.catOpenStatus) {
vodShort.vod_remarks = `评分:${data["score"]}`
} else {
if (data["playlist"] !== undefined) {
vodShort.vod_remarks = `评分:${data["score"]}` + " " + data["playlist"]["title"]
} else {
vodShort.vod_remarks = `评分:${data["score"]}`
}
}
vod_list.push(vodShort)
}
return vod_list
}
objToList(list, key, split_value = "*") {
let value_list = []
for (const dic of list) {
value_list.push(dic[key])
}
return value_list.join(split_value)
}
async parseVodDetailfromJson(obj) {
let vodDetail = new VodDetail();
vodDetail.vod_id = obj["id"]
vodDetail.vod_year = obj["year"]["title"]
vodDetail.vod_pic = this.jsBase + Utils.base64Encode(obj["thumbnail"])
vodDetail.type_name = obj["category"][0]["title"]
vodDetail.vod_name = obj["title"]
vodDetail.vod_content = obj["description"]
vodDetail.vod_area = obj["area"]["title"]
vodDetail.vod_director = this.objToList(obj["directors"], "name")
vodDetail.vod_actor = this.objToList(obj["actors"], "name")
vodDetail.vod_remarks = "评分:" + obj["score"]
let playKeyList = [{"btbo_downlist": "btbo"}, {"xunlei_downlist": "迅雷"}, {"m3u8_downlist": "m3u8"}, {"new_ftp_list": "new_ftp"}, {"new_m3u8_list": "new_m3u8"}]
let playlist = {}
let urlList = []
for (const dic of playKeyList) {
let key = Object.keys(dic)[0]
let value = Object.values(dic)[0]
if (obj[key].length > 0) {
let url_str_list = []
for (const dic of obj[key]) {
url_str_list.push(dic["title"] + "$" + dic["url"])
}
if (urlList.indexOf(url_str_list.join("#")) === -1) {
urlList.push(url_str_list.join("#"))
playlist[value] = url_str_list.join("#")
} else {
await this.jadeLog.warning(`key为:${key},播放链接重复,无需保存`)
}
}
}
vodDetail.vod_play_url = _.values(playlist).join('$$$');
vodDetail.vod_play_from = _.keys(playlist).join('$$$');
return vodDetail
}
async setClasses() {
let type_name_list = ["全部", "电影", "电视剧", "动漫", "综艺"]
let type_id_list = ["0", "1", "2", "3", "4"]
for (let i = 0; i < type_name_list.length; i++) {
let type_name = type_name_list[i]
let type_id = type_id_list[i]
this.classes.push({"type_name": type_name, "type_id": type_id})
}
}
async setFilterObj() {
this.filterObj = {
"0": [{
"key": "area", "name": "地區", "value": [{
"n": "全部", "v": "0"
}, {
"n": "国产", "v": "1"
}, {
"n": "中国香港", "v": "3"
}, {
"n": "中国台湾", "v": "6"
}, {
"n": "美国", "v": "5"
}, {
"n": "韩国", "v": "18"
}, {
"n": "日本", "v": "2"
}]
}, {
"key": "year", "name": "年份", "value": [{
"n": "全部", "v": "0"
}, {
"n": "2024", "v": "119"
}, {
"n": "2023", "v": "153"
}, {
"n": "2022", "v": "101"
}, {
"n": "2021", "v": "118"
}, {
"n": "2020", "v": "16"
}, {
"n": "2019", "v": "7"
}, {
"n": "2018", "v": "2"
}, {
"n": "2017", "v": "3"
}, {
"n": "2016", "v": "22"
}]
}, {
"key": "by", "name": "排序", "value": [{
"n": "热门", "v": "hot"
}, {
"n": "更新", "v": "updata"
}, {
"n": "评分", "v": "rating"
}]
}], "1": [{
"key": "area", "name": "地區", "value": [{
"n": "全部", "v": "0"
}, {
"n": "国产", "v": "1"
}, {
"n": "中国香港", "v": "3"
}, {
"n": "中国台湾", "v": "6"
}, {
"n": "美国", "v": "5"
}, {
"n": "韩国", "v": "18"
}, {
"n": "日本", "v": "2"
}]
}, {
"key": "year", "name": "年份", "value": [{
"n": "全部", "v": "0"
}, {
"n": "2024", "v": "119"
}, {
"n": "2023", "v": "153"
}, {
"n": "2022", "v": "101"
}, {
"n": "2021", "v": "118"
}, {
"n": "2020", "v": "16"
}, {
"n": "2019", "v": "7"
}, {
"n": "2018", "v": "2"
}, {
"n": "2017", "v": "3"
}, {
"n": "2016", "v": "22"
}]
}, {
"key": "by", "name": "排序", "value": [{
"n": "热门", "v": "hot"
}, {
"n": "更新", "v": "updata"
}, {
"n": "评分", "v": "rating"
}]
}], "2": [{
"key": "area", "name": "地區", "value": [{
"n": "全部", "v": "0"
}, {
"n": "国产", "v": "1"
}, {
"n": "中国香港", "v": "3"
}, {
"n": "中国台湾", "v": "6"
}, {
"n": "美国", "v": "5"
}, {
"n": "韩国", "v": "18"
}, {
"n": "日本", "v": "2"
}]
}, {
"key": "year", "name": "年份", "value": [{
"n": "全部", "v": "0"
}, {
"n": "2024", "v": "119"
}, {
"n": "2023", "v": "153"
}, {
"n": "2022", "v": "101"
}, {
"n": "2021", "v": "118"
}, {
"n": "2020", "v": "16"
}, {
"n": "2019", "v": "7"
}, {
"n": "2018", "v": "2"
}, {
"n": "2017", "v": "3"
}, {
"n": "2016", "v": "22"
}]
}, {
"key": "by", "name": "排序", "value": [{
"n": "热门", "v": "hot"
}, {
"n": "更新", "v": "updata"
}, {
"n": "评分", "v": "rating"
}]
}], "3": [{
"key": "area", "name": "地區", "value": [{
"n": "全部", "v": "0"
}, {
"n": "国产", "v": "1"
}, {
"n": "中国香港", "v": "3"
}, {
"n": "中国台湾", "v": "6"
}, {
"n": "美国", "v": "5"
}, {
"n": "韩国", "v": "18"
}, {
"n": "日本", "v": "2"
}]
}, {
"key": "year", "name": "年份", "value": [{
"n": "全部", "v": "0"
}, {
"n": "2024", "v": "119"
}, {
"n": "2023", "v": "153"
}, {
"n": "2022", "v": "101"
}, {
"n": "2021", "v": "118"
}, {
"n": "2020", "v": "16"
}, {
"n": "2019", "v": "7"
}, {
"n": "2018", "v": "2"
}, {
"n": "2017", "v": "3"
}, {
"n": "2016", "v": "22"
}]
}, {
"key": "by", "name": "排序", "value": [{
"n": "热门", "v": "hot"
}, {
"n": "更新", "v": "updata"
}, {
"n": "评分", "v": "rating"
}]
}], "4": [{
"key": "area", "name": "地區", "value": [{
"n": "全部", "v": "0"
}, {
"n": "国产", "v": "1"
}, {
"n": "中国香港", "v": "3"
}, {
"n": "中国台湾", "v": "6"
}, {
"n": "美国", "v": "5"
}, {
"n": "韩国", "v": "18"
}, {
"n": "日本", "v": "2"
}]
}, {
"key": "year", "name": "年份", "value": [{
"n": "全部", "v": "0"
}, {
"n": "2024", "v": "119"
}, {
"n": "2023", "v": "153"
}, {
"n": "2022", "v": "101"
}, {
"n": "2021", "v": "118"
}, {
"n": "2020", "v": "16"
}, {
"n": "2019", "v": "7"
}, {
"n": "2018", "v": "2"
}, {
"n": "2017", "v": "3"
}, {
"n": "2016", "v": "22"
}]
}, {
"key": "by", "name": "排序", "value": [{
"n": "热门", "v": "hot"
}, {
"n": "更新", "v": "updata"
}, {
"n": "评分", "v": "rating"
}]
}]
}
}
async setHomeVod() {
let content = await this.fetch(this.siteUrl + "/api/tag/hand?code=unknown601193cf375db73d&channel=wandoujia", null, this.getHeader())
if (!_.isEmpty(content)) {
let content_json = JSON.parse(content)
let data_list = content_json["data"][0]["video"]
this.homeVodList = await this.parseVodShortListFromJson(data_list)
}
}
async setCategory(tid, pg, filter, extend) {
let cateId = extend["cateId"] ?? tid
let area = extend["area"] ?? "0";
let year = extend["year"] ?? "0";
let by = extend["by"] ?? "hot";
this.limit = 24
let categoryUrl = this.siteUrl + `/api/crumb/list?area=${area}&category_id=${cateId}&page=${pg}&type=0&limit=24&sort=${by}&year=${year}`
await this.jadeLog.debug(`分类URL:${categoryUrl}`)
let content = await this.fetch(categoryUrl, null, this.getHeader())
if (!_.isEmpty(content)) {
let content_json = JSON.parse(content)
let data = content_json["data"]
this.vodList = await this.parseVodShortListFromJson(data)
}
}
async setDetail(id) {
let url = this.siteUrl + "/api/node/detail?channel=wandoujia&token=&id=" + id;
let content = await this.fetch(url, null, this.getHeader())
if (!_.isEmpty(content)) {
let content_json = JSON.parse(content);
let data_list = content_json["data"]
this.vodDetail = await this.parseVodDetailfromJson(data_list)
}
}
async setSearch(wd, quick) {
let url = this.siteUrl + "/api/video/search?page=1" + "&key=" + wd;
const content = await this.fetch(url, null, this.getHeader());
if (!_.isEmpty(content)) {
let content_json = JSON.parse(content)
let data_list = content_json["data"]
this.vodList = await this.parseVodShortListFromJson(data_list)
}
}
async setPlay(flag, id, flags) {
await this.jadeLog.debug(`播放链接为:${id}`)
this.playUrl = id
}
}
let spider = new JianPianSpider()
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)
}
async function proxy(segments, headers) {
return await spider.proxy(segments, headers)
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
proxy: proxy,
search: search,
};
}
export {spider}