diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 243fbe2e..07111aec 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -32,29 +32,24 @@ module.exports = { }, async parser({ content, date, headers, channel }) { const programs = [] - let items = parseItems(content) + if (!items.length) return programs + const pages = parsePages(content) const cookies = headers && headers['set-cookie'] ? headers['set-cookie'].join(';') : '' for (let url of pages) { - const nextContent = await axios - .get(url, { - headers: { - Cookie: cookies - } - }) - .then(r => r.data) - .catch(console.log) - items = items.concat(parseItems(nextContent)) + items = items.concat(parseItems(await loadNextPage(url, cookies))) } + const langCookies = await loadLangCookies(channel) + for (const item of items) { const start = parseStart(item, date) const duration = parseDuration(item) const stop = start.add(duration, 'm') programs.push({ title: parseTitle(item), - description: await loadDescription(item, channel), + description: await loadDescription(item, langCookies), start, stop }) @@ -84,17 +79,33 @@ module.exports = { } } -async function loadDescription(item, channel) { - const cookies = { - en: 's1nd0vL=jgs82rfmntm362uvdbknng4l5n4lq4u4;', - id: 's1nd0vL=bfh2v7qvrsso7ck6pama3ane6bfv5k5g;' - } - const cookie = cookies[channel.lang] +async function loadNextPage(url, cookies) { + return axios + .get(url, { + headers: { + Cookie: cookies + } + }) + .then(r => r.data) + .catch(console.log) +} + +async function loadLangCookies(channel) { + const lang = channel.lang === 'en' ? 'english' : 'indonesia' + const url = `https://www.mncvision.id/language_switcher/setlang/${lang}/` + + return axios + .get(url) + .then(r => r.headers['set-cookie'].join(';')) + .catch(console.error) +} + +async function loadDescription(item, cookies) { const $item = cheerio.load(item) const progUrl = $item('a').attr('href') if (!progUrl) return null const data = await axios - .get(progUrl, { headers: { 'X-Requested-With': 'XMLHttpRequest', cookie } }) + .get(progUrl, { headers: { 'X-Requested-With': 'XMLHttpRequest', Cookie: cookies } }) .then(r => r.data) .catch(console.log) if (!data) return null diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index fcb7a7b7..faa3ee3e 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -26,6 +26,7 @@ const channelEN = { const setCookie = [ 's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 GMT; Max-Age=7200; path=/; HttpOnly' ] + const content0 = `

Jadwal Tayang Cari

Jadwal Tayang Channel: 41 Tanggal: 2022-03-05
Jam Tayang Program Acara Durasi
00:00Hey Duggee S3, Ep 2200:07
page: 12
` const content50 = `

Jadwal Tayang Cari

Jadwal Tayang Channel: 41 Tanggal: 2022-03-05
Jam Tayang Program Acara Durasi
08:25Hey Duggee S1, Ep 4600:07
page: 12
` @@ -45,18 +46,12 @@ it('can generate valid request data', () => { }) it('can parse response in Indonesian', done => { + const setLangCookie = [ + 's1nd0vL=oj87dbpo7cqbg8fit3295075kodja8hl; expires=Fri, 11-Mar-2022 14:40:17 GMT; Max-Age=7200; path=/; HttpOnly' + ] + axios.get.mockImplementation((url, options = {}) => { if ( - url === 'https://www.mncvision.id/schedule/detail/2022030500000041/Hey-Duggee-S3-Ep-22/1' && - options.headers && - options.headers['X-Requested-With'] === 'XMLHttpRequest' && - options.headers['cookie'] === 's1nd0vL=bfh2v7qvrsso7ck6pama3ane6bfv5k5g;' - ) { - return Promise.resolve({ - data: `
- Nikmati suasana kehidupan koloni anjing laut di kawasan pantai barat Afrika Selatan.
` - }) - } else if ( url === 'https://www.mncvision.id/schedule/table/startno/50' && options.headers && options.headers['Cookie'] === setCookie.join(';') @@ -64,6 +59,22 @@ it('can parse response in Indonesian', done => { return Promise.resolve({ data: content50 }) + } else if (url === 'https://www.mncvision.id/language_switcher/setlang/indonesia/') { + return Promise.resolve({ + headers: { + 'set-cookie': setLangCookie + } + }) + } else if ( + url === 'https://www.mncvision.id/schedule/detail/2022030500000041/Hey-Duggee-S3-Ep-22/1' && + options.headers && + options.headers['X-Requested-With'] === 'XMLHttpRequest' && + options.headers['Cookie'] === setLangCookie.join(';') + ) { + return Promise.resolve({ + data: `
+ Nikmati suasana kehidupan koloni anjing laut di kawasan pantai barat Afrika Selatan.
` + }) } return Promise.resolve({ data: '' }) @@ -100,18 +111,12 @@ it('can parse response in Indonesian', done => { }) it('can parse response in English', done => { + const setLangCookie = [ + 's1nd0vL=4li9qu3olhjl9djrl971opl2tgb27p1v; expires=Fri, 11-Mar-2022 14:26:55 GMT; Max-Age=7200; path=/; HttpOnly' + ] + axios.get.mockImplementation((url, options = {}) => { if ( - url === 'https://www.mncvision.id/schedule/detail/2022030500000041/Hey-Duggee-S3-Ep-22/1' && - options.headers && - options.headers['X-Requested-With'] === 'XMLHttpRequest' && - options.headers['cookie'] === 's1nd0vL=jgs82rfmntm362uvdbknng4l5n4lq4u4;' - ) { - return Promise.resolve({ - data: `
- While Castiel investigates the disappearance of a local teen, Sam and Dean are visited by an old friend.
` - }) - } else if ( url === 'https://www.mncvision.id/schedule/table/startno/50' && options.headers && options.headers['Cookie'] === setCookie.join(';') @@ -119,6 +124,22 @@ it('can parse response in English', done => { return Promise.resolve({ data: content50 }) + } else if (url === 'https://www.mncvision.id/language_switcher/setlang/english/') { + return Promise.resolve({ + headers: { + 'set-cookie': setLangCookie + } + }) + } else if ( + url === 'https://www.mncvision.id/schedule/detail/2022030500000041/Hey-Duggee-S3-Ep-22/1' && + options.headers && + options.headers['X-Requested-With'] === 'XMLHttpRequest' && + options.headers['Cookie'] === setLangCookie.join(';') + ) { + return Promise.resolve({ + data: `
+ While Castiel investigates the disappearance of a local teen, Sam and Dean are visited by an old friend.
` + }) } return Promise.resolve({ data: '' }) @@ -158,7 +179,8 @@ it('can handle empty guide', done => { parser({ date, channel: channelID, - content: `` + content: ``, + headers: { 'set-cookie': setCookie } }) .then(result => { expect(result).toMatchObject([])