Merge pull request #3110 from tohenk/retire-firstmedia.com
Site `firstmedia.com` is retired.
This commit is contained in:
5 files changed
-281
No files matched your search
@@ -1 +0,0 @@
|
||||
{"data":{"entries":{"243":[{"createdAt":"2023-11-05T17:09:34.000Z","updatedAt":"2023-11-05T17:09:34.000Z","id":"009f3a34-8164-4ff9-b981-9dcab1a518fc","channelNo":"243","programmeId":null,"title":"News Live","episode":null,"slug":"news-live","date":"2023-11-08 17:00:00","startTime":"2023-11-08 20:00:00","endTime":"2023-11-08 20:30:00","length":1800,"description":"News Live","long_description":"Up to date news and analysis from around the world.","status":true,"channel":{"id":"7fd7a9a6-af32-c861-d2b0-4ddc7846fad2","key":"AljaInt","no":243,"name":"Al Jazeera International","slug":"al-jazeera-international","website":null,"description":"<p>An international 24-hour English-language It is the first English-language news channel brings you the latest global news stories, analysis from the Middle East & worldwide.</p>","shortDescription":null,"logo":"files/logos/channels/11-NEWS/AlJazeera Int SD-FirstMedia-Chl-243.jpg","externalId":"132","type":"radio","status":true,"chanel":"SD","locale":"id","relationId":"5a6ea4ae-a008-4889-9c68-7a6f1838e81d","onlyfm":null,"genress":[{"id":"1db3bb43-b00d-49af-b272-6c058a8c0b49","name":"International Free View"},{"id":"2e81a4bd-9719-4186-820a-7e035e07be13","name":"News"}]}}]}}}
|
||||
@@ -1,119 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="firstmedia.com" site_id="1" lang="en" xmltv_id="BTV.id@SD">BTV</channel>
|
||||
<channel site="firstmedia.com" site_id="2" lang="en" xmltv_id="">Investor Daily</channel>
|
||||
<channel site="firstmedia.com" site_id="3" lang="en" xmltv_id="">First Llifestyle</channel>
|
||||
<channel site="firstmedia.com" site_id="5" lang="en" xmltv_id="NET.id@SD">NET.</channel>
|
||||
<channel site="firstmedia.com" site_id="7" lang="en" xmltv_id="MetroTV.id@SD">Metro TV</channel>
|
||||
<channel site="firstmedia.com" site_id="10" lang="en" xmltv_id="SCTV.id@SD">SCTV</channel>
|
||||
<channel site="firstmedia.com" site_id="11" lang="en" xmltv_id="Indosiar.id@SD">Indosiar</channel>
|
||||
<channel site="firstmedia.com" site_id="13" lang="en" xmltv_id="ANTV.id@SD">ANTV</channel>
|
||||
<channel site="firstmedia.com" site_id="14" lang="id" xmltv_id="tvOne.id@SD">TV One</channel>
|
||||
<channel site="firstmedia.com" site_id="15" lang="en" xmltv_id="KompasTV.id@SD">Kompas TV</channel>
|
||||
<channel site="firstmedia.com" site_id="16" lang="id" xmltv_id="">TVRI Nasional</channel>
|
||||
<channel site="firstmedia.com" site_id="17" lang="en" xmltv_id="JTV.id@SD">Jawa Pos Media Televisi - JTV</channel>
|
||||
<channel site="firstmedia.com" site_id="21" lang="en" xmltv_id="Reformed21.id@SD">Reformed 21</channel>
|
||||
<channel site="firstmedia.com" site_id="23" lang="en" xmltv_id="">Kairos</channel>
|
||||
<channel site="firstmedia.com" site_id="24" lang="en" xmltv_id="">Sekolah Pelita Harapan Channel - SPH</channel>
|
||||
<channel site="firstmedia.com" site_id="25" lang="en" xmltv_id="">Liga Mahasiswa</channel>
|
||||
<channel site="firstmedia.com" site_id="26" lang="en" xmltv_id="Moji.id@SD">MOJI</channel>
|
||||
<channel site="firstmedia.com" site_id="27" lang="id" xmltv_id="DAAITV.id@SD">DAAI TV</channel>
|
||||
<channel site="firstmedia.com" site_id="29" lang="en" xmltv_id="EWTN.us@AsiaPacific">Eternal Word Television Network (EWTN)</channel>
|
||||
<channel site="firstmedia.com" site_id="30" lang="en" xmltv_id="">KaraOKE Channel</channel>
|
||||
<channel site="firstmedia.com" site_id="33" lang="en" xmltv_id="">Balai Kota Channel</channel>
|
||||
<channel site="firstmedia.com" site_id="34" lang="en" xmltv_id="">Balai Kota Bandung</channel>
|
||||
<channel site="firstmedia.com" site_id="35" lang="id" xmltv_id="RajawaliTV.id@SD">Rajawali TV</channel>
|
||||
<channel site="firstmedia.com" site_id="37" lang="en" xmltv_id="SindoNewsTV.id@SD">MNC News</channel>
|
||||
<channel site="firstmedia.com" site_id="44" lang="id" xmltv_id="TV9Nusantara.id@SD">TV9</channel>
|
||||
<channel site="firstmedia.com" site_id="45" lang="en" xmltv_id="GarudaTV.id@SD">Garuda TV</channel>
|
||||
<channel site="firstmedia.com" site_id="47" lang="en" xmltv_id="QuranTV.sa@SD">Al Quran Al Kareem</channel>
|
||||
<channel site="firstmedia.com" site_id="48" lang="en" xmltv_id="AlSunnahAlNabawiyahTV.sa@SD">Sunnah TV</channel>
|
||||
<channel site="firstmedia.com" site_id="50" lang="en" xmltv_id="">West Java Network</channel>
|
||||
<channel site="firstmedia.com" site_id="51" lang="en" xmltv_id="AXNAsia.sg@Indonesia">AXN</channel>
|
||||
<channel site="firstmedia.com" site_id="52" lang="en" xmltv_id="AnimaxAsia.sg@SD">Animax</channel>
|
||||
<channel site="firstmedia.com" site_id="53" lang="en" xmltv_id="GTV.id@SD">GTV</channel>
|
||||
<channel site="firstmedia.com" site_id="57" lang="en" xmltv_id="ROCKExtreme.sg@SD">Rock Action</channel>
|
||||
<channel site="firstmedia.com" site_id="60" lang="en" xmltv_id="EuronewsEnglish.fr@SD">Euronews</channel>
|
||||
<channel site="firstmedia.com" site_id="61" lang="en" xmltv_id="TBNAsia.us@SD">TBN Asia</channel>
|
||||
<channel site="firstmedia.com" site_id="62" lang="id" xmltv_id="JakTV.id@SD">Jakarta TV - Jak TV</channel>
|
||||
<channel site="firstmedia.com" site_id="65" lang="en" xmltv_id="iNews.id@SD">iNews</channel>
|
||||
<channel site="firstmedia.com" site_id="72" lang="en" xmltv_id="TLCSoutheastAsia.sg@SD">The Learning Channel - TLC</channel>
|
||||
<channel site="firstmedia.com" site_id="76" lang="en" xmltv_id="AsianFoodNetwork.sg@SD">Asian Food Network</channel>
|
||||
<channel site="firstmedia.com" site_id="80" lang="id" xmltv_id="IMC.id@SD">IMC</channel>
|
||||
<channel site="firstmedia.com" site_id="81" lang="en" xmltv_id="FashionTVAsia.fr@SD">Fashion TV</channel>
|
||||
<channel site="firstmedia.com" site_id="86" lang="en" xmltv_id="GMS.id@SD">GMS Channel</channel>
|
||||
<channel site="firstmedia.com" site_id="101" lang="en" xmltv_id="DiscoveryChannel.id@SD">Discovery Channel</channel>
|
||||
<channel site="firstmedia.com" site_id="105" lang="en" xmltv_id="AnimalPlanetSoutheastAsia.sg@SD">Animal Planet</channel>
|
||||
<channel site="firstmedia.com" site_id="124" lang="en" xmltv_id="NickJrAsia.sg@SD">Nick jr.</channel>
|
||||
<channel site="firstmedia.com" site_id="125" lang="en" xmltv_id="NickelodeonAsia.sg@SD">Nickelodeon</channel>
|
||||
<channel site="firstmedia.com" site_id="127" lang="en" xmltv_id="CartoonNetworkAsia.sg@SD">Cartoon Network</channel>
|
||||
<channel site="firstmedia.com" site_id="139" lang="en" xmltv_id="SPOTV.id@SD">SPOTV</channel>
|
||||
<channel site="firstmedia.com" site_id="140" lang="en" xmltv_id="SPOTV2.id@SD">SPOTV 2</channel>
|
||||
<channel site="firstmedia.com" site_id="141" lang="en" xmltv_id="ChampionsTV1.id@SD">Champions TV 1</channel>
|
||||
<channel site="firstmedia.com" site_id="142" lang="en" xmltv_id="ChampionsTV2.id@SD">Champions TV 2</channel>
|
||||
<channel site="firstmedia.com" site_id="145" lang="en" xmltv_id="">First Football</channel>
|
||||
<channel site="firstmedia.com" site_id="151" lang="en" xmltv_id="Eurosport.fr@Asia">Eurosport</channel>
|
||||
<channel site="firstmedia.com" site_id="160" lang="en" xmltv_id="StarGold.in@SD">Star Gold</channel>
|
||||
<channel site="firstmedia.com" site_id="161" lang="en" xmltv_id="ZeeBioskop.id@SD">Zee Bioskop</channel>
|
||||
<channel site="firstmedia.com" site_id="171" lang="en" xmltv_id="StarPlus.in@SD">Star Plus</channel>
|
||||
<channel site="firstmedia.com" site_id="172" lang="en" xmltv_id="ZeeTVAsiaPacific.sg@SD">ZEE TV</channel>
|
||||
<channel site="firstmedia.com" site_id="175" lang="en" xmltv_id="">Zee Cinema</channel>
|
||||
<channel site="firstmedia.com" site_id="176" lang="en" xmltv_id="WION.in@SD">Wion</channel>
|
||||
<channel site="firstmedia.com" site_id="178" lang="en" xmltv_id="ZeeAction.in@SD">Zee Action</channel>
|
||||
<channel site="firstmedia.com" site_id="201" lang="en" xmltv_id="TVBXingHe.hk@SD">TVB Xing He</channel>
|
||||
<channel site="firstmedia.com" site_id="202" lang="en" xmltv_id="PhoenixInfoNewsChannel.hk@SD">Phoenix Info News</channel>
|
||||
<channel site="firstmedia.com" site_id="203" lang="en" xmltv_id="PhoenixChineseChannel.hk@SD">Phoenix Chinese Channel</channel>
|
||||
<channel site="firstmedia.com" site_id="204" lang="en" xmltv_id="CelestialMoviesIndonesia.id@SD">Celestial Movies</channel>
|
||||
<channel site="firstmedia.com" site_id="205" lang="en" xmltv_id="ONE.sg@SD">ONE</channel>
|
||||
<channel site="firstmedia.com" site_id="206" lang="en" xmltv_id="XingKongChina.cn@SD">Xing Kong China</channel>
|
||||
<channel site="firstmedia.com" site_id="208" lang="en" xmltv_id="ZhejiangSatelliteTV.cn@SD">Zhejiang TV</channel>
|
||||
<channel site="firstmedia.com" site_id="209" lang="en" xmltv_id="CCTV4Asia.cn@SD">CCTV 4</channel>
|
||||
<channel site="firstmedia.com" site_id="210" lang="en" xmltv_id="CGTN.cn@SD">CGTN</channel>
|
||||
<channel site="firstmedia.com" site_id="211" lang="en" xmltv_id="TVBSAsia.tw@SD">TVBS Asia</channel>
|
||||
<channel site="firstmedia.com" site_id="212" lang="en" xmltv_id="TVBSNews.tw@SD">TVBS News</channel>
|
||||
<channel site="firstmedia.com" site_id="214" lang="en" xmltv_id="HunanTV.cn@SD">Hunan TV</channel>
|
||||
<channel site="firstmedia.com" site_id="215" lang="en" xmltv_id="DragonTV.cn@SD">Dragon TV</channel>
|
||||
<channel site="firstmedia.com" site_id="216" lang="en" xmltv_id="JiangsuTV.cn@SD">Jiangsu TV</channel>
|
||||
<channel site="firstmedia.com" site_id="217" lang="en" xmltv_id="AnhuiTV.cn@SD">ANHUI TV</channel>
|
||||
<channel site="firstmedia.com" site_id="218" lang="en" xmltv_id="ShenzhenTV.cn@SD">Shenzen TV</channel>
|
||||
<channel site="firstmedia.com" site_id="220" lang="en" xmltv_id="MTV90s.uk@SD">MTV 90s</channel>
|
||||
<channel site="firstmedia.com" site_id="233" lang="en" xmltv_id="DW.de@English">DW English</channel>
|
||||
<channel site="firstmedia.com" site_id="234" lang="en" xmltv_id="ArirangTV.kr@SD">Arirang</channel>
|
||||
<channel site="firstmedia.com" site_id="235" lang="en" xmltv_id="BBCNews.uk@AsiaPacific">BBC World News</channel>
|
||||
<channel site="firstmedia.com" site_id="236" lang="en" xmltv_id="CNNInternational.us@AsiaPacific">CNN International</channel>
|
||||
<channel site="firstmedia.com" site_id="237" lang="en" xmltv_id="FoxNewsChannel.us@SD">Fox News</channel>
|
||||
<channel site="firstmedia.com" site_id="238" lang="en" xmltv_id="RT.ru@SD">Russia Today</channel>
|
||||
<channel site="firstmedia.com" site_id="239" lang="en" xmltv_id="BloombergTV.us@Asia">Bloomberg</channel>
|
||||
<channel site="firstmedia.com" site_id="240" lang="en" xmltv_id="TRTWorld.tr@SD">TRT World</channel>
|
||||
<channel site="firstmedia.com" site_id="242" lang="en" xmltv_id="CNA.sg@SD">Channel News Asia</channel>
|
||||
<channel site="firstmedia.com" site_id="243" lang="en" xmltv_id="AlJazeera.qa@English">Al Jazeera International</channel>
|
||||
<channel site="firstmedia.com" site_id="244" lang="en" xmltv_id="KBSWorld.kr@SD">KBS World</channel>
|
||||
<channel site="firstmedia.com" site_id="245" lang="en" xmltv_id="AlJazeera.qa@Arabic">Al Jazeera Arabic</channel>
|
||||
<channel site="firstmedia.com" site_id="246" lang="en" xmltv_id="France24.fr@English">France 24</channel>
|
||||
<channel site="firstmedia.com" site_id="247" lang="en" xmltv_id="NHKWorldPremium.jp@SD">NHK World Premium</channel>
|
||||
<channel site="firstmedia.com" site_id="251" lang="en" xmltv_id="ABCAustralia.au@SD">ABC Australia</channel>
|
||||
<channel site="firstmedia.com" site_id="258" lang="en" xmltv_id="RaiItalia.it@Asia">Rai Italia</channel>
|
||||
<channel site="firstmedia.com" site_id="260" lang="en" xmltv_id="TV5MondeAsia.fr@SD">TV5 Monde</channel>
|
||||
<channel site="firstmedia.com" site_id="285" lang="en" xmltv_id="HBOAsia.sg@Vietnam">HBO</channel>
|
||||
<channel site="firstmedia.com" site_id="286" lang="en" xmltv_id="HBOSignatureAsia.sg@SD">HBO Signature</channel>
|
||||
<channel site="firstmedia.com" site_id="287" lang="en" xmltv_id="HBOHitsAsia.sg@SD">HBO Hits</channel>
|
||||
<channel site="firstmedia.com" site_id="288" lang="en" xmltv_id="HBOFamilyAsia.sg@SD">HBO Family</channel>
|
||||
<channel site="firstmedia.com" site_id="290" lang="en" xmltv_id="CinemaxAsia.sg@SD">Cinemax</channel>
|
||||
<channel site="firstmedia.com" site_id="300" lang="en" xmltv_id="">First Atmos HD</channel>
|
||||
<channel site="firstmedia.com" site_id="301" lang="en" xmltv_id="">First Highlights HD</channel>
|
||||
<channel site="firstmedia.com" site_id="302" lang="en" xmltv_id="">Jakarta Globe News Channel HD</channel>
|
||||
<channel site="firstmedia.com" site_id="303" lang="en" xmltv_id="">First Lifestyle HD</channel>
|
||||
<channel site="firstmedia.com" site_id="305" lang="en" xmltv_id="HBOAsia.sg@HD">HBO HD</channel>
|
||||
<channel site="firstmedia.com" site_id="306" lang="en" xmltv_id="HBOHitsAsia.sg@HD">HBO Hits HD</channel>
|
||||
<channel site="firstmedia.com" site_id="307" lang="en" xmltv_id="HBOFamilyAsia.sg@HD">HBO Family HD</channel>
|
||||
<channel site="firstmedia.com" site_id="308" lang="en" xmltv_id="HBOSignatureAsia.sg@HD">HBO Signature HD</channel>
|
||||
<channel site="firstmedia.com" site_id="310" lang="en" xmltv_id="CinemaxAsia.sg@HD">Cinemax HD</channel>
|
||||
<channel site="firstmedia.com" site_id="311" lang="en" xmltv_id="CelestialMoviesIndonesia.id@HD">Celestial Movies HD</channel>
|
||||
<channel site="firstmedia.com" site_id="313" lang="en" xmltv_id="WarnerTVAsia.us@SD">Warner TV HD</channel>
|
||||
<channel site="firstmedia.com" site_id="318" lang="en" xmltv_id="Eurosport.fr@AsiaHD">Eurosport HD</channel>
|
||||
<channel site="firstmedia.com" site_id="321" lang="en" xmltv_id="">Champions TV 1 HD</channel>
|
||||
<channel site="firstmedia.com" site_id="322" lang="en" xmltv_id="">Champions TV 2 HD</channel>
|
||||
<channel site="firstmedia.com" site_id="324" lang="en" xmltv_id="">HITS Now HD</channel>
|
||||
<channel site="firstmedia.com" site_id="325" lang="en" xmltv_id="HITSMovies.sg@SD">Hits Movies HD</channel>
|
||||
<channel site="firstmedia.com" site_id="326" lang="en" xmltv_id="HITS.sg@SD">HITS HD</channel>
|
||||
</channels>
|
||||
@@ -1,102 +0,0 @@
|
||||
const dayjs = require('dayjs')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
site: 'firstmedia.com',
|
||||
days: 2,
|
||||
url({ channel, date }) {
|
||||
return `https://api.firstmedia.com/api/content/tv-guide/list?date=${date.format(
|
||||
'DD/MM/YYYY'
|
||||
)}&channel=${channel.site_id}&startTime=1&endTime=24`
|
||||
},
|
||||
parser({ content, channel, date }) {
|
||||
if (!content || !channel || !date) return []
|
||||
|
||||
const programs = []
|
||||
const items = parseItems(content, channel.site_id)
|
||||
.map(item => {
|
||||
item.start = toDelta(item.date, item.startTime)
|
||||
item.stop = toDelta(item.date, item.endTime)
|
||||
return item
|
||||
})
|
||||
.sort((a, b) => a.start - b.start)
|
||||
|
||||
const dt = date.tz('Asia/Jakarta').startOf('d')
|
||||
let lastStop
|
||||
items.forEach(item => {
|
||||
if (lastStop === undefined || item.start >= lastStop) {
|
||||
lastStop = item.stop
|
||||
programs.push({
|
||||
title: parseTitle(item),
|
||||
description: parseDescription(item),
|
||||
start: asDate(parseStart({ item, date: dt })),
|
||||
stop: asDate(parseStop({ item, date: dt }))
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const axios = require('axios')
|
||||
const result = await axios
|
||||
.get(
|
||||
`https://api.firstmedia.com/api/content/tv-guide/list?date=${dayjs().format(
|
||||
'DD/MM/YYYY'
|
||||
)}&channel=&startTime=0&endTime=24`
|
||||
)
|
||||
.then(response => response.data)
|
||||
.catch(console.error)
|
||||
|
||||
const channels = []
|
||||
if (result.data && result.data.entries) {
|
||||
Object.values(result.data.entries).forEach(schedules => {
|
||||
if (schedules.length) {
|
||||
channels.push({
|
||||
lang: 'en',
|
||||
site_id: schedules[0].channel.no,
|
||||
name: schedules[0].channel.name
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return channels
|
||||
}
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
return JSON.parse(content.trim()).data.entries[channel] || []
|
||||
}
|
||||
|
||||
function parseTitle(item) {
|
||||
return item.title
|
||||
}
|
||||
|
||||
function parseDescription(item) {
|
||||
return item.long_description
|
||||
}
|
||||
|
||||
function parseStart({ item, date }) {
|
||||
return date.add(item.start, 'ms')
|
||||
}
|
||||
|
||||
function parseStop({ item, date }) {
|
||||
return date.add(item.stop, 'ms')
|
||||
}
|
||||
|
||||
function toDelta(from, to) {
|
||||
return toDate(to).diff(toDate(from), 'milliseconds')
|
||||
}
|
||||
|
||||
function toDate(date) {
|
||||
return dayjs(date, 'YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
|
||||
function asDate(date) {
|
||||
return date.toISOString()
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
const { url, parser } = require('./firstmedia.com.config.js')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
dayjs.extend(utc)
|
||||
|
||||
const date = dayjs.utc('2023-11-08').startOf('d')
|
||||
const channel = { site_id: '243', xmltv_id: 'AlJazeeraEnglish.qa', lang: 'id' }
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe(
|
||||
'https://api.firstmedia.com/api/content/tv-guide/list?date=08/11/2023&channel=243&startTime=1&endTime=24'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
|
||||
const results = parser({ content, channel, date })
|
||||
|
||||
// All time in Asia/Jakarta
|
||||
// 2023-11-08 17:00:00 -> 2023-11-08 20:00:00 = 2023-11-08 03:00:00
|
||||
// 2023-11-08 17:00:00 -> 2023-11-08 20:30:00 = 2023-11-08 03:30:00
|
||||
expect(results).toMatchObject([
|
||||
{
|
||||
start: '2023-11-07T20:00:00.000Z',
|
||||
stop: '2023-11-07T20:30:00.000Z',
|
||||
title: 'News Live',
|
||||
description: 'Up to date news and analysis from around the world.'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({ content: '' })
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
})
|
||||
@@ -1,21 +0,0 @@
|
||||
# firstmedia.com
|
||||
|
||||
https://www.firstmedia.com/product/tv-guide
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --sites=firstmedia.com
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/firstmedia.com/firstmedia.com.config.js --output=./sites/firstmedia.com/firstmedia.com.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- firstmedia.com
|
||||
```
|
||||
Reference in new issue
Block a user