diff --git a/js/ITalkBBTV.js b/js/ITalkBBTV.js new file mode 100644 index 00000000..ad4dd869 --- /dev/null +++ b/js/ITalkBBTV.js @@ -0,0 +1,181 @@ +function getNuxtData(html) { + var m = html.match(/window\.__NUXT__=(.*?);<\/script>/s); + if (!m) { + return null; + } + return eval(m[1]); +} + +function pickPic(obj) { + if (!obj) return ''; + var poster = (((obj.images || {}).poster) || [])[0]; + var landscape = (((obj.images || {}).landscape) || [])[0]; + var imgUrl = obj.imgUrl || ''; + return poster || landscape || imgUrl; +} + +function joinStars(stars) { + if (!Array.isArray(stars)) return ''; + return stars.map(function (it) { + return it.name || ''; + }).filter(Boolean).join('/'); +} + +function uniqueById(list) { + var map = {}; + return (list || []).filter(function (it) { + var id = it && it.vod_id; + if (!id || map[id]) return false; + map[id] = 1; + return true; + }); +} + +function makeVodFromSeries(series, fallbackName) { + if (!series) return null; + var categoryId = Array.isArray(series.category_id) ? (series.category_id[0] || '') : (series.category_id || ''); + var rootId = series.root_id || ''; + var seriesId = series.id || series.series_id || ''; + var route = rootId === '66b1d25cf2dde82c215f9b59' ? 'shortsPlay' : 'play'; + var typeName = series.rootName || series.categoryName || ''; + var remark = series.latest_episode_name || series.latest_episode_shortname || (series.episode_count ? ('更新至' + series.episode_count) : ''); + return { + vod_id: route + '$' + seriesId, + vod_name: series.name || fallbackName || '', + vod_pic: pickPic(series), + vod_remarks: remark, + vod_year: series.released_at ? new Date(series.released_at * 1000).getFullYear() + '' : '', + type_name: typeName, + vod_content: series.description || '', + vod_actor: joinStars(((series.stars || {}).actor) || []), + vod_director: joinStars(((series.stars || {}).director) || []) + }; +} + +function makeVodFromCard(card) { + if (!card) return null; + var series = card.series || card.target || card; + var vod = makeVodFromSeries(series, card.name || card.title || ''); + if (!vod) return null; + if (!vod.vod_name) { + vod.vod_name = card.name || card.title || ''; + } + if (!vod.vod_pic) { + vod.vod_pic = pickPic(card) || ((card.image || {}).poster || '') || ((card.image || {}).landscape || ''); + } + if (!vod.vod_remarks) { + vod.vod_remarks = card.description || ''; + } + return vod; +} + +var rule = { + title: 'ITalkBBTV', + host: 'https://www.italkbbtv.com', + url: '/fyclass/fyfilter', + searchable: 2, + quickSearch: 1, + filterable: 0, + play_parse: true, + class_name: '电视剧&电影&综艺&动画', + class_url: 'drama/62c670dc1dca2d424404499c&movie/62ac4ef36e0b5a13ed291544&variety/62ce7417c7daaa4a5d3fea14&cartoon/62ac4e6e4beefe53586478ca', + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0', + 'Referer': 'https://www.italkbbtv.com/' + }, + limit: 24, + 推荐: '*', + 一级: $js.toString(() => { + var link = input; + if (MY_PAGE && MY_PAGE > 1) { + link += (link.indexOf('?') > -1 ? '&' : '?') + 'page=' + MY_PAGE; + } + var html = request(link); + var nuxt = getNuxtData(html); + var list = []; + if (nuxt && nuxt.state && nuxt.state.pageList) { + var parts = MY_CATE.split('/'); + var alias = parts[0]; + var cid = parts[1]; + var keyMap = { + drama: 'dramaSeriesLists', + movie: 'movieSeriesLists', + variety: 'varietySeriesLists', + cartoon: 'cartoonSeriesLists', + shorts: 'shortsSeriesLists' + }; + var store = nuxt.state.pageList[keyMap[alias]] || {}; + var data = store[cid] || {}; + list = data.series || []; + } + VODS = uniqueById(list.map(function (it) { + return makeVodFromSeries(it); + }).filter(Boolean)); + }), + 二级: $js.toString(() => { + var parts = input.split('$'); + var route = parts[0] || 'play'; + var sid = parts[1] || ''; + var html = request(HOST + '/' + route + '/' + sid); + var nuxt = getNuxtData(html); + var play = (((nuxt || {}).state || {}).play) || {}; + var info = play.SeriesInfo || {}; + var eps = play.EpisodeList || []; + var vod = makeVodFromSeries(info) || { vod_id: input }; + var tabs = route === 'shortsPlay' ? 'ITalkBB短剧' : 'ITalkBB'; + var playUrl = eps.map(function (ep) { + var name = ep.shortname || ep.name || ''; + return name + '$' + route + '@' + sid + '@' + (ep.id || ''); + }).filter(Boolean).join('#'); + vod.vod_id = input; + vod.vod_name = info.name || vod.vod_name || ''; + vod.vod_pic = pickPic(info) || vod.vod_pic || ''; + vod.type_name = info.rootName || info.categoryName || vod.type_name || ''; + vod.vod_content = info.description || vod.vod_content || ''; + vod.vod_actor = joinStars((((info || {}).stars || {}).actor) || []); + vod.vod_director = joinStars((((info || {}).stars || {}).director) || []); + vod.vod_remarks = info.latest_episode_name || info.latest_episode_shortname || vod.vod_remarks || ''; + vod.vod_play_from = tabs; + vod.vod_play_url = playUrl; + VOD = vod; + }), + 搜索: $js.toString(() => { + var html = request(HOST + '/?keyword=' + encodeURIComponent(KEY)); + var nuxt = getNuxtData(html); + var list = []; + if (nuxt && nuxt.data && nuxt.data[0]) { + var data = nuxt.data[0]; + var banners = data.bannerData || []; + var groups = data.serverGroupDataList || []; + banners.forEach(function (it) { + list.push(makeVodFromCard(it)); + }); + groups.forEach(function (g) { + (g.list || []).forEach(function (it) { + list.push(makeVodFromCard(it)); + }); + }); + } + list = uniqueById(list.filter(function (it) { + if (!it || !it.vod_name) return false; + var text = [it.vod_name, it.vod_remarks, it.vod_content, it.type_name].join(' '); + return text.indexOf(KEY) > -1; + })); + VODS = list; + }), + lazy: $js.toString(() => { + var parts = input.split('@'); + var route = parts[0] || 'play'; + var sid = parts[1] || ''; + var eid = parts[2] || ''; + var url = HOST + '/' + route + '/' + sid; + if (eid) { + url += '?ep=' + eid; + } + input = { + jx: 0, + parse: 1, + url: url + }; + }) +}; diff --git a/tools/dianshi.json b/tools/dianshi.json index 9db6f2d9..57e3ff5a 100644 --- a/tools/dianshi.json +++ b/tools/dianshi.json @@ -14,6 +14,7 @@ {"key":"闪雷","name":"闪雷┃MP4","type":3,"api":"./lib/drpy2.min.js","ext":"./js/678.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"cupfox_in","name":"茶杯狐┃cupfox.in","type":3,"api":"./lib/drpy2.min.js","ext":"./js/茶杯狐.js","searchable":1,"quickSearch":1,"filterable":0,"changeable":1,"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, +{"key":"italkbbtv","name":"ITalkBB TV","type":3,"api":"./lib/drpy2.min.js","ext":"./js/ITalkBBTV.js","searchable":1,"quickSearch":1,"filterable":0,"changeable":1,"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"qiletv","name":"奇乐影视","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":"./json/奇乐.json","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, diff --git a/tools/jsm.json b/tools/jsm.json index d26e5f94..c5493782 100644 --- a/tools/jsm.json +++ b/tools/jsm.json @@ -15,6 +15,7 @@ {"key":"新闪雷","name":"新闪雷┃MP4","type":3,"api":"./lib/drpy2.min.js","ext":"./js/新闪雷.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"cupfox_in","name":"茶杯狐┃cupfox.in","type":3,"api":"./lib/drpy2.min.js","ext":"./js/茶杯狐.js","searchable":1,"quickSearch":1,"filterable":0,"changeable":1,"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, +{"key":"italkbbtv","name":"ITalkBB TV","type":3,"api":"./lib/drpy2.min.js","ext":"./js/ITalkBBTV.js","searchable":1,"quickSearch":1,"filterable":0,"changeable":1,"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"qiletv","name":"奇乐影视","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":"./json/奇乐.json","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType":2},