star_open.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. import { Crypto, load, _ } from './lib/cat.js';
  2. let siteKey = '';
  3. let siteType = 0;
  4. let siteUrl = 'https://gh.7761.cf/https://www.histar.tv/';
  5. let apiUrl = 'https://aws.ulivetv.net/v3/web/api/filter';
  6. let detailUrl = siteUrl + 'vod/detail/';
  7. let data = '_next/data/';
  8. 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';
  9. let headers = {
  10. 'User-Agent': CHROME,
  11. 'Cookie': 'userIP=127.0.0.1; aws-waf-token=',
  12. 'Referer': siteUrl,
  13. }
  14. let ver = '';
  15. let cates = {
  16. 'movie': '电影',
  17. 'drama': '电视剧',
  18. 'animation': '动漫',
  19. 'variety': '综艺',
  20. 'documentary': '纪录片',
  21. };
  22. let recommendVideos = [];
  23. async function request(reqUrl, postData, agentSp, get) {
  24. let res = await req(reqUrl, {
  25. method: get ? 'get' : 'post',
  26. headers: headers || {},
  27. data: postData || {},
  28. postType: get ? '' : 'form',
  29. });
  30. let content = res.content;
  31. return content;
  32. }
  33. async function init(cfg) {
  34. siteKey = cfg.skey;
  35. siteType = cfg.stype;
  36. if (cfg.ext) {
  37. siteUrl = cfg.ext;
  38. detailUrl = siteUrl + 'vod/detail/';
  39. }
  40. ver = await getVer();
  41. }
  42. async function getVer() {
  43. const $ = load(await request(siteUrl));
  44. let data = JSON.parse($($('script#__NEXT_DATA__')[0]).text()).props.pageProps.cards;
  45. let videos = [];
  46. data.forEach((e) => {
  47. if(e.name != '电视直播') {
  48. e.cards.forEach((vod) => {
  49. videos.push({
  50. vod_id: vod.id,
  51. vod_name: vod.name,
  52. vod_pic: vod.img,
  53. vod_remarks: vod.countStr,
  54. });
  55. })
  56. }
  57. });
  58. recommendVideos = videos;
  59. for(const n of $('script')) {
  60. if(n.attribs['src'].indexOf('buildManifest.js') > 0) {
  61. return n.attribs['src'].split('/')[3];
  62. }
  63. }
  64. }
  65. async function home(filter) {
  66. let classes = [];
  67. let filters = {};
  68. for(let cate in cates) {
  69. let condition = [];
  70. let labels = [];
  71. let areas = [];
  72. let years = [];
  73. labels.push({n: '全部',v: '',});
  74. areas.push({n: '全部',v: '',});
  75. years.push({n: '全部',v: '',});
  76. classes.push({
  77. type_id: cate,
  78. type_name: cates[cate],
  79. });
  80. const $ = load(await request(siteUrl + cate + '/all/all/all'));
  81. let data = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.filterCondition;
  82. data.label.forEach((c) => {
  83. labels.push({n: c[0],v: c[1],});
  84. });
  85. data.country.forEach((c) => {
  86. areas.push({n: c,v: c,});
  87. });
  88. data.time.reverse().forEach((c) => {
  89. if (c > 2000) {
  90. years.push({n: c.toString(),v: c.toString(),});
  91. }
  92. });
  93. condition.push({
  94. key: 'type',
  95. name: '类型',
  96. value: labels,
  97. },{
  98. key: 'area',
  99. name: '地区',
  100. value: areas,
  101. },{
  102. key: 'year',
  103. name: '年份',
  104. value: years,
  105. });
  106. filters[cate] = condition;
  107. }
  108. return JSON.stringify({
  109. class: classes,
  110. filters: filters,
  111. });
  112. }
  113. async function homeVod() {
  114. return JSON.stringify({
  115. list: recommendVideos,
  116. });
  117. }
  118. async function category(tid, pg, filter, ext){
  119. if (pg <= 0) pg = 1;
  120. let param = {pageSize: 16, page:parseInt(pg), chName:cates[tid],};
  121. if(ext['year']) {
  122. param['startTime'] = parseInt(ext['year']);
  123. param['endTime'] = parseInt(ext['year']);
  124. }
  125. if(ext['type']) param['label'] = ext['type'];
  126. if(ext['area']) param['area'] = ext['area'];
  127. let res = await req(apiUrl,{
  128. method: 'post',
  129. headers: {'Content-Type': 'application/json'},
  130. data: param,
  131. postType: '',
  132. });
  133. // console.log('res ', res.content);
  134. let data = JSON.parse(res.content).data.list;
  135. let videos = [];
  136. data.forEach((vod) => {
  137. videos.push({
  138. vod_id: vod.id,
  139. vod_name: vod.name,
  140. vod_pic: vod.img,
  141. vod_remarks: vod.countStr,
  142. });
  143. });
  144. return JSON.stringify({
  145. list: videos
  146. });
  147. }
  148. async function detail(id) {
  149. const $ = load(await request(detailUrl + id));
  150. let dd = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.pageData;
  151. let vod = {
  152. vod_id: id,
  153. vod_year: dd.time,
  154. vod_name: dd.name,
  155. vod_area: dd.country,
  156. vod_actor: dd.actor,
  157. vod_remarks: dd.countStr,
  158. vod_content: dd.desc,
  159. vod_director: dd.director,
  160. type_name: dd.label,
  161. vod_play_from: '玩偶成群',
  162. }
  163. if(dd.videos.length > 0) {
  164. let playUrls = [];
  165. dd.videos.forEach(e => {
  166. playUrls.push(e.eporder + '$' + e.purl);
  167. });
  168. vod.vod_play_url = playUrls.join('#');
  169. } else {
  170. let data = JSON.parse($($('#__NEXT_DATA__')[0]).text()).props.pageProps.videosGroup;
  171. let playUrls = [];
  172. let playFroms = [];
  173. data.forEach(e => {
  174. playFroms.push(e.name);
  175. let groupUrls = [];
  176. e.videos.forEach(item => {
  177. groupUrls.push(item.epInfo + '$' + item.purl);
  178. });
  179. playUrls.push(groupUrls.join('#'));
  180. });
  181. vod.vod_play_from = playFroms.join('$$$');
  182. vod.vod_play_url = playUrls.join('$$$');
  183. }
  184. return JSON.stringify({
  185. list: [vod],
  186. })
  187. }
  188. async function search(wd, quick, pg) {
  189. let url = siteUrl + data + ver + '/search.json?word=' + encodeURIComponent(wd);
  190. let cards = JSON.parse(await request(url)).pageProps.initList;
  191. let videos = [];
  192. cards.forEach(e => {
  193. videos.push({
  194. vod_id: e.id,
  195. vod_name: e.name,
  196. vod_pic: e.picurl,
  197. vod_remarks: e.countStr,
  198. });
  199. });
  200. return JSON.stringify({
  201. list: videos,
  202. });
  203. }
  204. async function play(flag, id, flags) {
  205. return JSON.stringify({
  206. parse: 0,
  207. url: id,
  208. });
  209. }
  210. export function __jsEvalReturn() {
  211. return {
  212. init: init,
  213. home: home,
  214. homeVod: homeVod,
  215. category: category,
  216. detail: detail,
  217. play: play,
  218. search: search,
  219. };
  220. }