nongmin.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. import { Crypto, load, _ } from 'assets://js/lib/cat.js';
  2. let siteUrl = 'https://www.wwgz.cn';
  3. let siteKey = '';
  4. let siteType = 0;
  5. let headers = {
  6. 'User-Agent': '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',
  7. 'Referer': siteUrl + '/'
  8. };
  9. let PARSE_URL = 'https://nmvod.cn:3166/webcloud/relay.php';
  10. let jxUrl = ['https://api.cnmcom.com/webcloud/nma.php?url=','https://api.cnmcom.com/webcloud/nmb.php?url=', 'https://api.cnmcom.com/webcloud/nmc.php?vid=', 'https://vip.wwgz.cn:5200/nmplay/webcloud/m3u8.php?url='];
  11. async function request(reqUrl, postData, post) {
  12. let res = await req(reqUrl, {
  13. method: post ? 'post' : 'get',
  14. headers: headers,
  15. data: postData || {},
  16. postType: post ? 'form' : '',
  17. });
  18. let content = res.content;
  19. return content;
  20. }
  21. async function init(cfg) {
  22. siteKey = cfg.skey;
  23. siteType = cfg.stype;
  24. if (cfg.ext) {
  25. siteUrl = cfg.ext;
  26. }
  27. const html1 = (await req(siteUrl + '/player/initial.js', {
  28. method: 'get',
  29. headers: {
  30. 'User-Agent': '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',
  31. 'Referer': siteUrl + '/',
  32. }
  33. })).content;
  34. PARSE_URL = html1.split('src="')[1].split('?url=')[0];
  35. const html = (await req(PARSE_URL, {
  36. method: 'get',
  37. headers: {
  38. 'User-Agent': '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',
  39. 'Referer': siteUrl + '/',
  40. }
  41. })).content;
  42. //console.log('html', html);
  43. const url = html.match(/src = '(.*?)' \+ videoUrl;/);
  44. jxUrl[0] = url[1];
  45. }
  46. async function home(filter) {
  47. let classes = [{
  48. type_id: '1',
  49. type_name: '电影',
  50. },{
  51. type_id: '2',
  52. type_name: '剧集',
  53. },{
  54. type_id: '3',
  55. type_name: '综艺',
  56. },{
  57. type_id: '4',
  58. type_name: '动漫',
  59. },{
  60. type_id: '26',
  61. type_name: '短剧',
  62. }];
  63. let filterObj = genFilterObj();
  64. return JSON.stringify({
  65. class: classes,
  66. filters: filterObj
  67. });
  68. }
  69. async function homeVod() {
  70. let url = siteUrl;
  71. let videos = await getVideos(url);
  72. return JSON.stringify({
  73. list: videos,
  74. });
  75. }
  76. async function category(tid, pg, filter, ext) {
  77. if (!pg) pg = 1;
  78. if (pg <= 0) pg = 1;
  79. let id = ext['id'] || tid;
  80. let year = ext['year'] || '';
  81. let area = ext['area'] || '';
  82. let url = siteUrl + '/index.php?m=vod-list-id-'+id+'-pg-'+pg+'-order--by-time-class-0-year-'+year+'-letter--area-'+area+'-lang-.html';
  83. let videos = await getVideos(url);
  84. return JSON.stringify({
  85. list: videos,
  86. page: pg,
  87. });
  88. }
  89. async function detail(id) {
  90. try {
  91. const html = await request(siteUrl + id);
  92. let $ = load(html);
  93. let content = $('.detail-con p').text();
  94. let director = _.map($('.desc_item:eq(2) font a'), (n) => {
  95. return $(n).text();
  96. }).join(' ');
  97. let actor = _.map($('.desc_item:eq(1) font a'), (n) => {
  98. return $(n).text();
  99. }).join(' ');
  100. let playFrom = $('.hd > ul > li > a').text();
  101. if (playFrom.indexOf('云播') >= 0) {
  102. playFrom = '云播';
  103. } else {
  104. playFrom = '微信公众号:玉玉应用笔记';
  105. }
  106. let play1Url = siteUrl + $('.greenBtn').attr('href');
  107. //('play1Url', play1Url);
  108. let html2 = await request(play1Url);
  109. let nameUrls = html2.split("mac_url='")[1].split("';")[0];
  110. const video = {
  111. vod_play_from: playFrom,
  112. vod_play_url: nameUrls,
  113. vod_content: content,
  114. vod_director: director,
  115. vod_actor: actor,
  116. };
  117. const list = [video];
  118. const result = { list };
  119. return JSON.stringify(result);
  120. } catch (e) {
  121. console.log('err', e);
  122. }
  123. return null;
  124. }
  125. async function search(wd, quick, pg) {
  126. let url = siteUrl + '/index.php?m=vod-search';
  127. const html = await request(url, {wd: wd}, true);
  128. const $ = load(html);
  129. const cards = $('#data_list li')
  130. let videos = _.map(cards, (n) => {
  131. let id = $($(n).find('a')[0]).attr('href');
  132. let name = $($(n).find('span.sTit')[0]).text();
  133. let pic = $($(n).find('img')[0]).attr('src');
  134. let remarks = $($(n).find('span.sStyle')[0]).text().trim();
  135. return {
  136. vod_id: id,
  137. vod_name: name,
  138. vod_pic: pic,
  139. vod_remarks: remarks,
  140. };
  141. });
  142. return JSON.stringify({
  143. list: videos,
  144. });
  145. }
  146. async function play(flag, id, flags) {
  147. let playUrl = id;
  148. if (flag === '云播') {
  149. playUrl = jxUrl[3] + id;
  150. } else {
  151. playUrl = jxUrl[0] + id;
  152. }
  153. const html = (await req(playUrl, {
  154. method: 'get',
  155. headers: {
  156. 'User-Agent': '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',
  157. 'Referer': PARSE_URL + '?',
  158. }
  159. })).content;
  160. //const html = await request(playUrl);
  161. const $ = load(html);
  162. for(const n of $('script')) {
  163. if($(n).text().indexOf("url: '") >= 0) {
  164. let url = $(n).text().split("url: '")[1].split("'")[0];
  165. if(url) {
  166. playUrl = url;
  167. }
  168. return JSON.stringify({
  169. parse: 0,
  170. url: playUrl,
  171. });
  172. }
  173. if($(n).text().indexOf("var url='") >= 0) {
  174. let url = $(n).text().split("var url='")[1].split("';")[0];
  175. if(url) {
  176. playUrl = url;
  177. }
  178. return JSON.stringify({
  179. parse: 0,
  180. url: playUrl,
  181. });
  182. }
  183. }
  184. return JSON.stringify({
  185. parse: 1,
  186. url: playUrl,
  187. });
  188. }
  189. function genFilterObj() {
  190. return {
  191. '1': [{'key': 'id', 'name': '类型', 'value': [{'n': '全部类型', 'v': '1'}, {'n': '动作', 'v': '5'}, {'n': '喜剧', 'v': '6'}, {'n': '爱情', 'v': '7'}, {'n': '科幻', 'v': '8'}, {'n': '恐怖', 'v': '9'}, {'n': '剧情', 'v': '10'}, {'n': '战争', 'v': '11'},{'n': '惊悚', 'v': '16'},{'n': '奇幻', 'v': '17'}]},
  192. {'key': 'area', 'name': '地区', 'value': [{'n': '全部地区', 'v': ''}, {'n': '大陆', 'v': '大陆'}, {'n': '香港', 'v': '香港'}, {'n': '台湾', 'v': '台湾'}, {'n': '美国', 'v': '美国'}, {'n': '韩国', 'v': '韩国'},{'n': '日本', 'v': '日本'}]},
  193. {'key': 'year', 'name': '年份', 'value': [{'n': '全部年份', 'v': ''}, {'n': '2024', 'v': '2024'}, {'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'}]}
  194. ],
  195. '2': [{'key': 'id', 'name': '类型', 'value': [{'n': '全部类型', 'v': '2'}, {'n': '国产剧', 'v': '12'}, {'n': '港台剧', 'v': '13'},{'n': '日韩剧', 'v': '14'}, {'n': '欧美剧', 'v': '15'}]},
  196. {'key': 'area', 'name': '地区', 'value': [{'n': '全部地区', 'v': ''}, {'n': '大陆', 'v': '大陆'}, {'n': '台湾', 'v': '台湾'}, {'n': '香港', 'v': '香港'}, {'n': '韩国', 'v': '韩国'}, {'n': '日本', 'v': '日本'}, {'n': '美国', 'v': '美国'}, {'n': '泰国', 'v': '泰国'}, {'n': '英国', 'v': '英国'}, {'n': '新加坡', 'v': '新加坡'}, {'n': '其他', 'v': '其他'}]},
  197. {'key': 'year', 'name': '年份', 'value': [{'n': '全部年份', 'v': ''}, {'n': '2024', 'v': '2024'},{'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': '2006', 'v': '2006'}, {'n': '2005', 'v': '2005'}]}
  198. ]
  199. };
  200. }
  201. async function getRecommend(url) {
  202. const html = await request(url);
  203. const $ = load(html);
  204. const cards = $('ul.list_06 li')
  205. let videos = _.map(cards, (n) => {
  206. let id = $($(n).find('a')[0]).attr('href');
  207. let name = $($(n).find('a')[0]).attr('title');
  208. let pic = $($(n).find('img')[0]).attr('src');
  209. let remarks = $($(n).find('font')[0]).text().trim().replaceAll('0.0', '');
  210. return {
  211. vod_id: id,
  212. vod_name: name,
  213. vod_pic: pic,
  214. vod_remarks: remarks,
  215. };
  216. });
  217. return videos;
  218. }
  219. async function getVideos(url) {
  220. const html = await request(url);
  221. const $ = load(html);
  222. const cards = $('ul.resize_list li')
  223. let videos = [];
  224. _.forEach(cards, (n) => {
  225. let id = $($(n).find('a')[0]).attr('href');
  226. let name = $($(n).find('a')[0]).attr('title');
  227. let pic = $($(n).find('img')[0]).attr('src');
  228. let remarks = $(n).find('span.sBottom').text().trim();
  229. if(pic) {
  230. videos.push({
  231. vod_id: id,
  232. vod_name: name,
  233. vod_pic: pic,
  234. vod_remarks: remarks,
  235. });
  236. }
  237. });
  238. return videos;
  239. }
  240. export function __jsEvalReturn() {
  241. return {
  242. init: init,
  243. home: home,
  244. homeVod: homeVod,
  245. category: category,
  246. detail: detail,
  247. play: play,
  248. search: search,
  249. };
  250. }