123lib

node v4.9.1
version: 1.0.1
endpointsharetweet
let endpoint = require("@runkit/msms/endpoint-express/latest"); let _rq = require("request"); let rq = require("request-promise"); let cheerio = require("cheerio"); base_url = decode('aHR0cHM6Ly8xMjNtb3ZpZXNoZC50bw=='); rq.defaults({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36', referer: base_url, jar: _rq.jar() }); function decode(str){return new Buffer(str, 'base64').toString()} function encode(str){return new Buffer(str).toString('base64')}
function getEpisodes(data){ return rq({ uri: base_url + '/ajax/v2_get_episodes/' + data.id }) .then(raw=>{ let srcId = {}; let re = /loadEpisode\((\d+),\s*(\d+)\s*\)[^>]+>([^<]+)</g, match; while (match = re.exec(raw)){ if(!srcId[match[1]])srcId[match[1]] = []; srcId[match[1]].push({ episodeId: match[2], title: match[3], link: (match[1].match(/(10|8)/))? data.host + '/watch/' + match[2] + '/' + data.secret: data.host + '/watch/' + match[2] }); } data.episodes = srcId; data.host = ''; // delete data.secret; return data; }) // .then(getSource) ; } function getSecret(data){ return rq(data.secretUrl).then(x=>{ eval(x); data.secretUrl = ''; data.secret = encode(xx+'::'+xy); return data; }); } function getMovieDetail(url, option){ let data = {}; option = Object.assign({host: ''}, option); url = base_url + url.replace(base_url, ''); if(!url.match(/\/watching\.html$/)) url += '/watching.html' return rq(url).then(raw=>{ return { id: raw.match(/id:\s*"([^"]+)"/)[1], title: raw.match(/og:title"\s+content="([^"]+)"/)[1], description: raw.match(/og:description"\s+content="([^"]+)"/)[1], image: raw.match(/og:image"\s+content="([^"]+)"/)[1], secretUrl: raw.match(/"(http[^"]+slug=[^"]+)"/)[1], host: option.host }; }) .then(getSecret) .then(getEpisodes) // .then(data=>getSource(data.secretUrl, data)); }
function getSource(id, secret){ if(!secret) return rq({uri: base_url + '/ajax/load_embed/' + id, json: true}); secret = decode(secret).split('::') return rq({ uri: base_url + '/ajax/v3_get_sources/' + id, qs: {xx:secret[0], xy:secret[1]}, json: true }); }
// getList({page:2}).then(console.log); function getList(option){ option = Object.assign({ search: false, type: 'all', sort: 'latest', page: '1', quality: 'all' }, option); if (option.search) option.search = option.search.trim().replace(/\s+/g, '+'); function makeUrl(){ let urlPart = [base_url, 'movie/filter', option.type, option.sort, 'all', 'all', 'all', 'all', option.quality, option.page]; if (option.search) urlPart = [base_url,'movie/search', option.search, option.page]; // console.log(urlPart.join('/')); return urlPart.join('/'); } return rq(makeUrl()).then(cheerio.load) .then($=>{ let pagination = $('ul.pagination').first(); let pages = pagination.find('li>a[data-ci-pagination-page]'); return { data: $('div[data-movie-id]').toArray() .map(x=>{ x = $(x); let episode = x.find('.mli-eps'); return { title: x.find('a[href]').attr('title'), link: x.find('a[href]').attr('href').replace(base_url, option.host || ''), img: x.find('img[data-original]').attr('data-original'), quality: x.find('span.mli-quality').text() || 'HD', isSeries: !!episode.length, latestEpisode: episode.find('i').text(), } }), currentPage: +(pagination.find('li.active>a').text() || '1'), totalPage: +((pages.length>0)?pages.last().attr('data-ci-pagination-page'): '1') } }); }
let app = endpoint(module.exports); app.use((req,res,next)=>{ req.baseUrl = req.protocol + '://' + req.get('host') + process.env.RUNKIT_MOUNT_PATH; next(); }); app.get('/search/:q', (req, res)=>{ getList(Object.assign({},req.query,{search:req.params.q})) .then(data=>res.json(data)).catch(err=>res.status(500).json(err)); }); app.get('/detail:href(/*)', (req, res)=>{ getMovieDetail(req.params.href, {host: req.baseUrl}) .then(data=>res.json(data)).catch(err=>res.status(500).json(err)); }); app.get('/watch/:id/:secret?', (req, res)=>{ getSource(req.params.id, req.params.secret) .then(data=>res.json(data)).catch(err=>res.status(500).json(err)); }); app.get('/:type(movie|series|all)?/:page([0-9]+)?', (req, res)=>{ getList(Object.assign({host: req.baseUrl + '/detail'}, req.params, req.query)) .then(data=>res.json(data)).catch(err=>res.status(500).json(err)); // res.json(Object.assign({host: req.baseUrl + '/detail'}, req.params, req.query)); }); app.get('*', (req, res)=>{ res.status(404).json({error: 'Just go away.'}); });
Loading…

no comments

    sign in to comment