Site firstmedia.com is retired.

Signed-off-by: Toha <tohenk@yahoo.com>
This commit is contained in:
Toha
2026-04-29 21:37:46 +07:00
parent 15251d6655
commit 74bff45c34
5 changed files with 0 additions and 281 deletions

View File

@@ -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 &amp; 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"}]}}]}}}

View File

@@ -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>

View File

@@ -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()
}

View File

@@ -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([])
})

View File

@@ -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
```