123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- import { Crypto, load, _, dayjs } from './lib/cat.js';
- let key = 'jiohub';
- let url = 'https://jiohub.top';
- let siteKey = '';
- let siteType = 0;
- const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
- const cookie = {};
- async function request(reqUrl, referer, mth, data, hd) {
- const headers = {
- 'User-Agent': UA,
- Cookie: _.map(cookie, (value, key) => {
- return `${key}=${value}`;
- }).join(';'),
- };
- if (referer) headers.referer = encodeURIComponent(referer);
- let res = await req(reqUrl, {
- method: mth || 'get',
- headers: headers,
- data: data,
- postType: mth === 'post' ? 'form' : '',
- });
- return res.content;
- }
- // cfg = {skey: siteKey, ext: extend}
- async function init(cfg) {
- siteKey = cfg.skey;
- siteType = cfg.stype;
- }
- async function home(filter) {
- const html = await request(url);
- const $ = load(html);
- const series = $('.nav-list a[href*=/video]');
- let classes = _.map(series, (s) => {
- let typeId = s.attribs['href'];
- let typeName = typeId.match(/\/video\/(.*)\?/)[1];
- typeName = decodeURIComponent(typeName);
- return {
- type_id: typeName,
- type_name: typeName,
- };
- });
- return JSON.stringify({
- class: classes,
- });
- }
- async function homeVod() {
- return '{}';
- }
- async function category(tid, pg, filter, extend) {
- let page = pg || 1;
- if (page == 0) page = 1;
- const link = url + '/video/' + tid + "?page=" + page + '&size=18';
- const html = await request(link);
- const $ = load(html);
- const items = $('div.content-body > a');
- let videos = _.map(items, (item) => {
- const img = $(item).find('img:first')[0].attribs['src'];
- const a = item.attribs['href'].match(/\/watch\/(.*)/)[1];
- const n = ($(item).find('p.card-title')[0]).children[0].data;
- let speed = ($(item).find('p.item-speed')[0]).children[0].data || '';
- const score = ($(item).find('p.score')[0]).children[0].data || '';
- if (speed == tid) speed = '';
- return {
- vod_id: a,
- vod_name: n,
- vod_pic: img,
- vod_remarks: speed || score || '',
- };
- });
- let total = 18;
- const pag = $('ui-pagination');
- if (pag.length > 0) {
- try {
- total = parseInt(pag[0].attribs['total']);
- } catch (error) {
- }
- }
- return JSON.stringify({
- page: page,
- pagecount: _.ceil(total / 18),
- list: videos,
- });
- }
- function stripHtmlTag(src) {
- return src
- .replace(/<\/?[^>]+(>|$)/g, '')
- .replace(/&.{1,5};/g, '')
- .replace(/\s{2,}/g, ' ');
- }
- async function detail(id) {
- const html = await request(url + '/watch/' + id);
- const $ = load(html);
- const detail = $('div.content-detail > p');
- let vod = {
- vod_id: id,
- vod_content: stripHtmlTag($('div.content-detail span.detail-sketch').html()).trim(),
- };
- for (const info of detail) {
- const i = $(info).text().trim();
- if (i.startsWith('地区:')) {
- vod.vod_area = i.substring(3);
- } else if (i.startsWith('年份:')) {
- vod.vod_year = i.substring(3);
- } else if (i.startsWith('类型:')) {
- vod.vod_type = i.substring(3);
- } else if (i.startsWith('导演:')) {
- vod.vod_director = i.substring(3);
- } else if (i.startsWith('主演:')) {
- vod.vod_actor = i.substring(3);
- } else if (i.startsWith('语言:')) {
- vod.vod_lang = i.substring(3);
- }
- }
- const urls = html.match(/let urls = \"(.*)\";/)[1].replace(/_/g, '/').replace(/-/g, '+');
- var key = Crypto.enc.Utf8.parse("cf2d1a-6a4d-9ef8");
- var playlist = Crypto.AES.decrypt(urls, key, { iv: key, padding: Crypto.pad.Pkcs7 });
- playlist = Crypto.enc.Utf8.stringify(playlist).split('\n');
- vod.vod_play_from = 'JOJO';
- vod.vod_play_url = playlist.join('#');
- return JSON.stringify({
- list: [vod],
- });
- }
- function playPid() {
- var key = Crypto.enc.Utf8.parse("ba0-d4g5-45eb-c2ba0-d4g5-45eb-cs");
- var iv = Crypto.enc.Hex.parse("00000000000000000000000000000000");
- var pid = Crypto.AES.encrypt(dayjs().format('YYYY-MM-DD HH:mm'), key, { iv: iv, padding: Crypto.pad.Pkcs7 });
- pid = pid.toString().replace(/\+/g, '-');
- return pid;
- }
- async function play(flag, id, flags) {
- return JSON.stringify({
- parse: 0,
- url: id + '?pid=' + playPid(),
- header: {
- 'User-Agent': UA,
- },
- });
- }
- async function search(wd, quick, pg) {
- let page = pg || 1;
- if (page == 0) page = 1;
- const link = url + '/video/search?q=' + wd + "&page=" + page + '&size=18&pid=' + playPid();
- const html = await request(link);
- const $ = load(html);
- const items = $('div.content-body > a');
- let videos = _.map(items, (item) => {
- const img = $(item).find('img:first')[0].attribs['src'];
- const a = item.attribs['href'].match(/\/watch\/(.*)/)[1];
- const n = ($(item).find('p.card-title')[0]).children[0].data;
- let speed = ($(item).find('p.item-speed')[0]).children[0].data || '';
- const score = ($(item).find('p.score')[0]).children[0].data || '';
- if (speed == '电影') speed = '';
- return {
- vod_id: a,
- vod_name: n,
- vod_pic: img,
- vod_remarks: speed || score || '',
- };
- });
- let total = 18;
- const pag = $('ui-pagination');
- if (pag.length > 0) {
- try {
- total = parseInt(pag[0].attribs['total']);
- } catch (error) {
- }
- }
- return JSON.stringify({
- page: page,
- pagecount: _.ceil(total / 18),
- list: videos,
- });
- }
- export function __jsEvalReturn() {
- return {
- init: init,
- home: home,
- homeVod: homeVod,
- category: category,
- detail: detail,
- play: play,
- search: search,
- };
- }
|