mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Merge pull request #1032 from iptv-org/add-tv24.co.uk
Add guide from tv24.co.uk
This commit is contained in:
commit
07ba6572e0
5 changed files with 274 additions and 0 deletions
17
.github/workflows/tv24.co.uk.yml
vendored
Normal file
17
.github/workflows/tv24.co.uk.yml
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
name: tv24.co.uk
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 3 * * *'
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: [_trigger]
|
||||
types:
|
||||
- completed
|
||||
jobs:
|
||||
load:
|
||||
uses: ./.github/workflows/_load.yml
|
||||
with:
|
||||
site: ${{github.workflow}}
|
||||
secrets:
|
||||
APP_ID: ${{ secrets.APP_ID }}
|
||||
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
|
1
sites/tv24.co.uk/__data__/content.html
Normal file
1
sites/tv24.co.uk/__data__/content.html
Normal file
File diff suppressed because one or more lines are too long
91
sites/tv24.co.uk/tv24.co.uk.config.js
Normal file
91
sites/tv24.co.uk/tv24.co.uk.config.js
Normal file
|
@ -0,0 +1,91 @@
|
|||
const dayjs = require('dayjs')
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'tv24.co.uk',
|
||||
url: function ({ channel, date }) {
|
||||
return `https://tv24.co.uk/x/channel/${channel.site_id}/0/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content)
|
||||
items.forEach(item => {
|
||||
const prev = programs[programs.length - 1]
|
||||
const $item = cheerio.load(item)
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start.isBefore(prev.start)) {
|
||||
start = start.add(1, 'd')
|
||||
date = date.add(1, 'd')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.add(30, 'm')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
let html = await axios
|
||||
.get(`https://tv24.co.uk/x/settings/addremove`)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
let $ = cheerio.load(html)
|
||||
const nums = $('li')
|
||||
.toArray()
|
||||
.map(item => $(item).data('channel'))
|
||||
html = await axios
|
||||
.get(`https://tv24.co.uk`, {
|
||||
headers: {
|
||||
Cookie: `selectedChannels=${nums.join(',')}`
|
||||
}
|
||||
})
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
$ = cheerio.load(html)
|
||||
const items = $('li.c').toArray()
|
||||
|
||||
return items.map(item => {
|
||||
const name = $(item).find('h3').text().trim()
|
||||
const link = $(item).find('.channel').attr('href')
|
||||
const [_, site_id] = link.match(/\/channel\/(.*)/) || [null, null]
|
||||
|
||||
return {
|
||||
site_id,
|
||||
name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('h3').text()
|
||||
}
|
||||
|
||||
function parseDescription($item) {
|
||||
return $item('p').text()
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const time = $item('.time').text()
|
||||
|
||||
return dayjs.utc(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD h:mma')
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $('.program').toArray()
|
||||
}
|
53
sites/tv24.co.uk/tv24.co.uk.test.js
Normal file
53
sites/tv24.co.uk/tv24.co.uk.test.js
Normal file
|
@ -0,0 +1,53 @@
|
|||
// npm run channels:parse -- --config=./sites/tv24.co.uk/tv24.co.uk.config.js --output=./sites/tv24.co.uk/tv24.co.uk_uk.channels.xml
|
||||
// npx epg-grabber --config=sites/tv24.co.uk/tv24.co.uk.config.js --channels=sites/tv24.co.uk/tv24.co.uk_uk.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url } = require('./tv24.co.uk.config.js')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
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('2022-08-28', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'bbc-two',
|
||||
xmltv_id: 'BBCTwo.uk'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe('https://tv24.co.uk/x/channel/bbc-two/0/2022-08-28')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
||||
const results = parser({ content, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2022-08-28T05:05:00.000Z',
|
||||
stop: '2022-08-28T06:05:00.000Z',
|
||||
title: "Gardeners' World",
|
||||
description:
|
||||
'Arit Anderson discovers a paradise garden in Cambridge which has become a focal point for the local community, and Frances Tophill shares the joy of collecting and saving heirloom vegetable seeds on a visit to Pembrokeshire.'
|
||||
})
|
||||
|
||||
expect(results[22]).toMatchObject({
|
||||
start: '2022-08-29T05:30:00.000Z',
|
||||
stop: '2022-08-29T06:00:00.000Z',
|
||||
title: 'Animal Park',
|
||||
description:
|
||||
"One of the park's vultures has laid an egg. It is ten years since Longleat had a successfully reared vulture chick, so the keepers send Hamza to find out if the parents are incubating their egg."
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
content: ''
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
112
sites/tv24.co.uk/tv24.co.uk_uk.channels.xml
Normal file
112
sites/tv24.co.uk/tv24.co.uk_uk.channels.xml
Normal file
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="tv24.co.uk">
|
||||
<channels>
|
||||
<channel lang="en" xmltv_id="4Seven.uk" site_id="4seven">4Seven</channel>
|
||||
<channel lang="en" xmltv_id="5Action.uk" site_id="5-action-1">5 Action</channel>
|
||||
<channel lang="en" xmltv_id="5Select.uk" site_id="5select">5SELECT</channel>
|
||||
<channel lang="en" xmltv_id="5USA.uk" site_id="5usa">5USA</channel>
|
||||
<channel lang="en" xmltv_id="Alarabiya.ae" site_id="al-arabiya">Al Arabiya</channel>
|
||||
<channel lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="al-jazeera-english">Al Jazeera English</channel>
|
||||
<channel lang="en" xmltv_id="AriseNews.uk" site_id="arise">ARISE</channel>
|
||||
<channel lang="en" xmltv_id="Babestation.uk" site_id="babestation-1">Babestation</channel>
|
||||
<channel lang="en" xmltv_id="BBCFour.uk" site_id="bbc-four">BBC Four</channel>
|
||||
<channel lang="en" xmltv_id="BBCFourHD.uk" site_id="bbc-four-hd">BBC Four HD</channel>
|
||||
<channel lang="en" xmltv_id="BBCNews.uk" site_id="bbc-news">BBC News</channel>
|
||||
<channel lang="en" xmltv_id="BBCOneHD.uk" site_id="bbc-one-hd-england">BBC One HD (England)</channel>
|
||||
<channel lang="en" xmltv_id="BBCOneLondon.uk" site_id="bbc-one-london">BBC One London</channel>
|
||||
<channel lang="en" xmltv_id="BBCParliament.uk" site_id="bbc-parliament">BBC Parliament</channel>
|
||||
<channel lang="en" xmltv_id="BBCRedButton1.uk" site_id="bbc-red-button-1">BBC Red Button 1</channel>
|
||||
<channel lang="en" xmltv_id="BBCThree.uk" site_id="bbc-three">BBC Three</channel>
|
||||
<channel lang="en" xmltv_id="BBCTwo.uk" site_id="bbc-two">BBC Two</channel>
|
||||
<channel lang="en" xmltv_id="BBCTwoHD.uk" site_id="bbc-two-hd">BBC Two HD</channel>
|
||||
<channel lang="en" xmltv_id="CBBC.uk" site_id="cbbc">CBBC</channel>
|
||||
<channel lang="en" xmltv_id="CBeebiesUK.uk" site_id="cbeebies">CBeebies</channel>
|
||||
<channel lang="en" xmltv_id="CBSRealityUK.uk" site_id="cbs-reality">CBS Reality</channel>
|
||||
<channel lang="en" xmltv_id="ChallengeUK.uk" site_id="challenge-tv">Challenge TV</channel>
|
||||
<channel lang="en" xmltv_id="Channel4.uk" site_id="channel-4">Channel 4</channel>
|
||||
<channel lang="en" xmltv_id="Channel4LondonPlus1.uk" site_id="channel-4-1">Channel 4 +1</channel>
|
||||
<channel lang="en" xmltv_id="Channel5.uk" site_id="channel-5">Channel 5</channel>
|
||||
<channel lang="en" xmltv_id="Channel5Plus1.uk" site_id="channel-5-1">Channel 5+1</channel>
|
||||
<channel lang="en" xmltv_id="CreateandCraft.uk" site_id="create-and-craft-freeview">Create and Craft (Freeview)</channel>
|
||||
<channel lang="en" xmltv_id="Davejavu.uk" site_id="dave-ja-vu">Dave Ja Vu</channel>
|
||||
<channel lang="en" xmltv_id="DaveUK.uk" site_id="dave">Dave</channel>
|
||||
<channel lang="en" xmltv_id="DMAXUK.uk" site_id="dmax">DMAX</channel>
|
||||
<channel lang="en" xmltv_id="DramaUK.uk" site_id="drama">Drama</channel>
|
||||
<channel lang="en" xmltv_id="E4UK.uk" site_id="e4">E4</channel>
|
||||
<channel lang="en" xmltv_id="Film4UK.uk" site_id="film4">Film4</channel>
|
||||
<channel lang="en" xmltv_id="FoodNetworkUK.uk" site_id="food-network">Food Network</channel>
|
||||
<channel lang="en" xmltv_id="GBNews.uk" site_id="gb-news">GB News</channel>
|
||||
<channel lang="en" xmltv_id="HGTVUK.uk" site_id="hgtv">HGTV</channel>
|
||||
<channel lang="en" xmltv_id="IdealWorld.uk" site_id="ideal-world-freeview">Ideal World (Freeview)</channel>
|
||||
<channel lang="en" xmltv_id="ITV2.uk" site_id="itv2">ITV2</channel>
|
||||
<channel lang="en" xmltv_id="ITV3.uk" site_id="itv3">ITV3</channel>
|
||||
<channel lang="en" xmltv_id="ITV4.uk" site_id="itv4">ITV4</channel>
|
||||
<channel lang="en" xmltv_id="ITVBe.uk" site_id="itv-be">ITV BE</channel>
|
||||
<channel lang="en" xmltv_id="KissTV.uk" site_id="kiss">Kiss</channel>
|
||||
<channel lang="en" xmltv_id="LondonLive.uk" site_id="london-live">London Live</channel>
|
||||
<channel lang="en" xmltv_id="More4UK.uk" site_id="more-4">More 4</channel>
|
||||
<channel lang="en" xmltv_id="PlanetKnowledge.uk" site_id="planet-knowledge">Planet Knowledge</channel>
|
||||
<channel lang="en" xmltv_id="Pop.uk" site_id="pop">Pop</channel>
|
||||
<channel lang="en" xmltv_id="QuestRedUK.uk" site_id="quest-red">Quest Red</channel>
|
||||
<channel lang="en" xmltv_id="QuestRedUKPlus1.uk" site_id="quest-red-1">Quest Red +1</channel>
|
||||
<channel lang="en" xmltv_id="QuestUK.uk" site_id="quest">Quest</channel>
|
||||
<channel lang="en" xmltv_id="QVCStyleUK.uk" site_id="qvc-style-freeview">QVC Style (Freeview)</channel>
|
||||
<channel lang="en" xmltv_id="ReallyUK.uk" site_id="really-uktv">Really</channel>
|
||||
<channel lang="en" xmltv_id="SkyArts.uk" site_id="sky-arts">Sky Arts</channel>
|
||||
<channel lang="en" xmltv_id="SkyNews.uk" site_id="sky-news">Sky News</channel>
|
||||
<channel lang="en" xmltv_id="SmithsonianChannelUK.uk" site_id="smithsonian-channel-sd">Smithsonian Channel SD</channel>
|
||||
<channel lang="en" xmltv_id="TalkingPicturesTV.uk" site_id="talking-pictures-tv">Talking Pictures TV</channel>
|
||||
<channel lang="en" xmltv_id="TBNUK.uk" site_id="tbn-uk">TBN UK</channel>
|
||||
<channel lang="en" xmltv_id="TogetherTV.uk" site_id="together">Together</channel>
|
||||
<channel lang="en" xmltv_id="XpandedTV.uk" site_id="xxxpanded-tv">xxXpanded TV</channel>
|
||||
<channel lang="en" xmltv_id="Yesterday.uk" site_id="yesterday">Yesterday</channel>
|
||||
<channel lang="en" xmltv_id="YesterdayPlus1.uk" site_id="yesterday-1">Yesterday +1</channel>
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="5-star">5*</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="adult-section">Adult Section</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="asharq-news-hd">Asharq News HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="bbc-three-hd">BBC Three HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="blaze-1-freeview">Blaze +1 (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="blaze-freeview">Blaze (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="cbbc-hd">CBBC HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="cbeebies-hd">CBeebies HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="celebration-tv">Celebration TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="channel-4-hd">Channel 4 HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="channel-5-hd">Channel 5 HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="childrens-itv">Children's ITV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="classic-hits">Classic Hits</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="drama-1">Drama +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="e4-1">E4 +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="e4-extra">E4 Extra</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="film4-1">Film4 +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="freeview-information">Freeview Information</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="gems-tv-freeview">Gems TV (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="great-movies">Great Movies</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="great-movies-1">Great Movies +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="great-movies-action">Great Movies Action</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="great-movies-classic">Great Movies Classic</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="great-tv">Great TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv-1">ITV +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv1-hd-london">ITV1 London HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv1-london">ITV1 London</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv2-1-freeview">ITV2 +1 (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv3-freeview-1">ITV3 Freeview +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itv4-1-freeview">ITV4 +1 (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="itvbe-1-freeview">ITVBe +1 (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="ketchup-tv">Ketchup TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="legend">Legend</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="pbs">PBS</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="pick-tv">Pick TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="quest-1">Quest +1</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="qvc-uk">QVC (UK)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="realityxtra-freeview">RealityXtra (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="shopping-quarter">Shopping Quarter</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="smile-tv3">Smile TV3</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="sonlife-broadcasting-network">SonLife Broadcasting Network</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="talk-tv-hd">Talk TV HD</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="tcc">TCC</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="thats-tv">That's TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="tiny-pop-freeview">Tiny Pop (Freeview)</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="vision-tv">Vision TV</channel> -->
|
||||
<!-- <channel lang="en" xmltv_id="" site_id="w">W</channel> -->
|
||||
</channels>
|
||||
</site>
|
Loading…
Add table
Add a link
Reference in a new issue