Files
tvbox_collect/jaychouqq/yingshi/js2/wwgz.js
T
2026-06-29 03:41:14 +00:00

453 lines
13 KiB
JavaScript

const cheerio = createCheerio()
const UA =
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.1 Mobile/15E148 Safari/604.1'
let appConfig = {
ver: 20260224,
title: '农民影视',
site: 'https://vip.wwgz.cn:5200',
tabs: [
{
name: '电影',
ext: {
id: '1',
},
},
{
name: '连续剧',
ext: {
id: '2',
},
},
{
name: '综艺',
ext: {
id: '3',
},
},
{
name: '动漫',
ext: {
id: '4',
},
},
{
name: '短剧',
ext: {
id: '26',
},
},
],
}
const filterList = {
1: [
{
key: 'type',
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: '12' },
{ n: '奇幻片', v: '13' },
],
},
{
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: '法国' },
{ n: '加拿大', v: '加拿大' },
{ n: '西班牙', v: '西班牙' },
{ n: '俄罗斯', v: '俄罗斯' },
{ n: '其他', v: '其他' },
],
},
{
key: 'year',
name: '年份',
value: [
{ n: '全部', v: '' },
{ n: '2026', v: '2026' },
{ n: '2025', v: '2025' },
{ 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~2000', v: '2009~2000' },
],
},
{
key: 'sort',
name: '排序',
value: [
{ n: '时间', v: 'time' },
{ n: '人气', v: 'hits' },
{ n: '评分', v: 'score' },
],
},
],
2: [
{
key: 'type',
name: '类型',
value: [
{ n: '全部', v: '2' },
{ n: '国产剧', v: '12' },
{ n: '港台泰', v: '13' },
{ n: '日韩剧', v: '14' },
{ n: '欧美剧', v: '15' },
],
},
{
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: '法国' },
{ n: '加拿大', v: '加拿大' },
{ n: '西班牙', v: '西班牙' },
{ n: '俄罗斯', v: '俄罗斯' },
{ n: '其他', v: '其他' },
],
},
{
key: 'year',
name: '年份',
value: [
{ n: '全部', v: '' },
{ n: '2026', v: '2026' },
{ n: '2025', v: '2025' },
{ 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' },
],
},
{
key: 'sort',
name: '排序',
value: [
{ n: '时间', v: 'time' },
{ n: '人气', v: 'hits' },
{ n: '评分', v: 'score' },
],
},
],
3: [
{
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: '法国' },
{ n: '加拿大', v: '加拿大' },
{ n: '西班牙', v: '西班牙' },
{ n: '俄罗斯', v: '俄罗斯' },
{ n: '其他', v: '其他' },
],
},
{
key: 'year',
name: '年份',
value: [
{ n: '全部', v: '' },
{ n: '2026', v: '2026' },
{ n: '2025', v: '2025' },
{ 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' },
],
},
{
key: 'sort',
name: '排序',
value: [
{ n: '时间', v: 'time' },
{ n: '人气', v: 'hits' },
{ n: '评分', v: 'score' },
],
},
],
4: [
{
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: '法国' },
{ n: '加拿大', v: '加拿大' },
{ n: '西班牙', v: '西班牙' },
{ n: '俄罗斯', v: '俄罗斯' },
{ n: '其他', v: '其他' },
],
},
{
key: 'year',
name: '年份',
value: [
{ n: '全部', v: '' },
{ n: '2026', v: '2026' },
{ n: '2025', v: '2025' },
{ 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' },
],
},
{
key: 'sort',
name: '排序',
value: [
{ n: '时间', v: 'time' },
{ n: '人气', v: 'hits' },
{ n: '评分', v: 'score' },
],
},
],
}
async function getConfig() {
let config = appConfig
return jsonify(config)
}
async function getCards(ext) {
ext = argsify(ext)
let cards = []
let { page = 1, id } = ext
let url = `${appConfig.site}/vod-list-id-${ext?.filters?.type || id}-pg-${page}-order--by-${ext?.filters?.sort || 'time'}-class-0-year-${ext?.filters?.year || 0}-letter--area-${ext?.filters?.area || ''}-lang-.html`
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
},
})
const $ = cheerio.load(data)
$('.globalPicList > ul li').each((_, element) => {
const href = $(element).find('a').attr('href')
const title = $(element).find('a').attr('title')
const cover = $(element).find('img').attr('src')
const subTitle = $(element).find('.sDes').text()
cards.push({
vod_id: href,
vod_name: title,
vod_pic: cover,
vod_remarks: subTitle || '',
ext: {
url: appConfig.site + href,
},
})
})
return jsonify({
list: cards,
filter: filterList[id] || [],
})
}
async function getTracks(ext) {
ext = argsify(ext)
let lists = []
const url = ext.url
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
},
})
const $ = cheerio.load(data)
// 從第一集取出 track list
const href = $('.numList').first().find('li').first().find('a').attr('href')
const firstEpUrl = appConfig.site + href
const { data: epData } = await $fetch.get(firstEpUrl, {
headers: {
'User-Agent': UA,
},
})
const mac_from = epData?.match(/mac_from\s*=\s*'([^']*)'/)[1]
const mac_url = epData?.match(/mac_url\s*=\s*'([^']+)'/)[1]
const from = mac_from.split('$$$')
const urls = mac_url.split('$$$')
for (let i = 0; i < from.length; i++) {
let temp = {
title: from[i],
tracks: [],
}
let eps = urls[i].split('#')
for (let j = 0; j < eps.length; j++) {
let ep = eps[j].split('$')
temp.tracks.push({
name: from.length == 1 ? `${from[i]}-${ep[0]}` : ep[0],
pan: '',
ext: {
url: ep[1],
},
})
}
lists.push(temp)
}
return jsonify({
list: lists,
})
}
async function getPlayinfo(ext) {
ext = argsify(ext)
const url = `https://api.nmvod.me:520/player/?url=${ext.url}`
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
Referer: appConfig.site + '/',
'sec-fetch-site': 'cross-site',
'sec-fetch-mode': 'navigate',
'sec-fetch-dest': 'iframe',
},
})
const match = data.match(/var\s+config\s*=\s*(\{[\s\S]*?\})/)
const configString = match?.[1]
const playUrl = configString.match(/url":\s*"(.+)"/)?.[1]
return jsonify({ urls: [playUrl], headers: [{ 'User-Agent': UA }] })
}
async function search(ext) {
ext = argsify(ext)
let cards = []
let text = encodeURIComponent(ext.text)
let page = ext.page || 1
let url = `${appConfig.site}/index.php?m=vod-search`
if (page > 1) return jsonify({ list: [] })
let body = `wd=${text}`
const { data } = await $fetch.post(url, body, {
headers: {
'User-Agent': UA,
'Content-Type': 'application/x-www-form-urlencoded',
},
})
const $ = cheerio.load(data)
$('#search_main ul li').each((_, element) => {
const href = $(element).find('.pic a').attr('href')
const title = $(element).find('.sTit').text()
const cover = $(element).find('img').attr('data-src')
const subTitle = $(element).find('.sStyle').text()
cards.push({
vod_id: href,
vod_name: title,
vod_pic: cover,
vod_remarks: subTitle || '',
ext: {
url: appConfig.site + href,
},
})
})
return jsonify({
list: cards,
})
}