mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-11 01:20:08 -04:00
Merge pull request #170 from iptv-org/add-tv-trueid-net
Add guide from tv.trueid.net
This commit is contained in:
commit
e1e9358a4b
3 changed files with 203 additions and 0 deletions
70
sites/tv.trueid.net/tv.trueid.net.config.js
Normal file
70
sites/tv.trueid.net/tv.trueid.net.config.js
Normal file
|
@ -0,0 +1,70 @@
|
|||
const jsdom = require('jsdom')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
request: {
|
||||
timeout: 90000,
|
||||
jar: null
|
||||
},
|
||||
site: 'tv.trueid.net',
|
||||
channels: 'tv.trueid.net.channels.xml',
|
||||
url: function ({ channel, date }) {
|
||||
return `https://tv.trueid.net/tvguide/all/${channel.site_id}/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
logo: function ({ content, channel }) {
|
||||
const data = parseContent(content, channel)
|
||||
|
||||
return data ? data.logo : null
|
||||
},
|
||||
parser: function ({ content, channel }) {
|
||||
let programs = []
|
||||
const data = parseContent(content, channel)
|
||||
const items = parseItems(data)
|
||||
items.forEach(item => {
|
||||
const start = parseStart(item)
|
||||
const stop = parseStop(item)
|
||||
|
||||
programs.push({
|
||||
title: item.title,
|
||||
icon: parseIcon(item),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseIcon(item) {
|
||||
return item.detail ? item.detail.thumb : null
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return item.detail ? dayjs.utc(item.detail.start_date) : null
|
||||
}
|
||||
|
||||
function parseStop(item) {
|
||||
return item.detail ? dayjs.utc(item.detail.end_date) : null
|
||||
}
|
||||
|
||||
function parseContent(content, channel) {
|
||||
const virtualConsole = new jsdom.VirtualConsole()
|
||||
virtualConsole.sendTo(console, { omitJSDOMErrors: true })
|
||||
const dom = new jsdom.JSDOM(content, { virtualConsole })
|
||||
const elem = dom.window.document.getElementById('__NEXT_DATA__') || { textContent: '' }
|
||||
if (!elem.textContent) return null
|
||||
const data = JSON.parse(elem.textContent)
|
||||
const channels = data.props?.pageProps?.listEPG?.data || []
|
||||
|
||||
return channels.find(ch => ch.slug === channel.site_id)
|
||||
}
|
||||
|
||||
function parseItems(data) {
|
||||
if (!data) return []
|
||||
|
||||
return data.programList || []
|
||||
}
|
45
sites/tv.trueid.net/tv.trueid.net.test.js
Normal file
45
sites/tv.trueid.net/tv.trueid.net.test.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
// npx epg-grabber --config=sites/tv.trueid.net/tv.trueid.net.config.js --channels=sites/tv.trueid.net/tv.trueid.net_th.channels.xml --days=1 --output=guide.xml
|
||||
|
||||
const { parser, url, logo } = require('./tv.trueid.net.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
|
||||
const date = dayjs.utc('2021-10-28', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'tv-nfl-nba',
|
||||
xmltv_id: 'NFLNBATV.us',
|
||||
name: 'NFL & NBA TV'
|
||||
}
|
||||
const content = `<!DOCTYPE html><html lang="th"><head></head><body><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"lang":"th","listEPG":{"status":200,"data":[{"cmsId":"eXlvvZ4EA5aY","channelCode":"t513","logo":"https://cms.dmpcdn.com/livetv/2021/09/28/2c9c41c0-203b-11ec-9346-6f50de6452df_webp_original.png","title":"NFL \u0026 NBA TV","slug":"tv-nfl-nba","url":"https://tv.trueid.net/live/tv-nfl-nba","programList":[{"title_id":"710569","title":"NBA 2021/22","displayTime":"02:00 - 04:00","time":120,"channel_code":"t513","detail":{"title_id":"710569","title":"NBA 2021/22","display_date":"Fri","start_date":"2021-10-28T19:00:00.000Z","end_date":"2021-10-28T21:00:00.000Z","thumb":"https://epgthumb.dmpcdn.com/thumbnail_large/t513/20211029/20211029_020000.jpg","ep_no":"43","ep_name":"043:MIAMI VS BROOKLYN 28 OCT"},"no":3,"status":true}]}]},"category_name":"all","nowDate":"2021-10-29","metaTitle":"ผังรายการทีวีช่องทีวีทั้งหมด วันที่ 29/10/2021"},"lang":"th","currentUrl":"https://tv.trueid.net/tvguide/all\u0026is_gcp=false"}}</script></body></html>`
|
||||
|
||||
it('can generate valid url', () => {
|
||||
const result = url({ channel, date })
|
||||
expect(result).toBe('https://tv.trueid.net/tvguide/all/tv-nfl-nba/2021-10-28')
|
||||
})
|
||||
|
||||
it('can get logo url', () => {
|
||||
const result = logo({ content, channel })
|
||||
expect(result).toBe(
|
||||
'https://cms.dmpcdn.com/livetv/2021/09/28/2c9c41c0-203b-11ec-9346-6f50de6452df_webp_original.png'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const result = parser({ date, channel, content })
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: dayjs.utc('Thu, 28 Oct 2021 19:00:00 GMT'),
|
||||
stop: dayjs.utc('Thu, 28 Oct 2021 21:00:00 GMT'),
|
||||
title: 'NBA 2021/22',
|
||||
icon: 'https://epgthumb.dmpcdn.com/thumbnail_large/t513/20211029/20211029_020000.jpg'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({ date, channel, content: `{}` })
|
||||
expect(result).toMatchObject([])
|
||||
})
|
88
sites/tv.trueid.net/tv.trueid.net_th.channels.xml
Normal file
88
sites/tv.trueid.net/tv.trueid.net_th.channels.xml
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="tv.trueid.net">
|
||||
<channels>
|
||||
<channel lang="th" xmltv_id="Amarin34HD.th" site_id="amarintv-hd">Amarin 34 HD</channel>
|
||||
<channel lang="th" xmltv_id="AnimalPlanetSoutheastAsia.us" site_id="hybrid-animalplanet-hd">Animal Planet Southeast Asia</channel>
|
||||
<channel lang="th" xmltv_id="AsianFoodNetwork.sg" site_id="asian-food-channel">Asian Food Network</channel>
|
||||
<channel lang="th" xmltv_id="AXNEastAsia.us" site_id="hybrid-axn-hd">AXN East Asia</channel>
|
||||
<channel lang="th" xmltv_id="BBCEarthAsia.uk" site_id="hybrid-bbc-earth-hd">BBC Earth Asia</channel>
|
||||
<channel lang="th" xmltv_id="BBCLifestyleAsia.uk" site_id="bbc-life-style">BBC Lifestyle Asia</channel>
|
||||
<channel lang="th" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="bbc-world-news-hd">BBC World News Asia Pacific</channel>
|
||||
<channel lang="th" xmltv_id="BBTVChannel7.th" site_id="ch7-hd">BBTV Channel 7</channel>
|
||||
<channel lang="th" xmltv_id="BeInSports1Thailand.qa" site_id="bein-sports-hd1">BeIn Sports 1 Thailand</channel>
|
||||
<channel lang="th" xmltv_id="BeInSports2Thailand.qa" site_id="bein-sports-hd2">BeIn Sports 2 Thailand</channel>
|
||||
<channel lang="th" xmltv_id="CartoonNetworkAsia.us" site_id="hybrid-cartoon-network">Cartoon Network Asia</channel>
|
||||
<channel lang="th" xmltv_id="CCTV4Asia.cn" site_id="cctv">CCTV 4 Asia</channel>
|
||||
<channel lang="th" xmltv_id="Channel3.th" site_id="ch3-hd">Channel 3</channel>
|
||||
<channel lang="th" xmltv_id="CNBCAsiaPacific.us" site_id="cnbc">CNBC Asia-Pacific</channel>
|
||||
<channel lang="th" xmltv_id="CNNInternationalAsiaPacific.us" site_id="cnn-hd">CNN International Asia Pacific</channel>
|
||||
<channel lang="th" xmltv_id="DiscoveryAsia.us" site_id="hybrid-discoveryasia">Discovery Asia</channel>
|
||||
<channel lang="th" xmltv_id="DiscoveryChannelSoutheastAsia.us" site_id="hybrid-discoverychannel">Discovery Channel Southeast Asia</channel>
|
||||
<channel lang="th" xmltv_id="DreamWorksTVAsia.us" site_id="hybrid-dreamworks-hd">DreamWorks TV Asia</channel>
|
||||
<channel lang="th" xmltv_id="FashionTVAsia.fr" site_id="hybrid-fashion-tv">FashionTV Asia</channel>
|
||||
<channel lang="th" xmltv_id="FoodNetworkAsia.us" site_id="hybrid-food-network-hd">Food Network Asia</channel>
|
||||
<channel lang="th" xmltv_id="Gem.in" site_id="gem">Gem</channel>
|
||||
<channel lang="th" xmltv_id="GMM25.th" site_id="gmm25">GMM 25</channel>
|
||||
<channel lang="th" xmltv_id="History2Asia.us" site_id="hybrid-h2">History 2 Asia</channel>
|
||||
<channel lang="th" xmltv_id="HistoryAsia.us" site_id="hybrid-history-channel-hd">History Asia</channel>
|
||||
<channel lang="th" xmltv_id="JKN18.th" site_id="jkn18">JKN 18</channel>
|
||||
<channel lang="th" xmltv_id="KBSWorld.kr" site_id="kbs-world-hd">KBS World</channel>
|
||||
<channel lang="th" xmltv_id="KMTVAsia.kr" site_id="hybrid-kmtv-hd">KMTV Asia</channel>
|
||||
<channel lang="th" xmltv_id="LifetimeAsia.us" site_id="hybrid-life-time">Lifetime Asia</channel>
|
||||
<channel lang="th" xmltv_id="LoveNature.ca" site_id="lovenature">Love Nature</channel>
|
||||
<channel lang="th" xmltv_id="MCOTHD.th" site_id="9mcot-hd">MCOT HD</channel>
|
||||
<channel lang="th" xmltv_id="Mono29.th" site_id="mono29">Mono 29</channel>
|
||||
<channel lang="th" xmltv_id="MotorvisionTV.de" site_id="hybrid-motor-vision">Motorvision TV</channel>
|
||||
<channel lang="th" xmltv_id="NationTV.th" site_id="nationtv">Nation TV</channel>
|
||||
<channel lang="th" xmltv_id="NBATV.us" site_id="nba-tv">NBA TV</channel>
|
||||
<channel lang="th" xmltv_id="NBT2.th" site_id="nbt">NBT 2</channel>
|
||||
<channel lang="th" xmltv_id="NFLNetwork.us" site_id="hybrid-nfl-network-hd">NFL Network</channel>
|
||||
<channel lang="th" xmltv_id="NHKWorldPremium.jp" site_id="nhk-world-tv">NHK World Premium</channel>
|
||||
<channel lang="th" xmltv_id="NickelodeonSouthEastAsia.us" site_id="nickelodeon">Nickelodeon South East Asia</channel>
|
||||
<channel lang="th" xmltv_id="NickJrAsia.us" site_id="hybrid-nickjr-hd">Nick Jr Asia</channel>
|
||||
<channel lang="th" xmltv_id="One31.th" site_id="one-hd">One 31</channel>
|
||||
<channel lang="th" xmltv_id="OutdoorChannelInternational.us" site_id="hybrid-outdoor-channel">Outdoor Channel International</channel>
|
||||
<channel lang="th" xmltv_id="ParamountNetworkAsia.us" site_id="hybrid-paramount-hd">Paramount Network Asia</channel>
|
||||
<channel lang="th" xmltv_id="PhoenixInfoNewsChannel.hk" site_id="phoenix-infonews">Phoenix InfoNews Channel</channel>
|
||||
<channel lang="th" xmltv_id="PPTVHD36.th" site_id="pptv-hd">PPTV HD 36</channel>
|
||||
<channel lang="th" xmltv_id="RamaChannel.th" site_id="hybrid-rama-channel">Rama Channel</channel>
|
||||
<channel lang="th" xmltv_id="RockEntertainment.sg" site_id="hybrid-rtl-entertainment">Rock Entertainment</channel>
|
||||
<channel lang="th" xmltv_id="RockExtreme.sg" site_id="hybrid-rtl-extreme">Rock Extreme</channel>
|
||||
<channel lang="th" xmltv_id="SpoTV2.kr" site_id="spotv2-hd">SpoTV 2</channel>
|
||||
<channel lang="th" xmltv_id="ThaiChannel8.th" site_id="ch8">Thai Channel 8</channel>
|
||||
<channel lang="th" xmltv_id="ThaiPBS3.th" site_id="thaipbs">Thai PBS 3</channel>
|
||||
<channel lang="th" xmltv_id="ThairathTV32.th" site_id="thairathtv-hd">Thairath TV 32</channel>
|
||||
<channel lang="th" xmltv_id="ThaiTV5HD1.th" site_id="ch5">Thai TV 5 HD1</channel>
|
||||
<channel lang="th" xmltv_id="TLCSoutheastAsia.us" site_id="hybrid-tcl-hd">TLC Southeast Asia</channel>
|
||||
<channel lang="th" xmltv_id="TNN2.th" site_id="tnn-2">TNN 2</channel>
|
||||
<channel lang="th" xmltv_id="TNN16.th" site_id="hybrid-3-tnn16">TNN 16</channel>
|
||||
<channel lang="th" xmltv_id="True4U.th" site_id="true4u">True 4U</channel>
|
||||
<channel lang="th" xmltv_id="TrueExploreLife.th" site_id="true-explore-life">True Explore Life</channel>
|
||||
<channel lang="th" xmltv_id="TrueExploreSci.th" site_id="true-explore-3">True Explore Sci</channel>
|
||||
<channel lang="th" xmltv_id="TrueExploreWild.th" site_id="hybrid-true-explore-wild">True Explore Wild</channel>
|
||||
<channel lang="th" xmltv_id="TrueFilmHD.th" site_id="true-film-hd">True Film HD</channel>
|
||||
<channel lang="th" xmltv_id="TrueFilmHD2.th" site_id="true-film-hd-2">True Film HD 2</channel>
|
||||
<channel lang="th" xmltv_id="TrueInside.th" site_id="hybrid-true-inside-hd">True Inside</channel>
|
||||
<channel lang="th" xmltv_id="TrueMovieHits.th" site_id="true-movie-hits">True Movie Hits</channel>
|
||||
<channel lang="th" xmltv_id="TruePlookpanya.th" site_id="hybrid-trueplookpanya">True Plookpanya</channel>
|
||||
<channel lang="th" xmltv_id="TrueSelect.th" site_id="hybrid-true-select">True Select</channel>
|
||||
<channel lang="th" xmltv_id="TrueSeries.th" site_id="true-series">True Series</channel>
|
||||
<channel lang="th" xmltv_id="TrueShopping.th" site_id="hybrid-2-true-select-hd">True Shopping</channel>
|
||||
<channel lang="th" xmltv_id="TrueSparkJump.th" site_id="hybrid-toon-channel">True Spark Jump</channel>
|
||||
<channel lang="th" xmltv_id="TrueSparkPlay.th" site_id="hybrid-true-x-zyte">True Spark Play</channel>
|
||||
<channel lang="th" xmltv_id="TrueSport5.th" site_id="truesport-5">TrueSport 5</channel>
|
||||
<channel lang="th" xmltv_id="TrueSport7.th" site_id="truesport-7">TrueSport 7</channel>
|
||||
<channel lang="th" xmltv_id="TrueSportHD.th" site_id="hybrid-truesport-hd">TrueSport HD</channel>
|
||||
<channel lang="th" xmltv_id="TrueSportHD2.th" site_id="truesport-hd-2">TrueSport HD 2</channel>
|
||||
<channel lang="th" xmltv_id="TrueSportHD3.th" site_id="hybrid-truesport-hd-3">TrueSport HD 3</channel>
|
||||
<channel lang="th" xmltv_id="TrueSportHD4.th" site_id="hybrid-truesport-hd-4">TrueSport HD 4</channel>
|
||||
<channel lang="th" xmltv_id="TrueTennis.th" site_id="hybrid-true-tennis-hd">True Tennis</channel>
|
||||
<channel lang="th" xmltv_id="TrueThaiFilm.th" site_id="thai-film">True Thai Film</channel>
|
||||
<channel lang="th" xmltv_id="TrueXZyte.th" site_id="true-x-zyte-hd">True X-Zyte</channel>
|
||||
<channel lang="th" xmltv_id="TV5MondeAsie.fr" site_id="tv5">TV5Monde Asie</channel>
|
||||
<channel lang="th" xmltv_id="TVBXingHe.hk" site_id="tvb-xing-he">TVB Xing He</channel>
|
||||
<channel lang="th" xmltv_id="TVNAsia.kr" site_id="tvn">TVN Asia</channel>
|
||||
<channel lang="th" xmltv_id="WarnerTVSoutheastAsia.us" site_id="hybrid-warner-tv-hd">Warner TV Southeast Asia</channel>
|
||||
<channel lang="th" xmltv_id="Workpoint23.th" site_id="workpointtv">Workpoint 23</channel>
|
||||
</channels>
|
||||
</site>
|
Loading…
Add table
Add a link
Reference in a new issue