Merge pull request #599 from iptv-org/update-mncvision.id

Update mncvision.id
This commit is contained in:
Aleksandr Statciuk 2022-03-10 01:45:36 +03:00 committed by GitHub
commit fe5fcfb31b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 187 additions and 12 deletions

View file

@ -30,7 +30,7 @@ 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)
@ -54,7 +54,7 @@ module.exports = {
const stop = start.add(duration, 'm')
programs.push({
title: parseTitle(item),
description: await loadDescription(item),
description: await loadDescription(item, channel),
start,
stop
})
@ -84,12 +84,17 @@ module.exports = {
}
}
async function loadDescription(item) {
async function loadDescription(item, channel) {
const cookies = {
en: 's1nd0vL=jgs82rfmntm362uvdbknng4l5n4lq4u4;',
id: 's1nd0vL=bfh2v7qvrsso7ck6pama3ane6bfv5k5g;'
}
const cookie = cookies[channel.lang]
const $item = cheerio.load(item)
const progUrl = $item('a').attr('href')
if (!progUrl) return null
const data = await axios
.get(progUrl)
.get(progUrl, { headers: { 'X-Requested-With': 'XMLHttpRequest', cookie } })
.then(r => r.data)
.catch(console.log)
if (!data) return null

View file

@ -1,5 +1,6 @@
// node ./scripts/channels.js --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_id.channels.xml
// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id_id.channels.xml --output=guide.xml --days=2
// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id_id-id.channels.xml --output=guide.xml --days=2
// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id_id-en.channels.xml --output=guide.xml --days=2
const { parser, url, request } = require('./mncvision.id.config.js')
const axios = require('axios')
@ -12,9 +13,15 @@ dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2021-11-12', 'YYYY-MM-DD').startOf('d')
const channel = {
const channelID = {
site_id: '203',
xmltv_id: 'AnimalPlanetSoutheastAsia.us'
xmltv_id: 'AnimalPlanetSoutheastAsia.us',
lang: 'id'
}
const channelEN = {
site_id: '203',
xmltv_id: 'AnimalPlanetSoutheastAsia.us',
lang: 'en'
}
const setCookie = [
's1nd0vL=0qpsmm7dpjmi7nt8d2h5epf16rmgg8a8; expires=Sat, 05-Mar-2022 15:44:22 GMT; Max-Age=7200; path=/; HttpOnly'
@ -33,13 +40,18 @@ it('can generate valid request headers', () => {
})
it('can generate valid request data', () => {
const result = request.data({ channel, date })
const result = request.data({ channel: channelID, date })
expect(result._boundary).toBe('X-EPG-BOUNDARY')
})
it('can parse response', done => {
it('can parse response in Indonesian', done => {
axios.get.mockImplementation((url, options = {}) => {
if (url === 'https://www.mncvision.id/schedule/detail/2022030500000041/Hey-Duggee-S3-Ep-22/1') {
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: `<!DOCTYPE html><html lang="en"><head></head><body><blockquote class="bloquet synopsis">
Nikmati suasana kehidupan koloni anjing laut di kawasan pantai barat Afrika Selatan. </blockquote></body></html>`
@ -57,7 +69,7 @@ it('can parse response', done => {
return Promise.resolve({ data: '' })
})
parser({ date, content: content0, headers: { 'set-cookie': setCookie } })
parser({ date, content: content0, headers: { 'set-cookie': setCookie }, channel: channelID })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
@ -87,10 +99,65 @@ it('can parse response', done => {
})
})
it('can parse response in English', done => {
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: `<!DOCTYPE html><html lang="en"><head></head><body><blockquote class="bloquet synopsis">
While Castiel investigates the disappearance of a local teen, Sam and Dean are visited by an old friend. </blockquote></body></html>`
})
} else if (
url === 'https://www.mncvision.id/schedule/table/startno/50' &&
options.headers &&
options.headers['Cookie'] === setCookie.join(';')
) {
return Promise.resolve({
data: content50
})
}
return Promise.resolve({ data: '' })
})
parser({ date, content: content0, headers: { 'set-cookie': setCookie }, channel: channelEN })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2021-11-11T17:00:00.000Z',
stop: '2021-11-11T17:07:00.000Z',
title: 'Hey Duggee S3, Ep 22',
description:
'While Castiel investigates the disappearance of a local teen, Sam and Dean are visited by an old friend.'
},
{
start: '2021-11-12T01:25:00.000Z',
stop: '2021-11-12T01:32:00.000Z',
title: 'Hey Duggee S1, Ep 46',
description: null
}
])
done()
})
.catch(error => {
done(error)
})
})
it('can handle empty guide', done => {
parser({
date,
channel,
channel: channelID,
content: `<!DOCTYPE html><html lang="en"><head></head><body></body></html>`
})
.then(result => {

View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="mncvision.id">
<channels>
<channel lang="en" xmltv_id="ABCAustraliaAsia.au" site_id="350">ABC Australia Asia</channel>
<channel lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="331">Aljazeera English</channel>
<channel lang="en" xmltv_id="AlQuranAlKareemTV.sa" site_id="93">Al Quran Al Kareem TV</channel>
<channel lang="en" xmltv_id="AnimalPlanetSoutheastAsia.us" site_id="203">Animal Planet Southeast Asia</channel>
<channel lang="en" xmltv_id="AnimaxAsia.jp" site_id="157">Animax Asia</channel>
<channel lang="en" xmltv_id="ANTV.id" site_id="115">ANTV</channel>
<channel lang="en" xmltv_id="ArirangWorld.kr" site_id="351">Arirang World</channel>
<channel lang="en" xmltv_id="AsianFoodNetwork.sg" site_id="240">Asian Food Network</channel>
<channel lang="en" xmltv_id="AXNEastAsia.us" site_id="154">AXN East Asia</channel>
<channel lang="en" xmltv_id="BabyTVAsia.uk" site_id="40">Baby TV Asia</channel>
<channel lang="en" xmltv_id="BBCEarthAsia.uk" site_id="200">BBC Earth Asia</channel>
<channel lang="en" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="332">BBC World News Asia Pacific</channel>
<channel lang="en" xmltv_id="BeInSports1Indonesia.qa" site_id="305">BeIn Sports 1 Indonesia</channel>
<channel lang="en" xmltv_id="BeInSports3Indonesia.qa" site_id="306">BeIn Sports 3 Indonesia</channel>
<channel lang="en" xmltv_id="BeritaSatuNewsChannel.id" site_id="103">Berita Satu News Channel</channel>
<channel lang="en" xmltv_id="Besmart.id" site_id="112">Besmart</channel>
<channel lang="en" xmltv_id="BloombergTVAsia.us" site_id="338">Bloomberg TV Asia</channel>
<channel lang="en" xmltv_id="BoomerangSouthEastAsia.us" site_id="39">Boomerang South East Asia</channel>
<channel lang="en" xmltv_id="CartoonNetworkAsia.us" site_id="47">Cartoon Network Asia</channel>
<channel lang="en" xmltv_id="CBeebiesAsia.uk" site_id="41">CBeebies Asia</channel>
<channel lang="en" xmltv_id="CelestialClassicMovies.hk" site_id="22">Celestial Classic Movies</channel>
<channel lang="en" xmltv_id="CelestialMoviesIndonesia.hk" site_id="20">Celestial Movies Indonesia</channel>
<channel lang="en" xmltv_id="CGTN.cn" site_id="353">CGTN</channel>
<channel lang="en" xmltv_id="CGTNDocumentary.cn" site_id="205">CGTN Documentary</channel>
<channel lang="en" xmltv_id="CinemaxAsia.us" site_id="8">Cinemax Asia</channel>
<channel lang="en" xmltv_id="CNA.sg" site_id="330">CNA</channel>
<channel lang="en" xmltv_id="CNBCAsiaPacific.us" site_id="337">CNBC Asia-Pacific</channel>
<channel lang="en" xmltv_id="CNNInternationalAsiaPacific.us" site_id="333">CNN International Asia Pacific</channel>
<channel lang="en" xmltv_id="CrimePlusInvestigationAsia.us" site_id="207">Crime + Investigation Asia</channel>
<channel lang="en" xmltv_id="DiscoveryChannelSoutheastAsia.us" site_id="201">Discovery Channel Southeast Asia</channel>
<channel lang="en" xmltv_id="DWEnglish.de" site_id="357">DW English</channel>
<channel lang="en" xmltv_id="Ent.id" site_id="86">Ent</channel>
<channel lang="en" xmltv_id="FightSports.us" site_id="304">Fight Sports</channel>
<channel lang="en" xmltv_id="FMN.id" site_id="150">FMN</channel>
<channel lang="en" xmltv_id="FoxNewsChannel.us" site_id="335">Fox News Channel</channel>
<channel lang="en" xmltv_id="France24English.fr" site_id="352">France 24 English</channel>
<channel lang="en" xmltv_id="Galaxy.id" site_id="13">Galaxy</channel>
<channel lang="en" xmltv_id="GalaxyPremium.id" site_id="12">Galaxy Premium</channel>
<channel lang="en" xmltv_id="GTV.id" site_id="81">GTV</channel>
<channel lang="en" xmltv_id="HBOAsia.us" site_id="7">HBO Asia</channel>
<channel lang="en" xmltv_id="HBOFamilyAsia.us" site_id="9">HBO Family Asia</channel>
<channel lang="en" xmltv_id="HBOHits.us" site_id="10">HBO Hits</channel>
<channel lang="en" xmltv_id="HBOSignatureAsia.us" site_id="6">HBO Signature Asia</channel>
<channel lang="en" xmltv_id="HGTVAsia.us" site_id="245">HGTV Asia</channel>
<channel lang="en" xmltv_id="HistoryAsia.us" site_id="206">History Asia</channel>
<channel lang="en" xmltv_id="Hits.sg" site_id="160">Hits</channel>
<channel lang="en" xmltv_id="HitsMovies.sg" site_id="11">Hits Movies</channel>
<channel lang="en" xmltv_id="IDXChannel.id" site_id="100">IDX Channel</channel>
<channel lang="en" xmltv_id="IMC.id" site_id="14">IMC</channel>
<channel lang="en" xmltv_id="Indosiar.id" site_id="78">Indosiar</channel>
<channel lang="en" xmltv_id="Ie.id" site_id="96">Ie</channel>
<channel lang="en" xmltv_id="INews.id" site_id="83">INews</channel>
<channel lang="en" xmltv_id="JakTV.id" site_id="113">Jak TV</channel>
<channel lang="en" xmltv_id="KidsTV.id" site_id="46">Kids TV</channel>
<channel lang="en" xmltv_id="Kix.hk" site_id="161">Kix</channel>
<channel lang="en" xmltv_id="KompasTV.id" site_id="106">Kompas TV</channel>
<channel lang="en" xmltv_id="Life.id" site_id="91">Life</channel>
<channel lang="en" xmltv_id="LifestyleFashion.id" site_id="90">Lifestyle &amp; Fashion</channel>
<channel lang="en" xmltv_id="LifetimeAsia.us" site_id="167">Lifetime Asia</channel>
<channel lang="en" xmltv_id="MetroTV.id" site_id="107">Metro TV</channel>
<channel lang="en" xmltv_id="MiaoMi.hk" site_id="38">Miao Mi</channel>
<channel lang="en" xmltv_id="MNCNews.id" site_id="84">MNC News</channel>
<channel lang="en" xmltv_id="MNCSports.id" site_id="102">MNC Sports</channel>
<channel lang="en" xmltv_id="MNCSports2.id" site_id="98">MNC Sports 2</channel>
<channel lang="en" xmltv_id="MNCSports3.id" site_id="99">MNC Sports 3</channel>
<channel lang="en" xmltv_id="MNCTV.id" site_id="82">MNC TV</channel>
<channel lang="en" xmltv_id="MShopSignature.id" site_id="88">M Shop Signature</channel>
<channel lang="en" xmltv_id="MShopSuperSale.id" site_id="79">M Shop Super Sale!</channel>
<channel lang="en" xmltv_id="MusicTV.id" site_id="111">Music TV</channel>
<channel lang="en" xmltv_id="MuslimTV.id" site_id="92">Muslim TV</channel>
<channel lang="en" xmltv_id="NationalGeographicAsia.us" site_id="202">National Geographic Asia</channel>
<channel lang="en" xmltv_id="NationalGeographicWildAsia.us" site_id="204">National Geographic Wild Asia</channel>
<channel lang="en" xmltv_id="NET.id" site_id="116">NET</channel>
<channel lang="en" xmltv_id="NHKWorldJapan.jp" site_id="355">NHK World Japan</channel>
<channel lang="en" xmltv_id="NHKWorldPremium.jp" site_id="354">NHK World Premium</channel>
<channel lang="en" xmltv_id="NickelodeonSouthEastAsia.us" site_id="49">Nickelodeon South East Asia</channel>
<channel lang="en" xmltv_id="NickJrAsia.us" site_id="37">Nick Jr Asia</channel>
<channel lang="en" xmltv_id="OKTV.id" site_id="95">OK TV</channel>
<channel lang="en" xmltv_id="One.in" site_id="164">One</channel>
<channel lang="en" xmltv_id="QuranTV.sa" site_id="93">Quran TV</channel>
<channel lang="en" xmltv_id="RCTI.id" site_id="80">RCTI</channel>
<channel lang="en" xmltv_id="SCTV.id" site_id="89">SCTV</channel>
<channel lang="en" xmltv_id="SEAToday.id" site_id="336">SEA Today</channel>
<channel lang="en" xmltv_id="SoccerChannel.id" site_id="101">Soccer Channel</channel>
<channel lang="en" xmltv_id="SpoTV.kr" site_id="307">SPOTV</channel>
<channel lang="en" xmltv_id="SpoTV2.kr" site_id="308">SPOTV 2</channel>
<channel lang="en" xmltv_id="TawafTV.id" site_id="105">Tawaf TV</channel>
<channel lang="en" xmltv_id="Thrill.hk" site_id="19">Thrill</channel>
<channel lang="en" xmltv_id="TLCSoutheastAsia.us" site_id="248">TLC Southeast Asia</channel>
<channel lang="en" xmltv_id="Trans7.id" site_id="110">Trans 7</channel>
<channel lang="en" xmltv_id="TransTV.id" site_id="87">Trans TV</channel>
<channel lang="en" xmltv_id="TVNMoviesIndonesia.kr" site_id="25">TVN Movies Indonesia</channel>
<channel lang="en" xmltv_id="TVNPremiumIndonesia.kr" site_id="158">TVN Premium Indonesia</channel>
<channel lang="en" xmltv_id="TVOne.id" site_id="97">TVOne</channel>
<channel lang="en" xmltv_id="TVRINasional.id" site_id="118">TVRI Nasional</channel>
<channel lang="en" xmltv_id="VisionPrime.id" site_id="94">Vision Prime</channel>
<channel lang="en" xmltv_id="WarnerTVSoutheastAsia.us" site_id="163">Warner TV Southeast Asia</channel>
<channel lang="en" xmltv_id="ZeeBioskop.in" site_id="23">Zee Bioskop</channel>
</channels>
</site>