Merge pull request #42 from iptv-org/add-mncvision-id

Add guide from mncvision.id
This commit is contained in:
Shadix A 2021-08-31 16:48:46 +02:00 committed by GitHub
commit e8796dbb23
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 226 additions and 11 deletions

View file

@ -34,7 +34,7 @@ jobs:
tvtv.ca, tvtv.ca,
tvtv.us, tvtv.us,
tv.lv, tv.lv,
vidio.com, mncvision.id,
tvguide.com, tvguide.com,
tvprofil.com tvprofil.com
] ]

View file

@ -35,8 +35,8 @@ To load a program guide, all you need to do is copy the link to one of the guide
<tr><td align="left" nowrap>🇬🇷 Greece</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/cosmote.gr.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇬🇷 Greece</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/cosmote.gr.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇬🇹 Guatemala</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/mi.tv.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇬🇹 Guatemala</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/mi.tv.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇭🇳 Honduras</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/mi.tv.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇭🇳 Honduras</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/mi.tv.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇮🇩 Indonesia</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/mncvision.id.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇭🇺 Hungary</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/tvprofil.com.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇭🇺 Hungary</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/tvprofil.com.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇮🇩 Indonesia</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/vidio.com.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇮🇹 Italy</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/guidatv.sky.it.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇮🇹 Italy</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/guidatv.sky.it.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇮🇪 Ireland</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/ontvtonight.com.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇮🇪 Ireland</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/ontvtonight.com.guide.xml</code></td></tr>
<tr><td align="left" nowrap>🇰🇿 Kazakhstan</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/tv.yandex.ru.guide.xml</code></td></tr> <tr><td align="left" nowrap>🇰🇿 Kazakhstan</td><td align="left" nowrap><code>https://iptv-org.github.io/epg/guides/tv.yandex.ru.guide.xml</code></td></tr>

42
package-lock.json generated
View file

@ -6,6 +6,7 @@
"": { "": {
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"form-data": "^4.0.0",
"cheerio": "^1.0.0-rc.10", "cheerio": "^1.0.0-rc.10",
"dayjs": "^1.10.4", "dayjs": "^1.10.4",
"epg-grabber": "^0.6.6", "epg-grabber": "^0.6.6",
@ -374,6 +375,7 @@
} }
}, },
"node_modules/domhandler": { "node_modules/domhandler": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
@ -537,16 +539,16 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "2.3.3", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": { "dependencies": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.6", "combined-stream": "^1.0.8",
"mime-types": "^2.1.12" "mime-types": "^2.1.12"
}, },
"engines": { "engines": {
"node": ">= 0.12" "node": ">= 6"
} }
}, },
"node_modules/fs.realpath": { "node_modules/fs.realpath": {
@ -1028,6 +1030,18 @@
"node": ">=0.8" "node": ">=0.8"
} }
}, },
"node_modules/request/node_modules/form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
"node_modules/request/node_modules/tough-cookie": { "node_modules/request/node_modules/tough-cookie": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@ -1698,12 +1712,12 @@
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
}, },
"form-data": { "form-data": {
"version": "2.3.3", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": { "requires": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.6", "combined-stream": "^1.0.8",
"mime-types": "^2.1.12" "mime-types": "^2.1.12"
} }
}, },
@ -2067,6 +2081,16 @@
"uuid": "^3.3.2" "uuid": "^3.3.2"
}, },
"dependencies": { "dependencies": {
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"tough-cookie": { "tough-cookie": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",

View file

@ -11,6 +11,7 @@
"dayjs": "^1.10.4", "dayjs": "^1.10.4",
"epg-grabber": "^0.6.6", "epg-grabber": "^0.6.6",
"epg-parser": "^0.1.3", "epg-parser": "^0.1.3",
"form-data": "^4.0.0",
"glob": "^7.1.6", "glob": "^7.1.6",
"html-to-text": "^7.0.0", "html-to-text": "^7.0.0",
"iconv-lite": "^0.4.24", "iconv-lite": "^0.4.24",

109
sites/mncvision.id.channels.xml Executable file
View file

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="mncvision.id">
<channels>
<channel site_id="350" xmltv_id="ABCAustraliaAsia.au">ABC Australia Asia</channel>
<channel site_id="331" xmltv_id="AlJazeeraEnglish.qa">Al Jazeera English</channel>
<channel site_id="93" xmltv_id="AlQuranAlKareemTV.sa">Al Quran Al Kareem TV</channel>
<channel site_id="203" xmltv_id="AnimalPlanetSoutheastAsia.us">Animal Planet Southeast Asia</channel>
<channel site_id="157" xmltv_id="AnimaxAsia.jp">Animax Asia</channel>
<channel site_id="115" xmltv_id="ANTV.id">ANTV</channel>
<channel site_id="351" xmltv_id="ArirangWorld.kr">Arirang World</channel>
<channel site_id="240" xmltv_id="AsianFoodNetwork.sg">Asian Food Network</channel>
<channel site_id="154" xmltv_id="AXNEastAsia.us">AXN East Asia</channel>
<channel site_id="40" xmltv_id="BabyTVAsia.uk">BabyTV Asia</channel>
<channel site_id="200" xmltv_id="BBCEarthAsia.uk">BBC Earth Asia</channel>
<channel site_id="332" xmltv_id="BBCWorldNewsAsiaPacific.uk">BBC World News Asia Pacific</channel>
<channel site_id="305" xmltv_id="beINSports1Indonesia.qa">beIN Sports 1 Indonesia</channel>
<channel site_id="306" xmltv_id="beINSports2Indonesia.qa">beIN Sports 2 Indonesia</channel>
<channel site_id="103" xmltv_id="BeritaSatuNewsChannel.id">Berita Satu News Channel</channel>
<channel site_id="112" xmltv_id="Besmart.id">Besmart</channel>
<channel site_id="338" xmltv_id="BloombergTVAsia.us">Bloomberg TV Asia</channel>
<channel site_id="39" xmltv_id="BoomerangSouthEastAsia.us">Boomerang South East Asia</channel>
<channel site_id="47" xmltv_id="CartoonNetworkAsia.us">Cartoon Network Asia</channel>
<channel site_id="41" xmltv_id="CBeebiesAsia.uk">CBeebies Asia</channel>
<channel site_id="22" xmltv_id="CelestialClassicMovies.hk">Celestial Classic Movies</channel>
<channel site_id="20" xmltv_id="CelestialMoviesIndonesia.hk">Celestial Movies Indonesia</channel>
<channel site_id="353" xmltv_id="CGTN.cn">CGTN</channel>
<channel site_id="205" xmltv_id="CGTNDocumentary.cn">CGTN Documentary</channel>
<channel site_id="272" xmltv_id="ChannelVInternational.hk">Channel V International</channel>
<channel site_id="8" xmltv_id="CinemaxAsia.us">Cinemax Asia</channel>
<channel site_id="330" xmltv_id="CNA.sg">CNA</channel>
<channel site_id="337" xmltv_id="CNBCAsiaPacific.us">CNBC Asia-Pacific</channel>
<channel site_id="333" xmltv_id="CNNInternationalAsiaPacific.us">CNN International Asia Pacific</channel>
<channel site_id="207" xmltv_id="CrimePlusInvestigationAsia.us">Crime + Investigation Asia</channel>
<channel site_id="201" xmltv_id="DiscoveryChannelSoutheastAsia.us">Discovery Channel Southeast Asia</channel>
<channel site_id="45" xmltv_id="DisneyChannelIndonesia.us">Disney Channel Indonesia</channel>
<channel site_id="43" xmltv_id="DisneyJuniorAsia.us">Disney Junior Asia</channel>
<channel site_id="357" xmltv_id="DWEnglish.de">DW English</channel>
<channel site_id="86" xmltv_id="Ent.id">Ent</channel>
<channel site_id="304" xmltv_id="FightSports.us">Fight Sports</channel>
<channel site_id="150" xmltv_id="FMN.id">FMN</channel>
<channel site_id="16" xmltv_id="FoxActionMovies.us">Fox Action Movies</channel>
<channel site_id="152" xmltv_id="FoxCrimeAsia.us">Fox Crime Asia</channel>
<channel site_id="15" xmltv_id="FoxFamilyMovies.us">Fox Family Movies</channel>
<channel site_id="153" xmltv_id="FoxIndonesia.us">Fox Indonesia</channel>
<channel site_id="156" xmltv_id="FoxLifeIndonesia.us">Fox Life Indonesia</channel>
<channel site_id="14" xmltv_id="FoxMoviesIndonesia.us">Fox Movies Indonesia</channel>
<channel site_id="335" xmltv_id="FoxNewsChannel.us">Fox News Channel</channel>
<channel site_id="302" xmltv_id="FoxSports2Asia.us">Fox Sports 2 Asia</channel>
<channel site_id="303" xmltv_id="FoxSports3Asia.us">Fox Sports 3 Asia</channel>
<channel site_id="301" xmltv_id="FoxSportsAsia.us">Fox Sports Asia</channel>
<channel site_id="352" xmltv_id="France24English.fr">France 24 English</channel>
<channel site_id="81" xmltv_id="GTV.id">GTV</channel>
<channel site_id="7" xmltv_id="HBOAsia.us">HBO Asia</channel>
<channel site_id="9" xmltv_id="HBOFamilyAsia.us">HBO Family Asia</channel>
<channel site_id="10" xmltv_id="HBOHits.us">HBO Hits</channel>
<channel site_id="6" xmltv_id="HBOSignatureAsia.us">HBO Signature Asia</channel>
<channel site_id="245" xmltv_id="HGTVAsia.us">HGTV Asia</channel>
<channel site_id="206" xmltv_id="HistoryAsia.us">History Asia</channel>
<channel site_id="160" xmltv_id="Hits.sg">Hits</channel>
<channel site_id="11" xmltv_id="HitsMovies.sg">Hits Movies</channel>
<channel site_id="100" xmltv_id="IDXChannel.id">IDX Channel</channel>
<channel site_id="78" xmltv_id="Indosiar.id">Indosiar</channel>
<channel site_id="83" xmltv_id="iNews.id">iNews</channel>
<channel site_id="113" xmltv_id="JakTV.id">Jak TV</channel>
<channel site_id="46" xmltv_id="KidsTV.id">Kids TV</channel>
<channel site_id="161" xmltv_id="Kix.hk">Kix</channel>
<channel site_id="106" xmltv_id="KompasTV.id">Kompas TV</channel>
<channel site_id="91" xmltv_id="Life.id">Life</channel>
<channel site_id="90" xmltv_id="LifestyleFashion.id">Lifestyle &amp; Fashion</channel>
<channel site_id="167" xmltv_id="LifetimeAsia.us">Lifetime Asia</channel>
<channel site_id="107" xmltv_id="MetroTV.id">Metro TV</channel>
<channel site_id="38" xmltv_id="MiaoMi.hk">Miao Mi</channel>
<channel site_id="84" xmltv_id="MNCNews.id">MNC News</channel>
<channel site_id="102" xmltv_id="MNCSports.id">MNC Sports</channel>
<channel site_id="82" xmltv_id="MNCTV.id">MNCTV</channel>
<channel site_id="88" xmltv_id="MShopSignature.id">MShop Signature</channel>
<channel site_id="79" xmltv_id="MShopSuperSale.id">MShop Super Sale!</channel>
<channel site_id="111" xmltv_id="MusicTV.id">Music TV</channel>
<channel site_id="92" xmltv_id="MuslimTV.id">Muslim TV</channel>
<channel site_id="247" xmltv_id="NatGeoPeopleAsia.us">Nat Geo People Asia</channel>
<channel site_id="202" xmltv_id="NationalGeographicAsia.us">National Geographic Asia</channel>
<channel site_id="204" xmltv_id="NationalGeographicWildAsia.us">National Geographic Wild Asia</channel>
<channel site_id="116" xmltv_id="NET.id">NET.</channel>
<channel site_id="355" xmltv_id="NHKWorldJapan.jp">NHK World Japan</channel>
<channel site_id="354" xmltv_id="NHKWorldPremium.jp">NHK World Premium</channel>
<channel site_id="37" xmltv_id="NickJrAsia.us">Nick Jr Asia</channel>
<channel site_id="49" xmltv_id="NickelodeonSouthEastAsia.us">Nickelodeon South East Asia</channel>
<channel site_id="95" xmltv_id="OKTV.id">OK TV</channel>
<channel site_id="164" xmltv_id="One.in">One</channel>
<channel site_id="80" xmltv_id="RCTI.id">RCTI</channel>
<channel site_id="89" xmltv_id="SCTV.id">SCTV</channel>
<channel site_id="336" xmltv_id="SEAToday.id">SEA Today</channel>
<channel site_id="101" xmltv_id="SoccerChannel.id">Soccer Channel</channel>
<channel site_id="24" xmltv_id="StarChineseMoviesLegend.hk">Star Chinese Movies Legend</channel>
<channel site_id="18" xmltv_id="StarChineseMoviesSouthEastAsia.hk">Star Chinese Movies South East Asia</channel>
<channel site_id="105" xmltv_id="TawafTV.id">Tawaf TV</channel>
<channel site_id="19" xmltv_id="Thrill.hk">Thrill</channel>
<channel site_id="248" xmltv_id="TLCSoutheastAsia.us">TLC Southeast Asia</channel>
<channel site_id="110" xmltv_id="Trans7.id">Trans 7</channel>
<channel site_id="87" xmltv_id="TransTV.id">Trans TV</channel>
<channel site_id="25" xmltv_id="tvNMoviesIndonesia.kr">tvN Movies Indonesia</channel>
<channel site_id="158" xmltv_id="tvNPremiumIndonesia.kr">tvN Premium Indonesia</channel>
<channel site_id="97" xmltv_id="tvOne.id">tvOne</channel>
<channel site_id="118" xmltv_id="TVRINasional.id">TVRI Nasional</channel>
<channel site_id="94" xmltv_id="VisionPrime.id">Vision Prime</channel>
<channel site_id="163" xmltv_id="WarnerTVSoutheastAsia.us">Warner TV Southeast Asia</channel>
<channel site_id="23" xmltv_id="ZeeBioskop.in">Zee Bioskop</channel>
</channels>
</site>

View file

@ -0,0 +1,81 @@
const FormData = require('form-data')
const jsdom = require('jsdom')
const { JSDOM } = jsdom
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
lang: 'en',
site: 'mncvision.id',
channels: 'mncvision.id.channels.xml',
output: '.gh-pages/guides/mncvision.id.guide.xml',
request: {
method: 'POST',
data: function ({ channel, date }) {
const formData = new FormData()
formData.setBoundary('X-EPG-BOUNDARY')
formData.append('search_model', 'channel')
formData.append('af0rmelement', 'aformelement')
formData.append('fdate', date.format('YYYY-MM-DD'))
formData.append('fchannel', channel.site_id)
formData.append('submit', 'Search')
return formData
},
headers: {
'Content-Type': 'multipart/form-data; boundary=X-EPG-BOUNDARY'
}
},
logo({ channel }) {
return `https://www.mncvision.id/userfiles/image/channel/channel_${channel.site_id}.png`
},
url({ channel }) {
return `https://www.mncvision.id/schedule/table`
},
parser({ content, date }) {
const programs = []
const items = parseItems(content)
items.forEach(item => {
const title = parseTitle(item)
const start = parseStart(item, date)
const duration = parseDuration(item)
const stop = start.add(duration, 'm')
programs.push({ title, start, stop })
})
return programs
}
}
function parseDuration(item) {
let duration = (item.querySelector('td:nth-child(3)') || { textContent: '' }).textContent
const match = duration.match(/(\d{2}):(\d{2})/)
const hours = parseInt(match[1])
const minutes = parseInt(match[2])
return hours * 60 + minutes
}
function parseStart(item, date) {
let time = (item.querySelector('td:nth-child(1)') || { textContent: '' }).textContent
time = `${date.format('DD/MM/YYYY')} ${time}`
return dayjs.tz(time, 'DD/MM/YYYY HH:mm', 'Asia/Jakarta')
}
function parseTitle(item) {
return (item.querySelector('td:nth-child(2) > a') || { textContent: '' }).textContent
}
function parseItems(content) {
const dom = new JSDOM(content)
return dom.window.document.querySelectorAll('tr[valign="top"]')
}