ys996_open.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. import { Crypto, load, _ } from './lib/cat.js';
  2. let siteUrl = 'https://www.cs1369.com';
  3. let siteKey = '';
  4. let siteType = 0;
  5. let headers = {};
  6. async function request(reqUrl, postData, agentSp, get) {
  7. let res = await req(reqUrl, {
  8. method: get ? 'get' : 'post',
  9. headers: headers,
  10. data: postData || {},
  11. postType: get ? '' : 'form',
  12. });
  13. let content = res.content;
  14. return content;
  15. }
  16. async function init(cfg) {
  17. siteKey = cfg.skey;
  18. siteType = cfg.stype;
  19. }
  20. async function home(filter) {
  21. let classes = [{
  22. type_id: '1',
  23. type_name: '电影',
  24. },{
  25. type_id: '2',
  26. type_name: '电视',
  27. },{
  28. type_id: '3',
  29. type_name: '动漫',
  30. },{
  31. type_id: '4',
  32. type_name: '短剧',
  33. },{
  34. type_id: '6',
  35. type_name: '动作片',
  36. },{
  37. type_id: '7',
  38. type_name: '喜剧片',
  39. },{
  40. type_id: '8',
  41. type_name: '爱情片',
  42. },{
  43. type_id: '9',
  44. type_name: '科幻片',
  45. },{
  46. type_id: '10',
  47. type_name: '恐怖片',
  48. },{
  49. type_id: '11',
  50. type_name: '剧情片',
  51. },{
  52. type_id: '12',
  53. type_name: '战争片',
  54. },{
  55. type_id: '13',
  56. type_name: '动画片',
  57. },{
  58. type_id: '14',
  59. type_name: '纪录片',
  60. }];
  61. let filterObj = genFilterObj();
  62. return JSON.stringify({
  63. class: classes,
  64. filters: filterObj
  65. });
  66. }
  67. async function homeVod() {
  68. let videos = await getVideos(siteUrl);
  69. return JSON.stringify({
  70. list: videos,
  71. });
  72. }
  73. async function category(tid, pg, filter, extend) {
  74. let url = siteUrl;
  75. if (filter) {
  76. url = url + '/show';
  77. let area = extend['area'];
  78. if (area && area != '') {
  79. url = url + '/area/' + area;
  80. }
  81. let clazz = extend['class']
  82. if (clazz && clazz != '') {
  83. url = url + '/class/' + clazz;
  84. }
  85. let id = extend['id'];
  86. if(id && id != '') {
  87. url = url + '/id/' + id;
  88. } else {
  89. url = url + '/id/' + tid;
  90. }
  91. let year = extend['year'];
  92. if (year && year != '') {
  93. url = url + '/year/' + year;
  94. }
  95. if (pg && pg > 1) {
  96. url = url + '/page/' + pg;
  97. }
  98. url = url + '.html';
  99. } else {
  100. url = url + '/vod/type';
  101. url = url + '/id/' + tid;
  102. if (pg && pg > 1) {
  103. url = url + '/page/' + pg;
  104. }
  105. url = url + '.html';
  106. }
  107. //console.log('cate page url:', url);
  108. let videos = await getVideos(url);
  109. return JSON.stringify({
  110. list: videos,
  111. });
  112. }
  113. async function detail(id) {
  114. try {
  115. let url = siteUrl + id;
  116. const html = await request(url);
  117. const $ = load(html);
  118. let actors = _.map($('div.stui-content__detail > p:nth-child(3) > a'), (n) => {
  119. return $(n).text();
  120. });
  121. let actor = actors.join(' ');
  122. let director = $('div.stui-content__detail > p:nth-child(4) > a').text();
  123. let title = $('div.stui-content__detail > h1.title').text();
  124. let content = $('div.stui-pannel_bd > p').text();
  125. const cards = $('div.stui-pannel_bd.col-pd.clearfix > ul > li > a');
  126. let playUrls = _.map(cards, (n) => {
  127. return $(n).text() + '$' + n.attribs['href'];
  128. });
  129. const video = {
  130. vod_actor: actor,
  131. vod_play_from: 'Leospring',
  132. vod_play_url: playUrls.join('#'),
  133. vod_director: director,
  134. vod_content: content,
  135. };
  136. const list = [video];
  137. const result = { list };
  138. return JSON.stringify(result);
  139. } catch (e) {
  140. //console.log('err', e);
  141. }
  142. return null;
  143. }
  144. async function search(wd, quick, pg) {
  145. let url = siteUrl + '/search/wd/' + wd + '.html';
  146. //console.log('search url:', url);
  147. const html = await request(url);
  148. const $ = load(html);
  149. const cards = $('div.stui-pannel_bd > ul.stui-vodlist__media.col-pd.clearfix > li');
  150. let videos = _.map(cards, (n) => {
  151. let id = $($(n).find('div.thumb > a')[0]).attr('href');
  152. let name = $($(n).find('div.thumb > a')[0]).attr('title');
  153. let pic = $($(n).find('div.thumb > a')[0]).attr('data-original');
  154. let remark = $($(n).find('div.thumb > a > span:nth-child(2)')[0]).text();
  155. return {
  156. vod_id: id,
  157. vod_name: name,
  158. vod_pic: pic,
  159. vod_remarks: remark,
  160. };
  161. });
  162. return JSON.stringify({
  163. list: videos,
  164. });
  165. }
  166. async function play(flag, id, flags) {
  167. let url = siteUrl + id;
  168. const html = await request(url);
  169. const $ = load(html);
  170. let info = '';
  171. for(const n of $('script')) {
  172. if($(n).text().indexOf('player_aaaa=') > 0) {
  173. info = $(n).text().split('player_aaaa=')[1];
  174. break;
  175. }
  176. }
  177. //console.log('info', info);
  178. let obj = JSON.parse(info);
  179. let playUrl = obj.url;
  180. if(obj.encrypt == 1) {
  181. playUrl = unescape(playUrl);
  182. } else if (obj.encrypt == 2) {
  183. playUrl = unescape(base64Decode(playUrl))
  184. }
  185. return JSON.stringify({
  186. parse: 0,
  187. url: playUrl,
  188. });
  189. }
  190. function genFilterObj() {
  191. return {
  192. '1':[
  193. {
  194. key: 'id',
  195. name: '类型',
  196. value: [{n:'全部',v:''},{n:'动作片',v:'6'},{n:'喜剧片',v:'7'},{n:'爱情片',v:'8'},{n:'科幻片',v:'9'},{n:'恐怖片',v:'10'},{n:'剧情片',v:'11'},{n:'战争片',v:'12'},{n:'动画片',v:'13'},{n:'纪录片',v:'14'}]
  197. },{
  198. key: 'class',
  199. name: '剧情',
  200. value: [{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:'儿童',v:'儿童'},{n:'网络电影',v:'网络电影'}]
  201. },{
  202. key: 'area',
  203. name: '地区',
  204. value: [{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:'俄罗斯'}]
  205. },{
  206. key: 'year',
  207. name: '年份',
  208. value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
  209. }],
  210. '2':[{
  211. key: 'id',
  212. name: '类型',
  213. value: [{n:'全部',v:''},{n:'内地',v:'15'},{n:'美国',v:'16'},{n:'英国',v:'17'},{n:'韩国',v:'18'},{n:'泰国',v:'20'},{n:'日本',v:'21'},{n:'香港',v:'22'},{n:'台湾',v:'23'}]
  214. },{
  215. key: 'class',
  216. name: '剧情',
  217. value: [{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:'网剧'}]
  218. },{
  219. key: 'area',
  220. name: '地区',
  221. value: [{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:'俄罗斯'}]
  222. },{
  223. key: 'year',
  224. name: '年份',
  225. value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
  226. }],
  227. '3':[{
  228. key: 'id',
  229. name: '类型',
  230. value: [{n:'全部',v:''},{n:'内地',v:'25'},{n:'日漫',v:'26'},{n:'欧美',v:'27'},{n:'其他',v:'28'}]
  231. },{
  232. key: 'class',
  233. name: '剧情',
  234. value: [{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:'励志'}]
  235. },{
  236. key: 'area',
  237. name: '地区',
  238. value: [{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:'俄罗斯'}]
  239. },{
  240. key: 'year',
  241. name: '年份',
  242. value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
  243. }]
  244. }
  245. }
  246. async function getVideos(url) {
  247. const html = await request(url);
  248. const $ = load(html);
  249. const cards = $('div.stui-vodlist__box > a')
  250. let videos = _.map(cards, (n) => {
  251. let id = n.attribs['href'];
  252. let name = n.attribs['title'];
  253. let pic = n.attribs['data-original'];
  254. let remark = $($(n).find('span:nth-child(2)')[0]).text();
  255. return {
  256. vod_id: id,
  257. vod_name: name,
  258. vod_pic: pic,
  259. vod_remarks: remark,
  260. };
  261. });
  262. return videos;
  263. }
  264. function base64Encode(text) {
  265. return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
  266. }
  267. function base64Decode(text) {
  268. return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
  269. }
  270. export function __jsEvalReturn() {
  271. return {
  272. init: init,
  273. home: home,
  274. homeVod: homeVod,
  275. category: category,
  276. detail: detail,
  277. play: play,
  278. search: search,
  279. };
  280. }