Initial Commit
This commit is contained in:
95
sites/tv.trueid.net/tv.trueid.net.channels.xml
Normal file
95
sites/tv.trueid.net/tv.trueid.net.channels.xml
Normal file
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="tv.trueid.net">
|
||||
<channels>
|
||||
<channel lang="th" xmltv_id="AmarinTV.th" site_id="amarintv-hd">Amarin 34 HD</channel>
|
||||
<channel lang="th" xmltv_id="AnimalPlanetSoutheastAsia.sg" site_id="animalplanet-hd">Animal Planet HD</channel>
|
||||
<channel lang="th" xmltv_id="AsianFoodNetwork.sg" site_id="asian-food-channel">Asian Food Network</channel>
|
||||
<channel lang="th" xmltv_id="AXNThailand.th" site_id="axn-hd">AXN HD</channel>
|
||||
<channel lang="th" xmltv_id="BBCEarthAsia.uk" site_id="bbc-earth-hd">BBC Earth HD</channel>
|
||||
<channel lang="th" xmltv_id="BBCLifestyleAsia.uk" site_id="bbc-life-style">BBC Lifestyle</channel>
|
||||
<channel lang="th" xmltv_id="BBCWorldNewsAsiaPacific.uk" site_id="bbc-world-news-hd">BBC World News HD</channel>
|
||||
<channel lang="th" xmltv_id="BBTVChannel7.th" site_id="ch7-hd">BBTV Channel 7</channel>
|
||||
<channel lang="th" xmltv_id="beINSports1Thailand.th" site_id="bein-sports-hd1">BeIn Sports 1 HD</channel>
|
||||
<channel lang="th" xmltv_id="beINSports2Thailand.th" site_id="bein-sports-hd2">BeIn Sports 2 HD</channel>
|
||||
<channel lang="th" xmltv_id="CartoonNetworkAsia.sg" site_id="hybrid-cartoon-network">Cartoon Network</channel>
|
||||
<channel lang="th" xmltv_id="CCTV4Asia.cn" site_id="cctv">CCTV</channel>
|
||||
<channel lang="th" xmltv_id="Channel3.th" site_id="ch3-hd">Channel 3 HD</channel>
|
||||
<channel lang="th" xmltv_id="Channel8.th" site_id="ch8">Thai Channel 8</channel>
|
||||
<channel lang="th" xmltv_id="CNBCAsia.sg" site_id="cnbc">CNBC</channel>
|
||||
<channel lang="th" xmltv_id="CNNInternationalAsiaPacific.hk" site_id="cnn-hd">CNN HD</channel>
|
||||
<channel lang="th" xmltv_id="CrimePlusInvestigationAsia.sg" site_id="crime-investigation">Crime + Investigation</channel>
|
||||
<channel lang="th" xmltv_id="DiscoveryAsia.sg" site_id="discoveryasia">Discovery Asia</channel>
|
||||
<channel lang="th" xmltv_id="DiscoveryChannelSoutheastAsia.sg" site_id="discoverychannel">Discovery Channel</channel>
|
||||
<channel lang="th" xmltv_id="DreamWorksChannelAsia.us" site_id="dreamworks-hd">DreamWorks TV HD</channel>
|
||||
<channel lang="th" xmltv_id="FashionTVAsia.fr" site_id="fashion-tv">FashionTV</channel>
|
||||
<channel lang="th" xmltv_id="FoodNetworkAsia.sg" site_id="food-network-hd">Food Network HD</channel>
|
||||
<channel lang="th" xmltv_id="GEM.sg" site_id="gem">Gem</channel>
|
||||
<channel lang="th" xmltv_id="GMM25.th" site_id="gmm25">GMM 25</channel>
|
||||
<channel lang="th" xmltv_id="HistoryAsia.us" site_id="history-channel-hd">History HD</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="KMTV.kr" site_id="hybrid-kmtv-hd">KMTV HD</channel>
|
||||
<channel lang="th" xmltv_id="LifetimeAsia.us" site_id="life-time">Lifetime</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="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="hybrid-nba-tv">NBA TV</channel>
|
||||
<channel lang="th" xmltv_id="NBT2HD.th" site_id="nbt">NBT 2</channel>
|
||||
<channel lang="th" xmltv_id="NHKWorldPremium.jp" site_id="nhk-world-tv">NHK World</channel>
|
||||
<channel lang="th" xmltv_id="NickelodeonAsia.sg" site_id="nickelodeon">Nickelodeon</channel>
|
||||
<channel lang="th" xmltv_id="NickJrAsia.sg" site_id="nickjr-hd">Nick Jr HD</channel>
|
||||
<channel lang="th" xmltv_id="One31.th" site_id="one-hd">One 31</channel>
|
||||
<channel lang="th" xmltv_id="OutdoorChannelInternational.us" site_id="outdoor-channel">Outdoor Channel</channel>
|
||||
<channel lang="th" xmltv_id="ParamountNetworkThailand.th" site_id="hybrid-paramount-hd">Paramount Network HD</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="rtl-entertainment">Rock Entertainment</channel>
|
||||
<channel lang="th" xmltv_id="ROCKExtreme.sg" site_id="rtl-extreme">Rock Extreme</channel>
|
||||
<channel lang="th" xmltv_id="SPOTV2.kr" site_id="spotv2-hd">SpoTV 2</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.sg" site_id="tcl-hd">TLC HD</channel>
|
||||
<channel lang="th" xmltv_id="TNN16.th" site_id="hybrid-3-tnn16">TNN 16</channel>
|
||||
<channel lang="th" xmltv_id="TNN2.th" site_id="tnn-2">TNN 2</channel>
|
||||
<channel lang="th" xmltv_id="True4U.th" site_id="true4u">True 4U</channel>
|
||||
<channel lang="th" xmltv_id="TrueAsianMore.th" site_id="hybrid-true-asian-more">True Asian More</channel>
|
||||
<channel lang="th" xmltv_id="TrueChineseMore.th" site_id="true-chinese-more-hd">True Chinese More</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="TrueFilmAsia.th" site_id="film-asia-hd">True Film Asia</channel>
|
||||
<channel lang="th" xmltv_id="TrueFilm1.th" site_id="true-film-hd">True Film HD</channel>
|
||||
<channel lang="th" xmltv_id="TrueFilm2.th" site_id="true-film-hd-2">True Film HD 2</channel>
|
||||
<channel lang="th" xmltv_id="TrueKoreanMore.th" site_id="true-korean-more-hd">True Korean More</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="TruePremierFootball1.th" site_id="truepremierfootballhd1">True Premier Football 1</channel>
|
||||
<channel lang="th" xmltv_id="TruePremierFootball2.th" site_id="truepremierfootballhd2">True Premier Football 2</channel>
|
||||
<channel lang="th" xmltv_id="TruePremierFootball3.th" site_id="truepremierfootballhd3">True Premier Football 3</channel>
|
||||
<channel lang="th" xmltv_id="TruePremierFootball4.th" site_id="truepremierfootballhd4">True Premier Football 4</channel>
|
||||
<channel lang="th" xmltv_id="TruePremierFootball5.th" site_id="truepremierfootballhd5">True Premier Football 5</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="TrueSports5.th" site_id="truesport-5">TrueSport 5</channel>
|
||||
<channel lang="th" xmltv_id="TrueSports7.th" site_id="truesport-7">TrueSport 7</channel>
|
||||
<channel lang="th" xmltv_id="TrueSports1.th" site_id="hybrid-truesport-hd">TrueSport HD</channel>
|
||||
<channel lang="th" xmltv_id="TrueSports2.th" site_id="truesport-hd-2">TrueSport HD 2</channel>
|
||||
<channel lang="th" xmltv_id="TrueSports3.th" site_id="hybrid-truesport-hd-3">TrueSport HD 3</channel>
|
||||
<channel lang="th" xmltv_id="TrueSports4.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 HD</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="TV5MondeAsia.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.hk" site_id="tvn">TVN</channel>
|
||||
<channel lang="th" xmltv_id="WarnerTVAsia.us" site_id="hybrid-warner-tv-hd">Warner TV HD</channel>
|
||||
<channel lang="th" xmltv_id="Workpoint23.th" site_id="workpointtv">Workpoint 23</channel>
|
||||
</channels>
|
||||
</site>
|
||||
66
sites/tv.trueid.net/tv.trueid.net.config.js
Normal file
66
sites/tv.trueid.net/tv.trueid.net.config.js
Normal file
@@ -0,0 +1,66 @@
|
||||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
delay: 5000,
|
||||
site: 'tv.trueid.net',
|
||||
days: 2,
|
||||
url: function ({ channel, date }) {
|
||||
return `https://tv.trueid.net/tvguide/all/${channel.site_id}/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
request: {
|
||||
jar: null
|
||||
},
|
||||
parser: function ({ content, channel }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.title,
|
||||
icon: parseIcon(item),
|
||||
start: parseStart(item),
|
||||
stop: parseStop(item)
|
||||
})
|
||||
})
|
||||
|
||||
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 $ = cheerio.load(content)
|
||||
const nextData = $('#__NEXT_DATA__').html()
|
||||
const data = JSON.parse(nextData)
|
||||
if (
|
||||
!data ||
|
||||
!data.props ||
|
||||
!data.props.pageProps ||
|
||||
!data.props.pageProps.listEPG ||
|
||||
!Array.isArray(data.props.pageProps.listEPG.data)
|
||||
)
|
||||
return null
|
||||
|
||||
return data.props.pageProps.listEPG.data.find(ch => ch.slug === channel.site_id)
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
const data = parseContent(content, channel)
|
||||
if (!data || !Array.isArray(data.programList)) return []
|
||||
|
||||
return data.programList
|
||||
}
|
||||
42
sites/tv.trueid.net/tv.trueid.net.test.js
Normal file
42
sites/tv.trueid.net/tv.trueid.net.test.js
Normal file
@@ -0,0 +1,42 @@
|
||||
// NODE_OPTIONS=--insecure-http-parser npx epg-grabber --config=sites/tv.trueid.net/tv.trueid.net.config.js --channels=sites/tv.trueid.net/tv.trueid.net.channels.xml --output=guide.xml --timeout=30000 --days=2
|
||||
|
||||
const { parser, url } = 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 parse response', () => {
|
||||
const result = parser({ date, channel, content }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2021-10-28T19:00:00.000Z',
|
||||
stop: '2021-10-28T21:00:00.000Z',
|
||||
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([])
|
||||
})
|
||||
Reference in New Issue
Block a user