123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import { Crypto, load, _ } from './lib/cat.js';
- let siteKey = '';
- let siteType = 0;
- let siteUrl = 'https://gh.7761.cf/https://www.histar.tv/';
- let apiUrl = 'https://aws.ulivetv.net/v3/web/api/filter';
- let detailUrl = siteUrl + 'vod/detail/';
- let data = '_next/data/';
- let CHROME = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36';
- let headers = {
- 'User-Agent': CHROME,
- 'Cookie': 'userIP=127.0.0.1; aws-waf-token=',
- 'Referer': siteUrl,
- }
- let ver = '';
- let cates = {
- 'movie': '电影',
- 'drama': '电视剧',
- 'animation': '动漫',
- 'variety': '综艺',
- 'documentary': '纪录片',
- };
- let recommendVideos = [];
- async function request(reqUrl, postData, agentSp, get) {
- let res = await req(reqUrl, {
- method: get ? 'get' : 'post',
- headers: headers || {},
- data: postData || {},
- postType: get ? '' : 'form',
- });
- let content = res.content;
- return content;
- }
- async function init(cfg) {
- siteKey = cfg.skey;
- siteType = cfg.stype;
- if (cfg.ext) {
- siteUrl = cfg.ext;
- detailUrl = siteUrl + 'vod/detail/';
- }
-
- ver = await getVer();
- }
- async function getVer() {
- const $ = load(await request(siteUrl));
- let data = JSON.parse($($('script#__NEXT_DATA__')[0]).text()).props.pageProps.cards;
- let videos = [];
- data.forEach((e) => {
- if(e.name != '电视直播') {
- e.cards.forEach((vod) => {
- videos.push({
- vod_id: vod.id,
- vod_name: vod.name,
- vod_pic: vod.img,
- vod_remarks: vod.countStr,
- });
- })
- }
- });
- recommendVideos = videos;
- for(const n of $('script')) {
- if(n.attribs['src'].indexOf('buildManifest.js') > 0) {
- return n.attribs['src'].split('/')[3];
- }
- }
- }
- async function home(filter) {
- let classes = [];
- let filters = {};
- for(let cate in cates) {
- let condition = [];
- let labels = [];
- let areas = [];
- let years = [];
- labels.push({n: '全部',v: '',});
- areas.push({n: '全部',v: '',});
- years.push({n: '全部',v: '',});
-
- classes.push({
- type_id: cate,
- type_name: cates[cate],
- });
- const $ = load(await request(siteUrl + cate + '/all/all/all'));
- let data = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.filterCondition;
- data.label.forEach((c) => {
- labels.push({n: c[0],v: c[1],});
- });
- data.country.forEach((c) => {
- areas.push({n: c,v: c,});
- });
- data.time.reverse().forEach((c) => {
- if (c > 2000) {
- years.push({n: c.toString(),v: c.toString(),});
- }
- });
- condition.push({
- key: 'type',
- name: '类型',
- value: labels,
- },{
- key: 'area',
- name: '地区',
- value: areas,
- },{
- key: 'year',
- name: '年份',
- value: years,
- });
- filters[cate] = condition;
- }
- return JSON.stringify({
- class: classes,
- filters: filters,
- });
- }
- async function homeVod() {
- return JSON.stringify({
- list: recommendVideos,
- });
- }
- async function category(tid, pg, filter, ext){
- if (pg <= 0) pg = 1;
- let param = {pageSize: 16, page:parseInt(pg), chName:cates[tid],};
- if(ext['year']) {
- param['startTime'] = parseInt(ext['year']);
- param['endTime'] = parseInt(ext['year']);
- }
- if(ext['type']) param['label'] = ext['type'];
- if(ext['area']) param['area'] = ext['area'];
- let res = await req(apiUrl,{
- method: 'post',
- headers: {'Content-Type': 'application/json'},
- data: param,
- postType: '',
- });
- // console.log('res ', res.content);
- let data = JSON.parse(res.content).data.list;
- let videos = [];
- data.forEach((vod) => {
- videos.push({
- vod_id: vod.id,
- vod_name: vod.name,
- vod_pic: vod.img,
- vod_remarks: vod.countStr,
- });
- });
- return JSON.stringify({
- list: videos
- });
- }
- async function detail(id) {
- const $ = load(await request(detailUrl + id));
- let dd = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.pageData;
- let vod = {
- vod_id: id,
- vod_year: dd.time,
- vod_name: dd.name,
- vod_area: dd.country,
- vod_actor: dd.actor,
- vod_remarks: dd.countStr,
- vod_content: dd.desc,
- vod_director: dd.director,
- type_name: dd.label,
- vod_play_from: '玩偶成群',
- }
- if(dd.videos.length > 0) {
- let playUrls = [];
- dd.videos.forEach(e => {
- playUrls.push(e.eporder + '$' + e.purl);
- });
- vod.vod_play_url = playUrls.join('#');
- } else {
- let data = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.videosGroup;
- let playUrls = [];
- let playFroms = [];
- data.forEach(e => {
- playFroms.push(e.name);
- let groupUrls = [];
- e.videos.forEach(item => {
- groupUrls.push(item.epInfo + '$' + item.purl);
- });
- playUrls.push(groupUrls.join('#'));
- });
- vod.vod_play_from = playFroms.join('$$$');
- vod.vod_play_url = playUrls.join('$$$');
- }
- return JSON.stringify({
- list: [vod],
- })
- }
- async function search(wd, quick, pg) {
- let url = siteUrl + data + ver + '/search.json?word=' + encodeURIComponent(wd);
- let cards = JSON.parse(await request(url)).pageProps.initList;
- let videos = [];
- cards.forEach(e => {
- videos.push({
- vod_id: e.id,
- vod_name: e.name,
- vod_pic: e.picurl,
- vod_remarks: e.countStr,
- });
- });
- return JSON.stringify({
- list: videos,
- });
- }
- async function play(flag, id, flags) {
- return JSON.stringify({
- parse: 0,
- url: id,
- });
- }
- export function __jsEvalReturn() {
- return {
- init: init,
- home: home,
- homeVod: homeVod,
- category: category,
- detail: detail,
- play: play,
- search: search,
- };
- }
|