From 47c4d77e7d2997cf56be9946e06dc9469aae9a55 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 11 Mar 2022 14:49:56 +0300 Subject: [PATCH 1/4] Update mncvision.id.test.js --- sites/mncvision.id/mncvision.id.test.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index fcb7a7b7..af9925b7 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -23,9 +23,7 @@ const channelEN = { xmltv_id: 'AnimalPlanetSoutheastAsia.us', lang: 'en' } -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,12 +43,16 @@ it('can generate valid request data', () => { }) it('can parse response in Indonesian', done => { + const setCookie = [ + 's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 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;' + options.headers['Cookie'] === setCookie.join(';') ) { return Promise.resolve({ data: `
@@ -100,12 +102,16 @@ it('can parse response in Indonesian', done => { }) it('can parse response in English', done => { + const setCookie = [ + 's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 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;' + options.headers['Cookie'] === setCookie.join(';') ) { return Promise.resolve({ data: `
From b9e6ea76602ff97c8dca287b8b9bf51ff8f36a2a Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 11 Mar 2022 14:49:59 +0300 Subject: [PATCH 2/4] Update mncvision.id.config.js --- sites/mncvision.id/mncvision.id.config.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 243fbe2e..dc4efde9 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -30,9 +30,8 @@ module.exports = { 'Content-Type': 'multipart/form-data; boundary=X-EPG-BOUNDARY' } }, - async parser({ content, date, headers, channel }) { + async parser({ content, date, headers }) { const programs = [] - let items = parseItems(content) const pages = parsePages(content) const cookies = headers && headers['set-cookie'] ? headers['set-cookie'].join(';') : '' @@ -54,7 +53,7 @@ module.exports = { const stop = start.add(duration, 'm') programs.push({ title: parseTitle(item), - description: await loadDescription(item, channel), + description: await loadDescription(item, cookies), start, stop }) @@ -84,17 +83,12 @@ module.exports = { } } -async function loadDescription(item, channel) { - const cookies = { - en: 's1nd0vL=jgs82rfmntm362uvdbknng4l5n4lq4u4;', - id: 's1nd0vL=bfh2v7qvrsso7ck6pama3ane6bfv5k5g;' - } - const cookie = cookies[channel.lang] +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 From 3bd16933fc20c2e33aafd7b6a893dba1dab645fb Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 11 Mar 2022 15:35:36 +0300 Subject: [PATCH 3/4] Update mncvision.id.test.js --- sites/mncvision.id/mncvision.id.test.js | 66 +++++++++++++++---------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index af9925b7..faa3ee3e 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -23,6 +23,9 @@ const channelEN = { xmltv_id: 'AnimalPlanetSoutheastAsia.us', lang: 'en' } +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
` @@ -43,22 +46,12 @@ it('can generate valid request data', () => { }) it('can parse response in Indonesian', done => { - const setCookie = [ - 's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 GMT; Max-Age=7200; path=/; HttpOnly' + 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'] === setCookie.join(';') - ) { - 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(';') @@ -66,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: '' }) @@ -102,22 +111,12 @@ it('can parse response in Indonesian', done => { }) it('can parse response in English', done => { - const setCookie = [ - 's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 GMT; Max-Age=7200; path=/; HttpOnly' + 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'] === setCookie.join(';') - ) { - 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(';') @@ -125,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: '' }) @@ -164,7 +179,8 @@ it('can handle empty guide', done => { parser({ date, channel: channelID, - content: `` + content: ``, + headers: { 'set-cookie': setCookie } }) .then(result => { expect(result).toMatchObject([]) From 16f91db4bfe1a42581b7d91267a50e01cc069009 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 11 Mar 2022 15:35:40 +0300 Subject: [PATCH 4/4] Update mncvision.id.config.js --- sites/mncvision.id/mncvision.id.config.js | 39 ++++++++++++++++------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index dc4efde9..07111aec 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -30,30 +30,26 @@ module.exports = { 'Content-Type': 'multipart/form-data; boundary=X-EPG-BOUNDARY' } }, - async parser({ content, date, headers }) { + 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, cookies), + description: await loadDescription(item, langCookies), start, stop }) @@ -83,6 +79,27 @@ module.exports = { } } +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')