222.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //import { Crypto,_} from './lib/cat.js';
  2. import { Crypto,load, _ } from 'assets://js/lib/cat.js';
  3. let siteUrl = 'http://103.88.35.251:8989';
  4. let siteKey = '';
  5. let siteType = 0;
  6. const PC_UA = 'Dalvik/1.6.0 (Linux; U; Android 12; HUAWEI Build/DCO-AL00)';
  7. let headers = {
  8. 'User-Agent': PC_UA,
  9. 'version': '1.6.0',
  10. };
  11. let keyId = 'aaef983207876d9959f11634db4abfff';
  12. let parseMap = {};
  13. async function request(reqUrl, data, header, method) {
  14. let res = await req(reqUrl, {
  15. method: method || 'get',
  16. data: data || '',
  17. headers: header || headers,
  18. postType: method === 'post' ? 'form-data' : '',
  19. timeout: 30000,
  20. });
  21. return res.content;
  22. }
  23. async function init(cfg) {
  24. siteKey = cfg.skey;
  25. siteType = cfg.stype;
  26. if (cfg.ext) siteUrl = cfg.ext;
  27. let url = `${siteUrl}/shark/api.php?action=configs`;
  28. try {
  29. let rets = await request(url,{},'','POST');
  30. let data = JSON.parse(aesEcbDecode(rets, 'aassddwwxxllsx1x'));
  31. keyId = data['config']['hulue'].split('&')[0];
  32. _.forEach(data['playerinfos'], item => {
  33. parseMap[item['playername']] = aesEcbDecode(item['playerjiekou'], keyId);
  34. });
  35. } catch(e){
  36. console.log(e);
  37. }
  38. }
  39. async function home(filter) {
  40. const classes = [{'type_id':'1','type_name':'电影'},{'type_id':'2','type_name':'连续剧'},{'type_id':'4','type_name':'动漫'},{'type_id':'3','type_name':'综艺'},{'type_id':'20','type_name':'短剧'}];
  41. return JSON.stringify({
  42. 'class': [{'type_id':'20','type_name':'连续剧'},{'type_id':'21','type_name':'电影'},{'type_id':'22','type_name':'动漫'},{'type_id':'23','type_name':'综艺'},{'type_id':'24','type_name':'短剧'}],
  43. 'filters': {
  44. "21":[{"name":"分类","key":"type","value":[{"v":"全部类型","n":"全部类型"},{"v":"喜剧","n":"喜剧"},{"v":"动作","n":"动作"},{"v":"爱情","n":"爱情"},{"v":"惊悚","n":"惊悚"},{"v":"犯罪","n":"犯罪"},{"v":"冒险","n":"冒险"},{"v":"科幻","n":"科幻"},{"v":"悬疑","n":"悬疑"},{"v":"剧情","n":"剧情"},{"v":"动画","n":"动画"},{"v":"武侠","n":"武侠"},{"v":"战争","n":"战争"},{"v":"歌舞","n":"歌舞"},{"v":"奇幻","n":"奇幻"},{"v":"传记","n":"传记"},{"v":"警匪","n":"警匪"},{"v":"历史","n":"历史"},{"v":"运动","n":"运动"},{"v":"伦理","n":"伦理"},{"v":"灾难","n":"灾难"},{"v":"西部","n":"西部"},{"v":"魔幻","n":"魔幻"},{"v":"枪战","n":"枪战"},{"v":"恐怖","n":"恐怖"},{"v":"记录","n":"记录"}]},{"name":"区域","key":"area","value":[{"v":"全部地区","n":"全部地区"},{"v":"大陆","n":"大陆"},{"v":"美国","n":"美国"},{"v":"香港","n":"香港"},{"v":"韩国","n":"韩国"},{"v":"英国","n":"英国"},{"v":"台湾","n":"台湾"},{"v":"日本","n":"日本"},{"v":"法国","n":"法国"},{"v":"意大利","n":"意大利"},{"v":"德国","n":"德国"},{"v":"西班牙","n":"西班牙"},{"v":"泰国","n":"泰国"},{"v":"其它","n":"其它"}]},{"name":"年份","key":"year","value":[{"v":"全部年代","n":"全部年代"},{"v":"2025","n":"2025"},{"v":"2024","n":"2024"},{"v":"2023","n":"2023"},{"v":"2022","n":"2022"},{"v":"2021","n":"2021"},{"v":"2020","n":"2020"},{"v":"2019","n":"2019"},{"v":"2018","n":"2018"},{"v":"2017","n":"2017"},{"v":"2016","n":"2016"},{"v":"2015","n":"2015"},{"v":"2014","n":"2014"},{"v":"2013","n":"2013"},{"v":"2012","n":"2012"},{"v":"2011","n":"2011"},{"v":"2010","n":"2010"},{"v":"2009","n":"2009"},{"v":"2008","n":"2008"},{"v":"2007","n":"2007"},{"v":"2006","n":"2006"},{"v":"2005","n":"2005"},{"v":"2004","n":"2004"}]},{"name":"排序","key":"rank","value":[{"v":"全部排序","n":"全部排序"},{"v":"按热度","n":"按热度"},{"v":"按上新","n":"按上新"},{"v":"按评分","n":"按评分"}]}],
  45. "20":[{"name":"分类","key":"type","value":[{"v":"全部类型","n":"全部类型"},{"v":"古装","n":"古装"},{"v":"喜剧","n":"喜剧"},{"v":"偶像","n":"偶像"},{"v":"家庭","n":"家庭"},{"v":"警匪","n":"警匪"},{"v":"言情","n":"言情"},{"v":"军事","n":"军事"},{"v":"武侠","n":"武侠"},{"v":"悬疑","n":"悬疑"},{"v":"历史","n":"历史"},{"v":"农村","n":"农村"},{"v":"都市","n":"都市"},{"v":"神话","n":"神话"},{"v":"科幻","n":"科幻"},{"v":"少儿","n":"少儿"},{"v":"搞笑","n":"搞笑"},{"v":"谍战","n":"谍战"},{"v":"战争","n":"战争"},{"v":"年代","n":"年代"},{"v":"犯罪","n":"犯罪"},{"v":"恐怖","n":"恐怖"},{"v":"惊悚","n":"惊悚"},{"v":"爱情","n":"爱情"},{"v":"剧情","n":"剧情"},{"v":"奇幻","n":"奇幻"}]},{"name":"区域","key":"area","value":[{"v":"全部地区","n":"全部地区"},{"v":"大陆","n":"大陆"},{"v":"美国","n":"美国"},{"v":"香港","n":"香港"},{"v":"韩国","n":"韩国"},{"v":"英国","n":"英国"},{"v":"台湾","n":"台湾"},{"v":"日本","n":"日本"},{"v":"法国","n":"法国"},{"v":"意大利","n":"意大利"},{"v":"德国","n":"德国"},{"v":"西班牙","n":"西班牙"},{"v":"泰国","n":"泰国"},{"v":"其它","n":"其它"}]},{"name":"年份","key":"year","value":[{"v":"全部年代","n":"全部年代"},{"v":"2025","n":"2025"},{"v":"2024","n":"2024"},{"v":"2023","n":"2023"},{"v":"2022","n":"2022"},{"v":"2021","n":"2021"},{"v":"2020","n":"2020"},{"v":"2019","n":"2019"},{"v":"2018","n":"2018"},{"v":"2017","n":"2017"},{"v":"2016","n":"2016"},{"v":"2015","n":"2015"},{"v":"2014","n":"2014"},{"v":"2013","n":"2013"},{"v":"2012","n":"2012"},{"v":"2011","n":"2011"},{"v":"2010","n":"2010"},{"v":"2009","n":"2009"},{"v":"2008","n":"2008"},{"v":"2007","n":"2007"},{"v":"2006","n":"2006"},{"v":"2005","n":"2005"},{"v":"2004","n":"2004"}]},{"name":"排序","key":"rank","value":[{"v":"全部排序","n":"全部排序"},{"v":"按热度","n":"按热度"},{"v":"按上新","n":"按上新"},{"v":"按评分","n":"按评分"}]}],
  46. "22":[{"name":"分类","key":"type","value":[{"v":"全部类型","n":"全部类型"},{"v":"热血","n":"热血"},{"v":"科幻","n":"科幻"},{"v":"推理","n":"推理"},{"v":"搞笑","n":"搞笑"},{"v":"冒险","n":"冒险"},{"v":"校园","n":"校园"},{"v":"动作","n":"动作"},{"v":"机战","n":"机战"},{"v":"运动","n":"运动"},{"v":"战争","n":"战争"},{"v":"少年","n":"少年"},{"v":"少女","n":"少女"},{"v":"社会","n":"社会"},{"v":"原创","n":"原创"},{"v":"亲子","n":"亲子"},{"v":"益智","n":"益智"},{"v":"励志","n":"励志"},{"v":"其他","n":"其他"}]},{"name":"区域","key":"area","value":[{"v":"全部地区","n":"全部地区"},{"v":"大陆","n":"大陆"},{"v":"日本","n":"日本"},{"v":"欧美","n":"欧美"},{"v":"其它","n":"其它"}]},{"name":"年份","key":"year","value":[{"v":"全部年代","n":"全部年代"},{"v":"2025","n":"2025"},{"v":"2024","n":"2024"},{"v":"2023","n":"2023"},{"v":"2022","n":"2022"},{"v":"2021","n":"2021"},{"v":"2020","n":"2020"},{"v":"2019","n":"2019"},{"v":"2018","n":"2018"},{"v":"2017","n":"2017"},{"v":"2016","n":"2016"},{"v":"2015","n":"2015"},{"v":"2014","n":"2014"},{"v":"2013","n":"2013"},{"v":"2012","n":"2012"},{"v":"2011","n":"2011"},{"v":"2010","n":"2010"},{"v":"2009","n":"2009"},{"v":"2008","n":"2008"},{"v":"2007","n":"2007"},{"v":"2006","n":"2006"},{"v":"2005","n":"2005"},{"v":"2004","n":"2004"}]},{"name":"排序","key":"rank","value":[{"v":"全部排序","n":"全部排序"},{"v":"按热度","n":"按热度"},{"v":"按上新","n":"按上新"},{"v":"按评分","n":"按评分"}]}],
  47. "23":[{"name":"分类","key":"type","value":[{"v":"全部类型","n":"全部类型"},{"v":"真人秀","n":"真人秀"},{"v":"访谈","n":"访谈"},{"v":"情感","n":"情感"},{"v":"选秀","n":"选秀"},{"v":"旅游","n":"旅游"},{"v":"美食","n":"美食"},{"v":"口秀","n":"口秀"},{"v":"曲艺","n":"曲艺"},{"v":"搞笑","n":"搞笑"},{"v":"游戏","n":"游戏"},{"v":"歌舞","n":"歌舞"},{"v":"生活","n":"生活"},{"v":"音乐","n":"音乐"},{"v":"时尚","n":"时尚"},{"v":"益智","n":"益智"},{"v":"职场","n":"职场"},{"v":"少儿","n":"少儿"},{"v":"纪实","n":"纪实"},{"v":"盛会","n":"盛会"}]},{"name":"区域","key":"area","value":[{"v":"全部地区","n":"全部地区"},{"v":"大陆","n":"大陆"},{"v":"美国","n":"美国"},{"v":"香港","n":"香港"},{"v":"韩国","n":"韩国"},{"v":"英国","n":"英国"},{"v":"台湾","n":"台湾"},{"v":"日本","n":"日本"},{"v":"法国","n":"法国"},{"v":"意大利","n":"意大利"},{"v":"德国","n":"德国"},{"v":"西班牙","n":"西班牙"},{"v":"泰国","n":"泰国"},{"v":"其它","n":"其它"}]},{"name":"年份","key":"year","value":[{"v":"全部年代","n":"全部年代"},{"v":"2025","n":"2025"},{"v":"2024","n":"2024"},{"v":"2023","n":"2023"},{"v":"2022","n":"2022"},{"v":"2021","n":"2021"},{"v":"2020","n":"2020"},{"v":"2019","n":"2019"},{"v":"2018","n":"2018"},{"v":"2017","n":"2017"},{"v":"2016","n":"2016"},{"v":"2015","n":"2015"},{"v":"2014","n":"2014"},{"v":"2013","n":"2013"},{"v":"2012","n":"2012"},{"v":"2011","n":"2011"},{"v":"2010","n":"2010"},{"v":"2009","n":"2009"},{"v":"2008","n":"2008"},{"v":"2007","n":"2007"},{"v":"2006","n":"2006"},{"v":"2005","n":"2005"},{"v":"2004","n":"2004"}]},{"name":"排序","key":"rank","value":[{"v":"全部排序","n":"全部排序"},{"v":"按热度","n":"按热度"},{"v":"按上新","n":"按上新"},{"v":"按评分","n":"按评分"}]}],
  48. "24":[{"name":"分类","key":"type","value":[{"v":"全部类型","n":"全部类型"},{"v":"古装","n":"古装"},{"v":"神豪","n":"神豪"},{"v":"穿越","n":"穿越"},{"v":"逆袭","n":"逆袭"},{"v":"虐恋","n":"虐恋"},{"v":"重生","n":"重生"},{"v":"复仇","n":"复仇"},{"v":"甜宠","n":"甜宠"},{"v":"其他","n":"其他"}]},{"name":"排序","key":"rank","value":[{"v":"全部排序","n":"全部排序"},{"v":"按热度","n":"按热度"},{"v":"按上新","n":"按上新"},{"v":"按评分","n":"按评分"}]}],
  49. }
  50. });
  51. }
  52. async function homeVod() {
  53. let data = JSON.parse(aesEcbDecode(await request(siteUrl + '/api.php/v1.home/data?type_id=25'), 'aassddwwxxllsx1x')).data;
  54. //console.log(data);
  55. let videos = [];
  56. videos = videos.concat(data['banners']);
  57. //console.log(videos);
  58. _.forEach(data['verLandList'], item => {
  59. videos = videos.concat(item['vertical_lands']);
  60. });
  61. //console.log(videos);
  62. return JSON.stringify({
  63. list: videos,
  64. });
  65. }
  66. async function category(tid, pg, filter, extend) {
  67. if(pg <= 0) pg = 1;
  68. let url = `${siteUrl}/api.php/v1.classify/content?page=` + pg;
  69. let params = {
  70. "area": extend['area'] || "全部地区",
  71. "rank": extend['rank'] || "按上新",
  72. "type": extend['type'] || "全部类型",
  73. "type_id": tid,
  74. "year": extend['year'] || "全部年代"
  75. }
  76. let encData = await request(url, params, {'Content-Type': 'application/json'}, 'POST');
  77. //console.log(encData);
  78. let videos = JSON.parse(aesEcbDecode(encData,'aassddwwxxllsx1x')).data.video_list;
  79. return JSON.stringify({
  80. page: pg,
  81. pagecount: 9999,
  82. list: videos,
  83. });
  84. }
  85. async function detail(id) {
  86. let url = `${siteUrl}/api.php/v1.player/details?vod_id=${id}`;
  87. let rets = await request(url,{},'','POST');
  88. let info = JSON.parse(aesEcbDecode(rets,'aassddwwxxllsx1x'))['data']['detail'];
  89. let videos = {
  90. vod_id: info.vod_id,
  91. vod_name: info.vod_name,
  92. vod_area: info.vod_area,
  93. vod_director: info.vod_director,
  94. vod_actor: info.vod_actor,
  95. vod_pic: info.vod_pic,
  96. vod_content: info.vod_content,
  97. type_name: info.vod_class,
  98. vod_year: info.vod_year
  99. }
  100. let froms = [];
  101. let urls = [];
  102. _.forEach(info.play_url_list, item => {
  103. froms.push(item['show']);
  104. let nameUrls = [];
  105. _.forEach(item['urls'], item2 => {
  106. nameUrls.push(item2['name'] + '$' + item['from']+ '__' + id +'__'+ item2['url']);
  107. });
  108. urls.push(nameUrls.join('#'));
  109. });
  110. videos.vod_play_from = froms.join('$$$');
  111. videos.vod_play_url = urls.join('$$$');
  112. return JSON.stringify({
  113. list: [videos],
  114. });
  115. }
  116. async function play(flag, id, flags) {
  117. let parseData = parseMap[id.split('__')[0]];
  118. let vid = id.split('__')[1];
  119. let parseUrl = id.split('__')[2];
  120. parseUrl = aesEcbDecode(parseUrl, md5(keyId + vid));
  121. parseUrl = aesEcbDecode(parseUrl.split('data=')[1].split('&')[0], 'bbssqdbbssll25sx');
  122. if (parseData == '') {
  123. return JSON.stringify({
  124. parse: 0,
  125. url: parseUrl,
  126. });
  127. }
  128. if (parseData.startsWith('http')) {
  129. parseUrl = JSON.parse(await request(parseData + parseUrl)).url;
  130. return JSON.stringify({
  131. parse: 0,
  132. url: parseUrl,
  133. });
  134. }
  135. let url = `${siteUrl}/shark/api.php?action=parsevod`;
  136. let param = {
  137. 'parse': parseData,
  138. 'url': parseUrl,
  139. 'matching': ''
  140. }
  141. let encData = await request(url, param, {
  142. 'Content-Type': 'application/x-www-form-urlencoded',
  143. 'User-Agent': PC_UA,
  144. 'version': '1.6.0'
  145. }, 'post', 'form');
  146. let playUrl = JSON.parse(aesEcbDecode(encData, 'aassddwwxxllsx1x')).url;
  147. return JSON.stringify({
  148. parse: 0,
  149. url: playUrl,
  150. });
  151. }
  152. async function search(wd, quick, pg) {
  153. let url = `${siteUrl}/api.php/v1.search/data?wd=${encodeURIComponent(wd)}&type_id=0&page=1`
  154. let encData = await request(url);
  155. let videos = JSON.parse(aesEcbDecode(encData,'aassddwwxxllsx1x')).data.search_data;
  156. return JSON.stringify({
  157. list: videos,
  158. });
  159. }
  160. function aesEcbDecode(bs64, keyText) {
  161. // 将Base64编码的密文转换成WordArray
  162. const ciphertext = Crypto.enc.Base64.parse(bs64);
  163. const key = Crypto.enc.Utf8.parse(keyText);
  164. // 使用CryptoJS进行AES ECB模式解密
  165. const decrypted = Crypto.AES.decrypt(
  166. { ciphertext },
  167. key,
  168. {
  169. mode: Crypto.mode.ECB,
  170. padding: Crypto.pad.Pkcs7
  171. }
  172. );
  173. // 转换成UTF-8字符串并打印出来
  174. return decrypted.toString(Crypto.enc.Utf8);
  175. }
  176. function md5(text) {
  177. return Crypto.MD5(text).toString();
  178. }
  179. export function __jsEvalReturn() {
  180. return {
  181. init: init,
  182. home: home,
  183. homeVod: homeVod,
  184. category: category,
  185. detail: detail,
  186. play: play,
  187. search: search,
  188. };
  189. }