123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /*
- * @File : yiqikan.js
- * @Author : jade
- * @Date : 2024/3/19 18:45
- * @Email : jadehh@1ive.com
- * @Software : Samples
- * @Desc : 一起看 (已失效)
- */
- import * as Utils from "../lib/utils.js";
- import {_, load} from "../lib/cat.js";
- import {VodDetail, VodShort} from "../lib/vod.js";
- import {Spider} from "./spider.js";
- class YiQiKanSpider extends Spider {
- constructor() {
- super();
- this.siteUrl = "https://api.gquaxhce.com"
- this.nextObj = {}
- }
- async init(cfg) {
- await super.init(cfg);
- this.danmuStaus = true;
- }
- getRequestId() {
- let strArr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
- let sb = "";
- for (let i = 0; i < 32; i++) {
- sb = sb + strArr[_.random(0, strArr.length)];
- }
- return sb.toString();
- }
- getName() {
- return `🛫┃一起看┃🛫`
- }
- getAppName() {
- return "一起看"
- }
- getJSName() {
- return "yiqikan"
- }
- getType() {
- return 3
- }
- getHeader() {
- let headers = super.getHeader();
- headers["Connection"] = "keep-alive"
- headers["Host"] = "api.gquaxhce.com"
- return headers
- }
- getParams(ob_params = null) {
- let requestId = this.getRequestId()
- let appid = "e6ddefe09e0349739874563459f56c54"
- let reqDomain = "m.yqktv888.com"
- let udid = Utils.getUUID();
- let appKey = "3359de478f8d45638125e446a10ec541"
- let params = {"appId": appid}
- if (!_.isEmpty(ob_params)) {
- for (const ob_key of Object.keys(ob_params)) {
- if (!_.isEmpty(ob_params[ob_key]) && (ob_key === "epId" || ob_key === "nextCount" || ob_key === "nextVal" || ob_key === "queryValueJson" || ob_key === "keyword")) {
- params[ob_key] = ob_params[ob_key]
- }
- }
- }
- params["reqDomain"] = reqDomain
- params["requestId"] = requestId
- params["udid"] = udid
- if (!_.isEmpty(ob_params)) {
- for (const ob_key of Object.keys(ob_params)) {
- if (!_.isEmpty(ob_params[ob_key]) && (ob_key === "vodId" || ob_key === "vodResolution")) {
- params[ob_key] = ob_params[ob_key]
- }
- }
- }
- params["appKey"] = appKey
- params["sign"] = md5X(Utils.objectToStr(params))
- delete params["appKey"]
- return params
- }
- async setClasses() {
- let response = JSON.parse(await this.post(this.siteUrl + "/v1/api/home/header", this.getParams(), this.getHeader(), "raw"))
- for (const data of response["data"]["channelList"]) {
- this.classes.push(this.getTypeDic(data["channelName"], data["channelId"]))
- }
- }
- async parseVodShortListFromJson(obj) {
- let vod_list = []
- for (const data of obj) {
- let vodShort = new VodShort()
- vodShort.vod_id = data["vodId"]
- vodShort.vod_name = data["vodName"]
- vodShort.vod_remarks = data["watchingCountDesc"]
- vodShort.vod_pic = data["coverImg"]
- vod_list.push(vodShort)
- }
- return vod_list
- }
- async parseVodDetailfromJson(obj) {
- let vodDetail = new VodDetail()
- vodDetail.vod_name = obj["vodName"]
- vodDetail.vod_content = obj["intro"]
- vodDetail.vod_area = obj["areaName"]
- vodDetail.vod_year = obj["year"]
- vodDetail.type_name = obj["channelName"]
- vodDetail.vod_remarks = "评分:" + obj["score"].toString()
- vodDetail.vod_pic = obj["coverImg"]
- vodDetail.vod_actor = Utils.objToList(obj["actorList"], "vodWorkerName")
- vodDetail.vod_director = Utils.objToList(obj["directorList"], "vodWorkerName")
- let playlist = {}
- for (const playDic of obj["playerList"]) {
- let vodItems = []
- for (const item of playDic["epList"]) {
- let playId = item["epId"]
- let playName = item["epName"]
- vodItems.push(playName + "$" + playId)
- }
- playlist[playDic["playerName"]] = vodItems.join("#")
- }
- vodDetail.vod_play_url = _.values(playlist).join('$$$');
- vodDetail.vod_play_from = _.keys(playlist).join('$$$');
- return vodDetail
- }
- async setHomeVod() {
- let response = await this.post(this.siteUrl + "/v1/api/home/body", this.getParams(), this.getHeader(), "raw")
- let resJson = JSON.parse(response)
- if (resJson["result"]) {
- this.homeVodList = await this.parseVodShortListFromJson(resJson["data"]["hotVodList"])
- } else {
- await this.jadeLog.error(`获取首页失败,失败原因为:${resJson["msg"]}`)
- }
- }
- async setCategory(tid, pg, filter, extend) {
- let url = this.siteUrl + "/v1/api/search/queryNow"
- this.limit = 18
- let ob_params = {}
- if (!_.isEmpty(this.nextObj[tid])) {
- ob_params["nextVal"] = this.nextObj[tid]
- }
- ob_params["nextCount"] = 18
- ob_params["queryValueJson"] = JSON.stringify([{
- "filerName": "channelId", "filerValue": tid.toString()
- }]).replaceAll("\\\\", "")
- let response = await this.post(url, this.getParams(ob_params), this.getHeader(), "raw")
- let resJson = JSON.parse(response)
- if (resJson["result"]) {
- if (resJson["data"]["hasNext"]) {
- this.nextObj[tid] = resJson["data"]["nextVal"]
- }
- this.vodList = await this.parseVodShortListFromJson(resJson["data"]["items"])
- } else {
- await this.jadeLog.error(`获取分类失败,失败原因为:${resJson["msg"]}`)
- }
- }
- async setDetail(id) {
- let url = this.siteUrl + "/v1/api/vodInfo/detail"
- let ob_params = {"vodId": id}
- let response = await this.post(url, this.getParams(ob_params), this.getHeader(), "raw")
- let resJson = JSON.parse(response)
- if (resJson["result"]) {
- this.vodDetail = await this.parseVodDetailfromJson(resJson["data"])
- } else {
- await this.jadeLog.error(`获取详情失败,失败原因为:${resJson["msg"]}`)
- }
- }
- async setPlay(flag, id, flags) {
- let url = this.siteUrl + "/v1/api/vodInfo/getEpDetail"
- let ob_params = {"epId": id}
- let ep_detail_response = await this.post(url, this.getParams(ob_params), this.getHeader(), "raw")
- let ep_detail_resJson = JSON.parse(ep_detail_response)
- let vodResolution = "1";
- if (ep_detail_resJson["result"]) {
- if (ep_detail_resJson["data"]["resolutionItems"].length > 0) {
- vodResolution = ep_detail_resJson["data"]["resolutionItems"].slice(-1)[0]["vodResolution"].toString()
- let playUrl = this.siteUrl + "/v1/api/vodInfo/getPlayUrl"
- let play_params = {"epId": id, "vodResolution": vodResolution}
- let play_response = await this.post(playUrl, this.getParams(play_params), this.getHeader(), "raw")
- let play_resJson = JSON.parse(play_response)
- if (play_resJson["result"]) {
- this.playUrl = play_resJson["data"]
- }else{
- await this.jadeLog.error(`获取播放链接失败,失败原因为:${ep_detail_resJson["msg"]}`)
- }
- }
- } else {
- await this.jadeLog.error(`获取播放详情失败,失败原因为:${ep_detail_resJson["msg"]}`)
- }
- }
- async setSearch(wd, quick) {
- let url = this.siteUrl + "/v1/api/search/search"
- let ob_prams = {"nextCount":15,"nextVal":"","keyword":wd}
- let esponse = await this.post(url, this.getParams(ob_prams), this.getHeader(), "raw")
- let resJson = JSON.parse(esponse)
- if (resJson["result"]) {
- this.vodList = await this.parseVodShortListFromJson(resJson["data"]["items"])
- } else {
- await this.jadeLog.error(`获取详情失败,失败原因为:${resJson["msg"]}`)
- }
- }
- }
- let spider = new YiQiKanSpider()
- 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,
- search: search,
- proxy: proxy
- };
- }
- export {spider}
|