\\s*(演員|演员|主演|導演|导演|地區|地区|年份|類別|类别|狀態|状态|更新)\\s*[::]\\s*<\\/span>\\s*([\\s\\S]*?)<\\/div>/g;
var mm;
while ((mm = mreg.exec(html)) !== null) {
var val = mm[2].replace(/<[^>]+>/g, '').replace(/&/g, '&').trim();
var lab = mm[1];
if (lab === '演員' || lab === '演员' || lab === '主演') {
vod.vod_actor = val;
} else if (lab === '導演' || lab === '导演') {
vod.vod_director = val;
} else if (lab === '地區' || lab === '地区') {
vod.vod_area = val;
} else if (lab === '年份') {
vod.vod_year = val;
} else if (lab === '類別' || lab === '类别') {
vod.type_name = val.replace(/\\s*·\\s*\\d{4}.*$/, '').trim();
if (!vod.vod_year) {
var ym = val.match(/(\\d{4})/);
if (ym) { vod.vod_year = ym[1]; }
}
} else if (lab === '狀態' || lab === '状态' || lab === '更新') {
if (!vod.vod_remarks) { vod.vod_remarks = val; }
}
}
if (!vod.vod_year && vod.vod_remarks) {
var ym2 = vod.vod_remarks.match(/(\\d{4})/);
if (ym2) { vod.vod_year = ym2[1]; }
}
// 播放线路: route-title + eps(data-route-sid)
var playFrom = [];
var playUrl = [];
var rreg = /class="route-title">([\\s\\S]*?)<\\/div>\\s*]*data-route-sid="(\\d+)"[^>]*>([\\s\\S]*?)<\\/div>/g;
var rr;
while ((rr = rreg.exec(html)) !== null) {
var rname = rr[1].replace(/<[^>]+>/g, '').replace(/\\s+/g, ' ').trim() || ('线路' + rr[2]);
var eplist = [];
var ereg = /
]*class="ep"[^>]*href="\\/play\\/(\\d+)-(\\d+)-(\\d+)\\.html"[^>]*>([\\s\\S]*?)<\\/a>/g;
var ee;
while ((ee = ereg.exec(rr[3])) !== null) {
var ename = ee[4].replace(/<[^>]+>/g, '').trim() || ('第' + ee[3] + '集');
eplist.push(ename + '$https://gimyai.tw/play/' + ee[1] + '-' + ee[2] + '-' + ee[3] + '.html');
}
if (eplist.length > 0) {
playFrom.push(rname);
playUrl.push(eplist.join('#'));
}
}
vod.vod_play_from = playFrom.join('$$$');
vod.vod_play_url = playUrl.join('$$$');
VOD = vod;
}
} catch (e) {
VOD = vod;
}
`,
// 搜索: index.php/ajax/suggest JSON 接口, 支持 fypage 分页
搜索: `js:
var d = [];
try {
var kw = KEY || '';
var pg = MY_PAGE || 1;
var u = 'https://gimyai.tw/index.php/ajax/suggest?mid=1&wd=' + encodeURIComponent(kw) + '&limit=20&page=' + pg;
var txt = request(u) || '';
if (txt.indexOf('Just a moment') === -1 && txt.charAt(0) === '{') {
var data = null;
try { data = JSON.parse(txt); } catch (e1) { data = null; }
if (data && data.code === 1 && data.list) {
for (var i = 0; i < data.list.length; i++) {
var it = data.list[i];
d.push({
vod_id: 'https://gimyai.tw/detail/' + it.id + '.html',
vod_name: it.name || ('' + it.id),
vod_pic: it.pic || '',
vod_remarks: ''
});
}
}
}
} catch (e) {}
VODS = d;
`,
// 播放: play 页 player_data JSON, encrypt 1=urldecode 2=base64+urldecode
// 直链(m3u8/mp4)直接输出裸链接; 非直链走 attzy 解析器
lazy: `js:
try {
var url = input;
if (url.indexOf('http') !== 0) { url = 'https://gimyai.tw' + url; }
var html = request(url) || '';
var m = html.match(/var\\s+player_data\\s*=\\s*(\\{[\\s\\S]+?\\})\\s*;?\\s*<\\/script>/);
if (!m) { m = html.match(/player_data\\s*=\\s*(\\{[\\s\\S]+?\\})/); }
if (m) {
var pd = null;
try { pd = JSON.parse(m[1]); } catch (e1) {
var um = m[1].match(/"url"\\s*:\\s*"(https?:\\/\\/[^"]+)"/);
if (um) { pd = { url: um[1], encrypt: 0, from: '' }; }
}
if (pd) {
var pu = pd.url || '';
var enc = pd.encrypt || 0;
if (enc === 1) {
try { pu = decodeURIComponent(pu); } catch (e2) {}
} else if (enc === 2) {
try { pu = decodeURIComponent(atob(pu)); } catch (e3) {}
}
var pul = (pu || '').toLowerCase();
if (pul.indexOf('.m3u8') > -1 || pul.indexOf('.mp4') > -1) {
input = pu;
} else if (pu) {
var from = pd.from || '';
var ap = 'lb';
if (from === 'qsvip') { ap = 'qs'; }
else if (from === 'JD4K') { ap = 'jd'; }
input = 'https://v.attzy.com/ap/' + ap + '/?url=' + encodeURIComponent(pu);
}
}
} else {
var dm = html.match(/(https?:\\/\\/[^"'\\s<>]+\\.m3u8[^"'\\s<>]*)/);
if (dm) { input = dm[1]; }
}
} catch (e) {}
`
};