mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-09 08:30:06 -04:00
Merge branch 'master' into patch-2025.01.2
This commit is contained in:
commit
a0a48e24ec
313 changed files with 126643 additions and 36500 deletions
30
.github/ISSUE_TEMPLATE/----channel-request.yml
vendored
Normal file
30
.github/ISSUE_TEMPLATE/----channel-request.yml
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
name: ✍️ Channel Request
|
||||
description: Request to add a channel to the guide
|
||||
labels: ['channel request']
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the request as much as possible so we can efficiently process your request.
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Site
|
||||
description: The name of the site
|
||||
placeholder: 'guidatv.sky.it'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Channels
|
||||
description: List of channels to be added
|
||||
placeholder: 'BBC One'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Notes
|
||||
description: Anything else we should know?
|
4
.github/workflows/check.yml
vendored
4
.github/workflows/check.yml
vendored
|
@ -20,7 +20,7 @@ jobs:
|
|||
files_yaml: |
|
||||
js:
|
||||
- tests/**/*.{js,ts}
|
||||
- scripts/**/*.{js,ts}
|
||||
- scripts/**/*.{js,mts,ts}
|
||||
- sites/**/*.{js,ts}
|
||||
channels:
|
||||
- sites/**/*.channels.xml
|
||||
|
@ -40,3 +40,5 @@ jobs:
|
|||
if: steps.files.outputs.channels_any_changed == 'true'
|
||||
run: |
|
||||
npm run channels:lint -- ${{ steps.files.outputs.channels_all_changed_files }}
|
||||
npm run postinstall
|
||||
npm run channels:validate -- ${{ steps.files.outputs.channels_all_changed_files }}
|
14
.github/workflows/update.yml
vendored
14
.github/workflows/update.yml
vendored
|
@ -36,13 +36,15 @@ jobs:
|
|||
run: npm run sites:update
|
||||
- run: git status
|
||||
- name: commit changes to sites.md
|
||||
run: |
|
||||
git add SITES.md
|
||||
git status
|
||||
git commit --allow-empty -m "[Bot] Update SITES.md" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/${{ github.run_id }}) workflow." --no-verify
|
||||
- name: push all changes to the repository
|
||||
if: ${{ !env.ACT && github.ref == 'refs/heads/master' }}
|
||||
run: git push
|
||||
run: |
|
||||
SITE=SITES.md
|
||||
CHANGED=$(git diff ${SITE})
|
||||
if [ -n "${CHANGED}" ]; then
|
||||
git add ${SITE}
|
||||
git commit -m "[Bot] Update ${SITE}" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/${{ github.run_id }}) workflow." --no-verify
|
||||
git push
|
||||
fi
|
||||
- name: generate .api/guides.json
|
||||
run: npm run api:generate
|
||||
- run: git status
|
||||
|
|
127
CONTRIBUTING.md
127
CONTRIBUTING.md
|
@ -8,12 +8,16 @@
|
|||
|
||||
### How to add a channel to the guide?
|
||||
|
||||
Open the [/sites](/sites) folder and select the source that you know has the guide for the channel you want.
|
||||
First, select a site from the [SITES.md](SITES.md) that you know has a guide for the channel you need. Then go to the folder with its config and open the file `*.channels.xml`.
|
||||
|
||||
Then in the selected folder open the file `*.channels.xml` and add to it:
|
||||
Make sure that the desired channel is not already in the list. If it is not, simply add its description to the end of the list as shown here:
|
||||
|
||||
```xml
|
||||
<channel site="SITE" lang="LANGUAGE_CODE" xmltv_id="CHANNEL_ID" site_id="SITE_ID">CHANNEL_NAME</channel>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
...
|
||||
<channel site="SITE" lang="LANGUAGE_CODE" xmltv_id="CHANNEL_ID" site_id="SITE_ID">CHANNEL_NAME</channel>
|
||||
</channels>
|
||||
```
|
||||
|
||||
| Attribute | Description | Example |
|
||||
|
@ -22,28 +26,56 @@ Then in the selected folder open the file `*.channels.xml` and add to it:
|
|||
| LANGUAGE_CODE | Language of the guide ([ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) code). | `en` |
|
||||
| CHANNEL_ID | Channel ID from [iptv-org/database](https://github.com/iptv-org/database). A complete list of supported channels can also be found at https://iptv-org.github.io/. | `BBCOne.uk` |
|
||||
| SITE_ID | Unique ID of the channel used in the source. | `bbc1` |
|
||||
| CHANNEL_NAME | Name of the channel used in the source. | `BBC 1` |
|
||||
| CHANNEL_NAME | Name of the channel used in the source. | `BBC One` |
|
||||
|
||||
After that just commit all changes and send a pull request.
|
||||
After that just [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
|
||||
|
||||
### How to map the channels?
|
||||
|
||||
In order for the guides to be linked with playlists from [iptv-org/iptv](https://github.com/iptv-org/iptv) and also with our other projects, each channel must have the same ID in the description as in our [iptv-org/database](https://github.com/iptv-org/database).
|
||||
|
||||
To check this, select one of the sites in the [SITES.md](SITES.md), open its `*.channels.xml` file and check that all channels have a valid `xmltv_id`. If it is missing somewhere, just copy the matching ID from the [iptv-org.github.io](https://iptv-org.github.io/). If the channel is not in our database yet, you can add it to it through this [form](https://github.com/iptv-org/database/issues/new?assignees=&labels=channels%3Aadd&projects=&template=__channels_add.yml&title=Add%3A+).
|
||||
|
||||
If the `*.channels.xml` file contains many channels without `xmltv_id`, you can speed up the process by running the command in the [Console](https://en.wikipedia.org/wiki/Windows_Console) (or [Terminal](<https://en.wikipedia.org/wiki/Terminal_(macOS)>) if you have macOS):
|
||||
|
||||
```sh
|
||||
npm run channels:edit path/to/channels.xml
|
||||
```
|
||||
|
||||
This way, you can map channels by simply selecting the proper ID from the list:
|
||||
|
||||
```sh
|
||||
? Select xmltv_id for "BBC One" (bbc1): (Use arrow keys)
|
||||
❯ BBC One (BBC1, BBC Television, BBC Television Service) | BBCOne.uk
|
||||
BBC One HD | BBCOneHD.uk
|
||||
Type...
|
||||
Skip
|
||||
```
|
||||
|
||||
Once complete, [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
|
||||
|
||||
### How to add a new source to the repository?
|
||||
|
||||
To do this, you must create a new folder in the [/sites](/sites) with at least 3 files:
|
||||
To do this, you will need to create a new folder in the [/sites](/sites) directory with at least 4 files:
|
||||
|
||||
<details>
|
||||
<summary>example.com.config.js</summary>
|
||||
<br>
|
||||
|
||||
This file describes what kind of request we need to send to get the guide for a particular channel on a certain date. It also describes how to parse the response.
|
||||
This file describes what kind of request we need to send to get the guide for a particular channel on a certain date and how to parse the response.
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
site: 'example.com',
|
||||
url: function ({ channel, date }) {
|
||||
url({ channel, date }) {
|
||||
return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser: function ({ content }) {
|
||||
parser({ content }) {
|
||||
try {
|
||||
return JSON.parse(content)
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -59,39 +91,51 @@ More detailed instructions for this file can be found here: https://github.com/f
|
|||
With this file we can test the previously created config and make sure it works as you expect.
|
||||
|
||||
```js
|
||||
const { url, parser } = require('./example.com.config.js')
|
||||
const { parser, url } = require('./example.com.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('2022-11-18', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk', lang: 'en' }
|
||||
const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' }
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2022-11-18')
|
||||
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = `[{"start":"2022-11-18T01:30:00.000Z","stop":"2022-11-18T02:00:00.000Z","title":"Program 1"}]`
|
||||
const content =
|
||||
'[{"title":"Program 1","start":"2025-01-12T00:00:00.000Z","stop":"2025-01-12T00:30:00.000Z"},{"title":"Program 2","start":"2025-01-12T00:30:00.000Z","stop":"2025-01-12T01:00:00.000Z"}]'
|
||||
|
||||
const results = parser({ content })
|
||||
|
||||
expect(results).toMatchObject([
|
||||
{
|
||||
start: '2022-11-18T01:30:00.000Z',
|
||||
stop: '2022-11-18T02:00:00.000Z',
|
||||
title: 'Program 1'
|
||||
}
|
||||
])
|
||||
expect(results.length).toBe(2)
|
||||
expect(results[0]).toMatchObject({
|
||||
title: 'Program 1',
|
||||
start: '2025-01-12T00:00:00.000Z',
|
||||
stop: '2025-01-12T00:30:00.000Z'
|
||||
})
|
||||
expect(results[1]).toMatchObject({
|
||||
title: 'Program 2',
|
||||
start: '2025-01-12T00:30:00.000Z',
|
||||
stop: '2025-01-12T01:00:00.000Z'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({ content: '' })
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: ''
|
||||
})
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
expect(result).toMatchObject([])
|
||||
})
|
||||
```
|
||||
|
||||
To run the tests you can use the following command:
|
||||
To run all of these tests use the following command:
|
||||
|
||||
```sh
|
||||
npm test --- example.com
|
||||
|
@ -110,21 +154,45 @@ This file contains a list of channels available at the source.
|
|||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<channels>
|
||||
<channel site="example.com" lang="en" xmltv_id="BBCOne.uk" site_id="bbc1">BBC 1</channel>
|
||||
<channel site="example.com" lang="en" xmltv_id="BBCOne.uk" site_id="bbc1">BBC One</channel>
|
||||
</channels>
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
After creating all the files we can make sure that the guide loads correctly and has no errors using the command:
|
||||
<details>
|
||||
<summary>readme.md</summary>
|
||||
<br>
|
||||
|
||||
This file contains instructions on how to use this config.
|
||||
|
||||
````
|
||||
# example.com
|
||||
|
||||
https://example.com
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=example.com
|
||||
```
|
||||
|
||||
If the download is successful, the `guide.xml` file with the ready to use program should appear in the root directory.
|
||||
### Test
|
||||
|
||||
After that, all that remains is to commit all the changes and send a pull request.
|
||||
```sh
|
||||
npm test --- example.com
|
||||
```
|
||||
````
|
||||
|
||||
</details>
|
||||
|
||||
The fastest way to create all these files is to use the command:
|
||||
|
||||
```sh
|
||||
npm run sites:init --- example.com
|
||||
```
|
||||
|
||||
Once you are done working on the config make sure the tests pass, the guide downloads correctly, [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) all changes and send us a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
|
||||
|
||||
## Project Structure
|
||||
|
||||
|
@ -153,8 +221,9 @@ To run scripts use the `npm run <script-name>` command.
|
|||
- `api:generate`: generates a JSON file with all channels for the [iptv-org/api](https://github.com/iptv-org/api) repository.
|
||||
- `channels:lint`: сhecks the channel lists for syntax errors.
|
||||
- `channels:parse`: generates a list of channels based on the site configuration.
|
||||
- `channels:editor`: utility for quick channels markup.
|
||||
- `channels:edit`: utility for quick channels mapping.
|
||||
- `channels:validate`: checks the description of channels for errors.
|
||||
- `sites:init`: creates a new site config from the template.
|
||||
- `sites:update`: updates the list of sites and their status in [SITES.md](SITES.md).
|
||||
- `grab`: downloads a program from a specified source.
|
||||
- `serve`: starts the [web server](https://github.com/vercel/serve).
|
||||
|
|
27
SITES.md
27
SITES.md
|
@ -30,38 +30,42 @@
|
|||
<tr><td><a href="sites/chada.ma">chada.ma</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/chaines-tv.orange.fr">chaines-tv.orange.fr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/clickthecity.com">clickthecity.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/comteco.com.bo">comteco.com.bo</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2239</td></tr>
|
||||
<tr><td><a href="sites/content.astro.com.my">content.astro.com.my</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/cosmotetv.gr">cosmotetv.gr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/cubmu.com">cubmu.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/cyta.com.cy">cyta.com.cy</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/dens.tv">dens.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/digiturk.com.tr">digiturk.com.tr</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2304, https://github.com/iptv-org/epg/issues/2547</td></tr>
|
||||
<tr><td><a href="sites/digiturk.com.tr">digiturk.com.tr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/directv.com">directv.com</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2284</td></tr>
|
||||
<tr><td><a href="sites/directv.com.ar">directv.com.ar</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2339</td></tr>
|
||||
<tr><td><a href="sites/directv.com.uy">directv.com.uy</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/dishtv.in">dishtv.in</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2445</td></tr>
|
||||
<tr><td><a href="sites/dna.fi">dna.fi</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/dsmart.com.tr">dsmart.com.tr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/dstv.com">dstv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/elcinema.com">elcinema.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/ena.skylifetv.co.kr">ena.skylifetv.co.kr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/energeek.cl">energeek.cl</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/entertainment.ie">entertainment.ie</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/epg.112114.xyz">epg.112114.xyz</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/epg.iptvx.one">epg.iptvx.one</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/firstmedia.com">firstmedia.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/flixed.io">flixed.io</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/foxsports.com.au">foxsports.com.au</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/foxtel.com.au">foxtel.com.au</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/freeview.co.uk">freeview.co.uk</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/frikanalen.no">frikanalen.no</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/galamtv.kz">galamtv.kz</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/gatotv.com">gatotv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/getafteritmedia.com">getafteritmedia.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/gigatv.3bbtv.co.th">gigatv.3bbtv.co.th</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/guida.tv">guida.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/guidatv.sky.it">guidatv.sky.it</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/hd-plus.de">hd-plus.de</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2173</td></tr>
|
||||
<tr><td><a href="sites/horizon.tv">horizon.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/hoy.tv">hoy.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/i.mjh.nz">i.mjh.nz</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2556</td></tr>
|
||||
<tr><td><a href="sites/i.mjh.nz">i.mjh.nz</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/i24news.tv">i24news.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/iltalehti.fi">iltalehti.fi</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2396</td></tr>
|
||||
<tr><td><a href="sites/iltalehti.fi">iltalehti.fi</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/indihometv.com">indihometv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/ionplustv.com">ionplustv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/ipko.tv">ipko.tv</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -102,7 +106,7 @@
|
|||
<tr><td><a href="sites/novasports.gr">novasports.gr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/nowplayer.now.com">nowplayer.now.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/nuevosiglo.com.uy">nuevosiglo.com.uy</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/nzxmltv.com">nzxmltv.com</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2557</td></tr>
|
||||
<tr><td><a href="sites/nzxmltv.com">nzxmltv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/ontvtonight.com">ontvtonight.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/orangetv.orange.es">orangetv.orange.es</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/osn.com">osn.com</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -121,7 +125,7 @@
|
|||
<tr><td><a href="sites/programtv.onet.pl">programtv.onet.pl</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/raiplay.it">raiplay.it</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/reportv.com.ar">reportv.com.ar</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/rev.bs">rev.bs</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2255</td></tr>
|
||||
<tr><td><a href="sites/rikstv.no">rikstv.no</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/rotana.net">rotana.net</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/rtb.gov.bn">rtb.gov.bn</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2257</td></tr>
|
||||
<tr><td><a href="sites/rthk.hk">rthk.hk</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -148,6 +152,7 @@
|
|||
<tr><td><a href="sites/superguidatv.it">superguidatv.it</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/taiwanplus.com">taiwanplus.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tapdmv.com">tapdmv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/telebilbao.es">telebilbao.es</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/telenet.tv">telenet.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/teliatv.ee">teliatv.ee</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/telkussa.fi">telkussa.fi</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -157,6 +162,7 @@
|
|||
<tr><td><a href="sites/toonamiaftermath.com">toonamiaftermath.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/turksatkablo.com.tr">turksatkablo.com.tr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv-programme.telecablesat.fr">tv-programme.telecablesat.fr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv-spored.siol.net">tv-spored.siol.net</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.blue.ch">tv.blue.ch</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.cctv.com">tv.cctv.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.dir.bg">tv.dir.bg</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -166,6 +172,7 @@
|
|||
<tr><td><a href="sites/tv.movistar.com.pe">tv.movistar.com.pe</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.nu">tv.nu</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.post.lu">tv.post.lu</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.sfr.fr">tv.sfr.fr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.trueid.net">tv.trueid.net</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.yandex.ru">tv.yandex.ru</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tv.yettel.hu">tv.yettel.hu</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2263</td></tr>
|
||||
|
@ -178,7 +185,7 @@
|
|||
<tr><td><a href="sites/tvcesoir.fr">tvcesoir.fr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvcubana.icrt.cu">tvcubana.icrt.cu</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvgids.nl">tvgids.nl</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2400</td></tr>
|
||||
<tr><td><a href="sites/tvguide.com">tvguide.com</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2542</td></tr>
|
||||
<tr><td><a href="sites/tvguide.com">tvguide.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvguide.myjcom.jp">tvguide.myjcom.jp</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvhebdo.com">tvhebdo.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvheute.at">tvheute.at</a></td><td>🟢</td><td></td></tr>
|
||||
|
@ -186,6 +193,7 @@
|
|||
<tr><td><a href="sites/tvireland.ie">tvireland.ie</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvmi.mt">tvmi.mt</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvmusor.hu">tvmusor.hu</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvmustra.hu">tvmustra.hu</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvpassport.com">tvpassport.com</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2272</td></tr>
|
||||
<tr><td><a href="sites/tvplus.com.tr">tvplus.com.tr</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/tvprofil.com">tvprofil.com</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2399</td></tr>
|
||||
|
@ -195,13 +203,12 @@
|
|||
<tr><td><a href="sites/virginmediatelevision.ie">virginmediatelevision.ie</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/virgintvgo.virginmedia.com">virgintvgo.virginmedia.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/visionplus.id">visionplus.id</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/vivacom.bg">vivacom.bg</a></td><td>🔴</td><td>https://github.com/iptv-org/epg/issues/2270</td></tr>
|
||||
<tr><td><a href="sites/vtm.be">vtm.be</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/walesi.com.fj">walesi.com.fj</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/watch.sportsnet.ca">watch.sportsnet.ca</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/watchyour.tv">watchyour.tv</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/wavve.com">wavve.com</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/web.magentatv.de">web.magentatv.de</a></td><td>🟡</td><td>https://github.com/iptv-org/epg/issues/2570</td></tr>
|
||||
<tr><td><a href="sites/web.magentatv.de">web.magentatv.de</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/webtv.delta.nl">webtv.delta.nl</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/winplay.co">winplay.co</a></td><td>🟢</td><td></td></tr>
|
||||
<tr><td><a href="sites/worldfishingnetwork.com">worldfishingnetwork.com</a></td><td>🟢</td><td></td></tr>
|
||||
|
|
|
@ -48,5 +48,8 @@ export default [
|
|||
|
||||
semi: ['error', 'never']
|
||||
}
|
||||
},
|
||||
{
|
||||
ignores: ['tests/__data__/']
|
||||
}
|
||||
]
|
||||
|
|
3527
package-lock.json
generated
3527
package-lock.json
generated
File diff suppressed because it is too large
Load diff
20
package.json
20
package.json
|
@ -5,13 +5,14 @@
|
|||
"act:update": "act workflow_dispatch -W .github/workflows/update.yml",
|
||||
"api:load": "npx tsx scripts/commands/api/load.ts",
|
||||
"api:generate": "npx tsx scripts/commands/api/generate.ts",
|
||||
"channels:lint": "npx tsx scripts/commands/channels/lint.ts",
|
||||
"channels:lint": "npx tsx scripts/commands/channels/lint.mts",
|
||||
"channels:parse": "npx tsx scripts/commands/channels/parse.ts",
|
||||
"channels:editor": "npx tsx scripts/commands/channels/editor.ts",
|
||||
"channels:edit": "npx tsx scripts/commands/channels/edit.ts",
|
||||
"channels:validate": "npx tsx scripts/commands/channels/validate.ts",
|
||||
"sites:init": "npx tsx scripts/commands/sites/init.ts",
|
||||
"sites:update": "npx tsx scripts/commands/sites/update.ts",
|
||||
"grab": "npx tsx scripts/commands/epg/grab.ts",
|
||||
"lint": "npx eslint \"{scripts,tests,sites}/**/*.{ts,js}\"",
|
||||
"lint": "npx eslint \"{scripts,tests,sites}/**/*.{ts,mts,js}\"",
|
||||
"test": "run-script-os",
|
||||
"test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand",
|
||||
"test:default": "TZ=Pacific/Nauru npx jest --runInBand",
|
||||
|
@ -28,15 +29,17 @@
|
|||
"transform": {
|
||||
"^.+\\.(ts|js)$": "@swc/jest"
|
||||
},
|
||||
"testRegex": "(tests|sites)/(.*?/)?.*test.(js|ts)$",
|
||||
"testMatch": [
|
||||
"<rootDir>/sites/**/*.test.(js|ts)",
|
||||
"<rootDir>/tests/commands/**/*.test.(js|ts)"
|
||||
],
|
||||
"testTimeout": 10000
|
||||
},
|
||||
"dependencies": {
|
||||
"@alex_neo/jest-expect-message": "^1.0.5",
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@freearhey/core": "^0.3.1",
|
||||
"@freearhey/search-js": "^0.1.1",
|
||||
"@freearhey/core": "^0.5.0",
|
||||
"@ntlab/sfetch": "^1.0.0",
|
||||
"@octokit/plugin-paginate-rest": "^11.3.6",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^13.2.6",
|
||||
|
@ -66,6 +69,7 @@
|
|||
"eslint-config-prettier": "^9.0.0",
|
||||
"form-data": "^4.0.0",
|
||||
"fs-extra": "^10.0.1",
|
||||
"fuse.js": "^7.0.0",
|
||||
"glob": "^7.2.0",
|
||||
"globals": "^15.14.0",
|
||||
"husky": "^9.1.7",
|
||||
|
@ -74,7 +78,7 @@
|
|||
"jest": "^29.7.0",
|
||||
"jest-offline": "^1.0.1",
|
||||
"langs": "^2.0.0",
|
||||
"libxmljs2": "^0.35.0",
|
||||
"libxml2-wasm": "^0.5.0",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^3.3.0",
|
||||
"markdown-include": "^0.4.3",
|
||||
|
@ -83,9 +87,11 @@
|
|||
"node-cleanup": "^2.1.2",
|
||||
"node-gzip": "^1.1.2",
|
||||
"numeral": "^2.0.6",
|
||||
"pako": "^2.1.0",
|
||||
"parse-duration": "^1.0.0",
|
||||
"pdf-parse": "^1.1.1",
|
||||
"pm2": "^5.4.3",
|
||||
"readline": "^1.3.0",
|
||||
"run-script-os": "^1.1.6",
|
||||
"serve": "^14.2.4",
|
||||
"signale": "^1.4.0",
|
||||
|
|
123
scripts/commands/channels/edit.ts
Normal file
123
scripts/commands/channels/edit.ts
Normal file
|
@ -0,0 +1,123 @@
|
|||
import { DATA_DIR } from '../../constants'
|
||||
import { Storage, Collection, Logger } from '@freearhey/core'
|
||||
import { ChannelsParser, XML, ApiChannel } from '../../core'
|
||||
import { Channel } from 'epg-grabber'
|
||||
import nodeCleanup from 'node-cleanup'
|
||||
import { program } from 'commander'
|
||||
import inquirer, { QuestionCollection } from 'inquirer'
|
||||
import Fuse from 'fuse.js'
|
||||
import readline from 'readline'
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
readline
|
||||
.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
.on('SIGINT', function () {
|
||||
process.emit('SIGINT')
|
||||
})
|
||||
}
|
||||
|
||||
program.argument('<filepath>', 'Path to *.channels.xml file to edit').parse(process.argv)
|
||||
|
||||
const filepath = program.args[0]
|
||||
|
||||
const logger = new Logger()
|
||||
const storage = new Storage()
|
||||
let channels = new Collection()
|
||||
|
||||
async function main() {
|
||||
if (!(await storage.exists(filepath))) {
|
||||
throw new Error(`File "${filepath}" does not exists`)
|
||||
}
|
||||
|
||||
const parser = new ChannelsParser({ storage })
|
||||
channels = await parser.parse(filepath)
|
||||
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const channelsContent = await dataStorage.json('channels.json')
|
||||
const searchIndex = new Fuse(channelsContent, { keys: ['name', 'alt_names'], threshold: 0.4 })
|
||||
|
||||
for (const channel of channels.all()) {
|
||||
if (channel.xmltv_id) continue
|
||||
const question: QuestionCollection = {
|
||||
name: 'option',
|
||||
message: `Select xmltv_id for "${channel.name}" (${channel.site_id}):`,
|
||||
type: 'list',
|
||||
choices: getOptions(searchIndex, channel),
|
||||
pageSize: 10
|
||||
}
|
||||
|
||||
await inquirer.prompt(question).then(async selected => {
|
||||
switch (selected.option) {
|
||||
case 'Type...':
|
||||
const input = await getInput(channel)
|
||||
channel.xmltv_id = input.xmltv_id
|
||||
break
|
||||
case 'Skip':
|
||||
channel.xmltv_id = '-'
|
||||
break
|
||||
default:
|
||||
const [, xmltv_id] = selected.option
|
||||
.replace(/ \[.*\]/, '')
|
||||
.split('|')
|
||||
.map((i: string) => i.trim())
|
||||
channel.xmltv_id = xmltv_id
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
channels.forEach((channel: Channel) => {
|
||||
if (channel.xmltv_id === '-') {
|
||||
channel.xmltv_id = ''
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
function save() {
|
||||
if (!storage.existsSync(filepath)) return
|
||||
|
||||
const xml = new XML(channels)
|
||||
|
||||
storage.saveSync(filepath, xml.toString())
|
||||
|
||||
logger.info(`\nFile '${filepath}' successfully saved`)
|
||||
}
|
||||
|
||||
nodeCleanup(() => {
|
||||
save()
|
||||
})
|
||||
|
||||
async function getInput(channel: Channel) {
|
||||
const name = channel.name.trim()
|
||||
const input = await inquirer.prompt([
|
||||
{
|
||||
name: 'xmltv_id',
|
||||
message: ' xmltv_id:',
|
||||
type: 'input'
|
||||
}
|
||||
])
|
||||
|
||||
return { name, xmltv_id: input['xmltv_id'] }
|
||||
}
|
||||
|
||||
function getOptions(index, channel: Channel) {
|
||||
const similar = index.search(channel.name).map(result => new ApiChannel(result.item))
|
||||
|
||||
const variants = new Collection()
|
||||
similar.forEach((_channel: ApiChannel) => {
|
||||
const altNames = _channel.altNames.notEmpty() ? ` (${_channel.altNames.join(',')})` : ''
|
||||
const closed = _channel.closed ? ` [closed:${_channel.closed}]` : ''
|
||||
const replacedBy = _channel.replacedBy ? `[replaced_by:${_channel.replacedBy}]` : ''
|
||||
|
||||
variants.add(`${_channel.name}${altNames} | ${_channel.id}${closed}${replacedBy}`)
|
||||
})
|
||||
variants.add('Type...')
|
||||
variants.add('Skip')
|
||||
|
||||
return variants.all()
|
||||
}
|
|
@ -1,179 +0,0 @@
|
|||
import { DATA_DIR } from '../../constants'
|
||||
import { Storage, Collection, Dictionary, Logger } from '@freearhey/core'
|
||||
import { ChannelsParser, XML, ApiChannel } from '../../core'
|
||||
import { Channel } from 'epg-grabber'
|
||||
import { transliterate } from 'transliteration'
|
||||
import nodeCleanup from 'node-cleanup'
|
||||
import { program } from 'commander'
|
||||
import inquirer, { QuestionCollection } from 'inquirer'
|
||||
import sj from '@freearhey/search-js'
|
||||
|
||||
program
|
||||
.argument('<filepath>', 'Path to *.channels.xml file to edit')
|
||||
.option('-c, --country <name>', 'Default country (ISO 3166 code)', 'US')
|
||||
.parse(process.argv)
|
||||
|
||||
const filepath = program.args[0]
|
||||
const programOptions = program.opts()
|
||||
const defaultCountry = programOptions.country.toLowerCase()
|
||||
const newLabel = ' [new]'
|
||||
|
||||
let options = new Collection()
|
||||
|
||||
async function main() {
|
||||
const storage = new Storage()
|
||||
|
||||
if (!(await storage.exists(filepath))) {
|
||||
throw new Error(`File "${filepath}" does not exists`)
|
||||
}
|
||||
|
||||
const parser = new ChannelsParser({ storage })
|
||||
|
||||
const parsedChannels = await parser.parse(filepath)
|
||||
options = parsedChannels.map((channel: Channel): { channel: Channel; delete: boolean } => {
|
||||
return {
|
||||
channel,
|
||||
delete: false
|
||||
}
|
||||
})
|
||||
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
const channelsContent = await dataStorage.json('channels.json')
|
||||
|
||||
const channelsIndex = sj.createIndex(channelsContent)
|
||||
|
||||
const buffer = new Dictionary()
|
||||
for (const option of options.all()) {
|
||||
const channel: Channel = option.channel
|
||||
if (channel.xmltv_id) {
|
||||
if (channel.xmltv_id !== '-') {
|
||||
buffer.set(`${channel.xmltv_id}/${channel.lang}`, true)
|
||||
}
|
||||
continue
|
||||
}
|
||||
const choices = getOptions(channelsIndex, channel)
|
||||
const question: QuestionCollection = {
|
||||
name: 'option',
|
||||
message: `Choose xmltv_id for "${channel.name}" (${channel.site_id}):`,
|
||||
type: 'list',
|
||||
choices,
|
||||
pageSize: 10
|
||||
}
|
||||
|
||||
await inquirer.prompt(question).then(async selected => {
|
||||
switch (selected.option) {
|
||||
case 'Overwrite':
|
||||
const input = await getInput(channel)
|
||||
channel.xmltv_id = input.xmltv_id
|
||||
break
|
||||
case 'Skip':
|
||||
channel.xmltv_id = '-'
|
||||
break
|
||||
default:
|
||||
const [, xmltv_id] = selected.option
|
||||
.replace(/ \[.*\]/, '')
|
||||
.split('|')
|
||||
.map((i: string) => i.trim().replace(newLabel, ''))
|
||||
channel.xmltv_id = xmltv_id
|
||||
break
|
||||
}
|
||||
|
||||
const found = buffer.has(`${channel.xmltv_id}/${channel.lang}`)
|
||||
if (found) {
|
||||
const question: QuestionCollection = {
|
||||
name: 'option',
|
||||
message: `"${channel.xmltv_id}" already on the list. Choose an option:`,
|
||||
type: 'list',
|
||||
choices: ['Skip', 'Add', 'Delete'],
|
||||
pageSize: 5
|
||||
}
|
||||
await inquirer.prompt(question).then(async selected => {
|
||||
switch (selected.option) {
|
||||
case 'Skip':
|
||||
channel.xmltv_id = '-'
|
||||
break
|
||||
case 'Delete':
|
||||
option.delete = true
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (channel.xmltv_id !== '-') {
|
||||
buffer.set(`${channel.xmltv_id}/${channel.lang}`, true)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
function save() {
|
||||
const logger = new Logger()
|
||||
const storage = new Storage()
|
||||
|
||||
if (!storage.existsSync(filepath)) return
|
||||
|
||||
const channels = options
|
||||
.filter((option: { channel: Channel; delete: boolean }) => !option.delete)
|
||||
.map((option: { channel: Channel; delete: boolean }) => option.channel)
|
||||
|
||||
const xml = new XML(channels)
|
||||
|
||||
storage.saveSync(filepath, xml.toString())
|
||||
|
||||
logger.info(`\nFile '${filepath}' successfully saved`)
|
||||
}
|
||||
|
||||
nodeCleanup(() => {
|
||||
save()
|
||||
})
|
||||
|
||||
async function getInput(channel: Channel) {
|
||||
const name = channel.name.trim()
|
||||
const input = await inquirer.prompt([
|
||||
{
|
||||
name: 'xmltv_id',
|
||||
message: ' ID:',
|
||||
type: 'input',
|
||||
default: generateCode(name, defaultCountry)
|
||||
}
|
||||
])
|
||||
|
||||
return { name, xmltv_id: input['xmltv_id'] }
|
||||
}
|
||||
|
||||
function getOptions(channelsIndex, channel: Channel) {
|
||||
const channelId = generateCode(channel.name, defaultCountry)
|
||||
const query = channel.name
|
||||
.replace(/\s(SD|TV|HD|SD\/HD|HDTV)$/i, '')
|
||||
.replace(/(\(|\)|,)/gi, '')
|
||||
.replace(/-/gi, ' ')
|
||||
.replace(/\+/gi, '')
|
||||
const similar = channelsIndex.search(query).map(item => new ApiChannel(item))
|
||||
|
||||
const variants = new Collection()
|
||||
variants.add(`${channel.name.trim()} | ${channelId}${newLabel}`)
|
||||
similar.forEach((_channel: ApiChannel) => {
|
||||
const altNames = _channel.altNames.notEmpty() ? ` (${_channel.altNames.join(',')})` : ''
|
||||
const closed = _channel.closed ? ` [closed:${_channel.closed}]` : ''
|
||||
const replacedBy = _channel.replacedBy ? `[replaced_by:${_channel.replacedBy}]` : ''
|
||||
|
||||
variants.add(`${_channel.name}${altNames} | ${_channel.id}${closed}${replacedBy}`)
|
||||
})
|
||||
variants.add('Overwrite')
|
||||
variants.add('Skip')
|
||||
|
||||
return variants.all()
|
||||
}
|
||||
|
||||
function generateCode(name: string, country: string) {
|
||||
const channelId: string = transliterate(name)
|
||||
.replace(/\+/gi, 'Plus')
|
||||
.replace(/^&/gi, 'And')
|
||||
.replace(/[^a-z\d]+/gi, '')
|
||||
|
||||
return `${channelId}.${country}`
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
import chalk from 'chalk'
|
||||
import libxml, { ValidationError } from 'libxmljs2'
|
||||
import { program } from 'commander'
|
||||
import { Storage, File } from '@freearhey/core'
|
||||
import { XmlDocument, XsdValidator, XmlValidateError, ErrorDetail } from 'libxml2-wasm'
|
||||
|
||||
const xsd = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
|
||||
|
@ -23,12 +23,12 @@ const xsd = `<?xml version="1.0" encoding="UTF-8"?>
|
|||
</xs:element>
|
||||
</xs:schema>`
|
||||
|
||||
program.argument('[filepath]', 'Path to *.channels.xml files to validate').parse(process.argv)
|
||||
program.argument('[filepath]', 'Path to *.channels.xml files to check').parse(process.argv)
|
||||
|
||||
async function main() {
|
||||
const storage = new Storage()
|
||||
|
||||
let errors: ValidationError[] = []
|
||||
let errors: ErrorDetail[] = []
|
||||
|
||||
const files = program.args.length ? program.args : await storage.list('sites/**/*.channels.xml')
|
||||
for (const filepath of files) {
|
||||
|
@ -37,23 +37,28 @@ async function main() {
|
|||
|
||||
const xml = await storage.load(filepath)
|
||||
|
||||
let localErrors: ValidationError[] = []
|
||||
let localErrors: ErrorDetail[] = []
|
||||
|
||||
try {
|
||||
const xsdDoc = libxml.parseXml(xsd)
|
||||
const doc = libxml.parseXml(xml)
|
||||
const schema = XmlDocument.fromString(xsd)
|
||||
const validator = XsdValidator.fromDoc(schema)
|
||||
const doc = XmlDocument.fromString(xml)
|
||||
|
||||
if (!doc.validate(xsdDoc)) {
|
||||
localErrors = doc.validationErrors
|
||||
}
|
||||
} catch (error) {
|
||||
localErrors.push(error)
|
||||
validator.validate(doc)
|
||||
|
||||
schema.dispose()
|
||||
validator.dispose()
|
||||
doc.dispose()
|
||||
} catch (_error) {
|
||||
const error = _error as XmlValidateError
|
||||
|
||||
localErrors = localErrors.concat(error.details)
|
||||
}
|
||||
|
||||
if (localErrors.length) {
|
||||
console.log(`\n${chalk.underline(filepath)}`)
|
||||
localErrors.forEach((error: ValidationError) => {
|
||||
const position = `${error.line}:${error.column}`
|
||||
localErrors.forEach((error: ErrorDetail) => {
|
||||
const position = `${error.line}:${error.col}`
|
||||
console.log(` ${chalk.gray(position.padEnd(4, ' '))} ${error.message.trim()}`)
|
||||
})
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { Storage, Collection, Dictionary, File, Logger } from '@freearhey/core'
|
||||
import { Storage, Collection, Dictionary, File } from '@freearhey/core'
|
||||
import { ChannelsParser, ApiChannel } from '../../core'
|
||||
import { program } from 'commander'
|
||||
import chalk from 'chalk'
|
||||
|
@ -6,15 +6,7 @@ import langs from 'langs'
|
|||
import { DATA_DIR } from '../../constants'
|
||||
import { Channel } from 'epg-grabber'
|
||||
|
||||
program
|
||||
.option(
|
||||
'-c, --channels <path>',
|
||||
'Path to channels.xml file to validate',
|
||||
'sites/**/*.channels.xml'
|
||||
)
|
||||
.parse(process.argv)
|
||||
|
||||
const options = program.opts()
|
||||
program.argument('[filepath]', 'Path to *.channels.xml files to validate').parse(process.argv)
|
||||
|
||||
type ValidationError = {
|
||||
type: 'duplicate' | 'wrong_xmltv_id' | 'wrong_lang'
|
||||
|
@ -26,11 +18,6 @@ type ValidationError = {
|
|||
}
|
||||
|
||||
async function main() {
|
||||
const logger = new Logger()
|
||||
|
||||
logger.info('options:')
|
||||
logger.tree(options)
|
||||
|
||||
const parser = new ChannelsParser({ storage: new Storage() })
|
||||
|
||||
const dataStorage = new Storage(DATA_DIR)
|
||||
|
@ -39,8 +26,9 @@ async function main() {
|
|||
|
||||
let totalFiles = 0
|
||||
let totalErrors = 0
|
||||
|
||||
const storage = new Storage()
|
||||
const files: string[] = await storage.list(options.channels)
|
||||
const files = program.args.length ? program.args : await storage.list('sites/**/*.channels.xml')
|
||||
for (const filepath of files) {
|
||||
const file = new File(filepath)
|
||||
if (file.extension() !== 'xml') continue
|
||||
|
@ -50,9 +38,9 @@ async function main() {
|
|||
const bufferBySiteId = new Dictionary()
|
||||
const errors: ValidationError[] = []
|
||||
parsedChannels.forEach((channel: Channel) => {
|
||||
const bufferSiteId: string = `${channel.site_id}:${channel.lang}`
|
||||
if (bufferBySiteId.missing(bufferSiteId)) {
|
||||
bufferBySiteId.set(bufferSiteId, true)
|
||||
const bufferId: string = channel.site_id
|
||||
if (bufferBySiteId.missing(bufferId)) {
|
||||
bufferBySiteId.set(bufferId, true)
|
||||
} else {
|
||||
errors.push({ type: 'duplicate', ...channel })
|
||||
totalErrors++
|
||||
|
@ -72,16 +60,6 @@ async function main() {
|
|||
errors.push({ type: 'wrong_xmltv_id', ...channel })
|
||||
totalErrors++
|
||||
}
|
||||
|
||||
// if (foundChannel && foundChannel.replacedBy) {
|
||||
// errors.push({ type: 'replaced', ...channel })
|
||||
// totalErrors++
|
||||
// }
|
||||
|
||||
// if (foundChannel && foundChannel.closed && !foundChannel.replacedBy) {
|
||||
// errors.push({ type: 'closed', ...channel })
|
||||
// totalErrors++
|
||||
// }
|
||||
})
|
||||
|
||||
if (errors.length) {
|
||||
|
|
45
scripts/commands/sites/init.ts
Normal file
45
scripts/commands/sites/init.ts
Normal file
|
@ -0,0 +1,45 @@
|
|||
import { Logger, Storage } from '@freearhey/core'
|
||||
import { program } from 'commander'
|
||||
import { SITES_DIR } from '../../constants'
|
||||
import fs from 'fs-extra'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
program.argument('<site>', 'Domain name of the site').parse(process.argv)
|
||||
|
||||
const domain = program.args[0]
|
||||
|
||||
async function main() {
|
||||
const storage = new Storage(SITES_DIR)
|
||||
const logger = new Logger()
|
||||
|
||||
logger.info(`Initializing "${domain}"...\r\n`)
|
||||
|
||||
const dir = domain
|
||||
if (await storage.exists(dir)) {
|
||||
throw new Error(`Folder "${dir}" already exists`)
|
||||
}
|
||||
|
||||
await storage.createDir(dir)
|
||||
|
||||
logger.info(`Creating "${dir}/${domain}.test.js"...`)
|
||||
const testTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_test.js'), {
|
||||
encoding: 'utf8'
|
||||
})
|
||||
await storage.save(`${dir}/${domain}.test.js`, testTemplate.replace(/<DOMAIN>/g, domain))
|
||||
|
||||
logger.info(`Creating "${dir}/${domain}.config.js"...`)
|
||||
const configTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_config.js'), {
|
||||
encoding: 'utf8'
|
||||
})
|
||||
await storage.save(`${dir}/${domain}.config.js`, configTemplate.replace(/<DOMAIN>/g, domain))
|
||||
|
||||
logger.info(`Creating "${dir}/readme.md"...`)
|
||||
const readmeTemplate = fs.readFileSync(pathToFileURL('scripts/templates/_readme.md'), {
|
||||
encoding: 'utf8'
|
||||
})
|
||||
await storage.save(`${dir}/readme.md`, readmeTemplate.replace(/<DOMAIN>/g, domain))
|
||||
|
||||
logger.info('\r\nDone')
|
||||
}
|
||||
|
||||
main()
|
|
@ -41,7 +41,7 @@ export class ApiClient {
|
|||
}
|
||||
|
||||
async download(filename: string) {
|
||||
const stream = await this.storage.createStream(`/temp/data/${filename}`)
|
||||
const stream = await this.storage.createStream(`temp/data/${filename}`)
|
||||
|
||||
const bar = this.progressBar.create(0, 0, { filename })
|
||||
|
||||
|
|
16
scripts/templates/_config.js
Normal file
16
scripts/templates/_config.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
module.exports = {
|
||||
site: '<DOMAIN>',
|
||||
url({ channel, date }) {
|
||||
return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser({ content }) {
|
||||
try {
|
||||
return JSON.parse(content)
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
},
|
||||
channels() {
|
||||
return []
|
||||
}
|
||||
}
|
21
scripts/templates/_readme.md
Normal file
21
scripts/templates/_readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# <DOMAIN>
|
||||
|
||||
https://example.com
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=<DOMAIN>
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/<DOMAIN>/<DOMAIN>.config.js --output=./sites/<DOMAIN>/<DOMAIN>.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- <DOMAIN>
|
||||
```
|
42
scripts/templates/_test.js
Normal file
42
scripts/templates/_test.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
const { parser, url } = require('./<DOMAIN>.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('2025-01-12', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' }
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content =
|
||||
'[{"title":"Program 1","start":"2025-01-12T00:00:00.000Z","stop":"2025-01-12T00:30:00.000Z"},{"title":"Program 2","start":"2025-01-12T00:30:00.000Z","stop":"2025-01-12T01:00:00.000Z"}]'
|
||||
|
||||
const results = parser({ content })
|
||||
|
||||
expect(results.length).toBe(2)
|
||||
expect(results[0]).toMatchObject({
|
||||
title: 'Program 1',
|
||||
start: '2025-01-12T00:00:00.000Z',
|
||||
stop: '2025-01-12T00:30:00.000Z'
|
||||
})
|
||||
expect(results[1]).toMatchObject({
|
||||
title: 'Program 2',
|
||||
start: '2025-01-12T00:30:00.000Z',
|
||||
stop: '2025-01-12T01:00:00.000Z'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: ''
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([])
|
||||
})
|
1043
sites/antennaeurope.gr/__data__/content.html
Normal file
1043
sites/antennaeurope.gr/__data__/content.html
Normal file
File diff suppressed because it is too large
Load diff
877
sites/antennaeurope.gr/__data__/no_content.html
Normal file
877
sites/antennaeurope.gr/__data__/no_content.html
Normal file
|
@ -0,0 +1,877 @@
|
|||
<!doctype html>
|
||||
<!--[if IE 7]><html class="ie7" lang="el"> <!
|
||||
[endif]-->[endif]--><!--[if IE 8]><html class="ie8" lang="el"> <!
|
||||
[endif]-->[endif]--><!--[if IE 9]><html class="ie9" lang="el"> <![endif]-->
|
||||
<!--[if !IE]><!--><html lang="el" itemscope itemtype="http://schema.org/WebPage"><!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" lang="el" />
|
||||
<meta http-equiv="content-language" content="el-gr" />
|
||||
<title>Πρόγραμμα</title>
|
||||
<meta name="description" content="cms39" />
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="ROBOTS" content="INDEX, FOLLOW" />
|
||||
<link
|
||||
rel="search"
|
||||
type="application/opensearchdescription+xml"
|
||||
href="https://www.antennaeurope.gr/opensearch.php"
|
||||
title="Website search"
|
||||
/>
|
||||
<link href="" rel="publisher" />
|
||||
<meta http-equiv="Cache-control" content="public" />
|
||||
<meta http-equiv="Cache-control" content="max-age=86400" />
|
||||
<meta name="designer" content="www.cdl.gr" />
|
||||
<meta name="generator" content="CMS39 FRAMEWORK v8.9.9.1" />
|
||||
<meta name="copyright" content="antennaeurope.gr" />
|
||||
<link rel="alternate" hreflang="el" href="https://www.antennaeurope.gr/el/tvguide.html" />
|
||||
<link rel="alternate" hreflang="en" href="https://www.antennaeurope.gr/en/tvguide.html" />
|
||||
<meta property="fb:app_id" content="966242223397117" />
|
||||
<meta property="og:locale" content="el" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta
|
||||
property="og:url"
|
||||
content="https://www.antennaeurope.gr/el/tvguide.html?date=2026-01-21"
|
||||
/>
|
||||
<meta property="og:site_name" content="antennaeurope.gr" />
|
||||
<meta property="og:title" content="Πρόγραμμα" />
|
||||
<meta property="og:description" content="cms39" />
|
||||
<meta
|
||||
property="og:image"
|
||||
content="https://www.antennaeurope.gr/media/upload-files/cache/4eb/4eb861bdce3a42bab32e27c55aecbcfa_europelogo.jpg"
|
||||
/>
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
<script type="text/javascript">
|
||||
var Durl = 'https://www.antennaeurope.gr/el'
|
||||
var Turl = 'https://www.antennaeurope.gr/themes/default'
|
||||
var url = 'https://www.antennaeurope.gr'
|
||||
var Aurl = 'https://www.antennaeurope.gr/administrator/cp_ajax?f='
|
||||
var lang = 'el'
|
||||
var lang_symbol = 'el'
|
||||
var siteName = 'antennaeurope.gr'
|
||||
var siteV = '5.7.3'
|
||||
var Purl = 'https://www.antennaeurope.gr/public/plugins'
|
||||
</script>
|
||||
<link
|
||||
rel="alternate"
|
||||
type="application/rss+xml"
|
||||
title="antennaeurope.gr Feed"
|
||||
href="https://www.antennaeurope.gr/rss.php"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="57x57"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-57x57.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="60x60"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-60x60.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="72x72"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-72x72.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="76x76"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-76x76.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="114x114"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-114x114.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="120x120"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-120x120.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="144x144"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-144x144.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="152x152"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-152x152.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/apple-icon-180x180.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/android-icon-192x192.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="32x32"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/favicon-32x32.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="96x96"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/favicon-96x96.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="https://www.antennaeurope.gr/themes/default/img/ico/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="https://www.antennaeurope.gr/themes/default/manifest.json" />
|
||||
<meta
|
||||
name="msapplication-TileImage"
|
||||
content="https://www.antennaeurope.gr/themes/default/img/ico/ms-icon-144x144.png"
|
||||
/>
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
|
||||
<script type="text/javascript">
|
||||
var contact_url = 'https://www.antennaeurope.gr'
|
||||
var contact_field_message_min = '20'
|
||||
var contact_field_message_max = '100'
|
||||
var contact_lang = 'el'
|
||||
</script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/assets/owl.carousel.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/assets/owl.theme.default.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/jquery-typeahead@2.11.1/dist/jquery.typeahead.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://www.antennaeurope.gr/plugins/cms39_search/cms39_search.css?v=4.5"
|
||||
/>
|
||||
<link rel="stylesheet" href="https://www.antennaeurope.gr/plugins/contactform/contact.css" />
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-118808483-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || []
|
||||
function gtag() {
|
||||
dataLayer.push(arguments)
|
||||
}
|
||||
gtag('js', new Date())
|
||||
gtag('config', 'UA-118808483-1')
|
||||
</script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="https://www.antennaeurope.gr/themes/default/style.css?version=5.7.3"
|
||||
/>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdn.jsdelivr.net/html5shiv/3.7.2/html5shiv-printshiv.min.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="el css_100 css_tvguide css_0 css_page css_page css_root_100 desktop">
|
||||
<div class="masterWraper">
|
||||
<header>
|
||||
<div class="container-fluid">
|
||||
<a class="logo" href="https://www.antennaeurope.gr/el/home.html" title="antennaeurope.gr"
|
||||
><img
|
||||
alt="logo antennaeurope.gr"
|
||||
src="https://www.antennaeurope.gr/themes/default/img/eur.svg"
|
||||
/></a>
|
||||
<div class="colarea1">
|
||||
<div class="col1inner">
|
||||
<div class="text-right colmenu">
|
||||
<button
|
||||
class="menu-toggle"
|
||||
data-toggle="collapse"
|
||||
data-target="#collapseMenu"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapseMenu"
|
||||
>
|
||||
<span class="menu-icon">
|
||||
<span class="first"></span> <span class="second"></span>
|
||||
<span class="third"></span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sitesearch text-left">
|
||||
<div
|
||||
class="site-search grid__col-auto grid--justify-center grid--align-center visible__sm"
|
||||
>
|
||||
<button
|
||||
class="search-btn"
|
||||
data-toggle="collapse"
|
||||
data-target="#collapseSearch"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapseSearch"
|
||||
>
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="colarea2"><ul class="list-inline"></ul></div>
|
||||
<div class="colarea3 col-live-now text-right">
|
||||
<a class="playnow" title="more information" data-bid="" data-dum="" href="#"
|
||||
><span class="highlight">Παίζει τώρα</span></a
|
||||
>
|
||||
<ul class="list-inline lang-list">
|
||||
<li class="cms39_language_loop cms39_language_loop_li_el active">
|
||||
<a
|
||||
class="cms39_language_link_el active"
|
||||
title="Ελληνικά"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html"
|
||||
>Ελληνικά</a
|
||||
>
|
||||
</li>
|
||||
<li class="cms39_language_loop cms39_language_loop_li_en">
|
||||
<a
|
||||
class="cms39_language_link_en"
|
||||
title="English"
|
||||
href="https://www.antennaeurope.gr/en/tvguide.html"
|
||||
>English</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div id="collapseMenu" class="collapse">
|
||||
<form
|
||||
role="search"
|
||||
class="searchform"
|
||||
id="searchform"
|
||||
action="https://www.antennaeurope.gr/el/search.html"
|
||||
method="GET"
|
||||
>
|
||||
<div class="typeahead__container">
|
||||
<div class="typeahead__field">
|
||||
<span class="typeahead__query">
|
||||
<label for="searchform_q" class="hidden">εύρεση</label>
|
||||
<input
|
||||
class="js-typeahead searchformField form-control"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
placeholder="Αναζήτηση"
|
||||
value=""
|
||||
name="q"
|
||||
id="searchform_q"
|
||||
required
|
||||
/>
|
||||
</span>
|
||||
<span class="typeahead__button">
|
||||
<button type="submit" class="searchformSubmit btn btn-default" title="search site">
|
||||
<span class="typeahead__search-icon"></span>
|
||||
</button>
|
||||
</span>
|
||||
<input data-storage="false" type="hidden" name="date" value="2026-01-21" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<nav class="cms39-header-nav">
|
||||
<ul id="cms39-header-nav" class="cms39-navbar-nav ul-29">
|
||||
<li class="active">
|
||||
<a
|
||||
title="Πρόγραμμα"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html"
|
||||
class="active"
|
||||
>Πρόγραμμα</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Εκπομπές" href="https://www.antennaeurope.gr/el/shows.html" class=""
|
||||
>Εκπομπές</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Συνδεθείτε " href="https://www.antennaeurope.gr/el/connect.html" class=""
|
||||
>Συνδεθείτε
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Links" href="https://www.antennaeurope.gr/el/links.html" class="">Links</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Επικοινωνία" href="https://www.antennaeurope.gr/el/contact.html" class=""
|
||||
>Επικοινωνία</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="site-social grid__cell-footer">
|
||||
<ul class="grid">
|
||||
<li>
|
||||
<a href="https://www.facebook.com/antenna.europe/" target="_blank">
|
||||
<span class="icon icon-facebook"
|
||||
><span class="screen-reader-text"><i class="fab fa-facebook-f"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" target="_blank">
|
||||
<span class="icon icon-twitter"
|
||||
><span class="screen-reader-text"><i class="fab fa-twitter"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.instagram.com/antenna.europe/" target="_blank">
|
||||
<span class="icon icon-instagram"
|
||||
><span class="screen-reader-text"><i class="fab fa-instagram"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" target="_blank">
|
||||
<span class="icon icon-youtube"
|
||||
><span class="screen-reader-text"><i class="fab fa-youtube"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- .site-social -->
|
||||
</div>
|
||||
<ul class="list-inline lang-list">
|
||||
<li class="cms39_language_loop cms39_language_loop_li_el active">
|
||||
<a
|
||||
class="cms39_language_link_el active"
|
||||
title="Ελληνικά"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html"
|
||||
>Ελληνικά</a
|
||||
>
|
||||
</li>
|
||||
<li class="cms39_language_loop cms39_language_loop_li_en">
|
||||
<a
|
||||
class="cms39_language_link_en"
|
||||
title="English"
|
||||
href="https://www.antennaeurope.gr/en/tvguide.html"
|
||||
>English</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="collapseSearch" class="collapse">
|
||||
<div class="inner">
|
||||
<div class="container-fluid">
|
||||
<form
|
||||
role="search"
|
||||
class="searchform"
|
||||
id="searchform"
|
||||
action="https://www.antennaeurope.gr/el/search.html"
|
||||
method="GET"
|
||||
>
|
||||
<div class="typeahead__container">
|
||||
<div class="typeahead__field">
|
||||
<span class="typeahead__query">
|
||||
<label for="searchform_q" class="hidden">εύρεση</label>
|
||||
<input
|
||||
class="js-typeahead searchformField form-control"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
placeholder="Αναζήτηση"
|
||||
value=""
|
||||
name="q"
|
||||
id="searchform_q"
|
||||
required
|
||||
/>
|
||||
</span>
|
||||
<span class="typeahead__button">
|
||||
<button
|
||||
type="submit"
|
||||
class="searchformSubmit btn btn-default"
|
||||
title="search site"
|
||||
>
|
||||
<span class="typeahead__search-icon"></span>
|
||||
</button>
|
||||
</span>
|
||||
<input data-storage="false" type="hidden" name="date" value="2026-01-21" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="info">Άρχισε να πληκτρολογείς οτιδήποτε</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ant1col2">
|
||||
<div class="featuredContentContainer container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-8">
|
||||
<article class="programme-container">
|
||||
<div id="programmeCalendar" class="calendar-horizontal">
|
||||
<div class="showCarousel owl-carousel">
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-16"
|
||||
>Πέμπτη <span>16/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-17"
|
||||
>Παρασκευή <span>17/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-18"
|
||||
>Σάββατο <span>18/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-19"
|
||||
>Κυριακή <span>19/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-20"
|
||||
>Δευτέρα <span>20/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-21"
|
||||
>Τρίτη <span>21/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-22"
|
||||
>Τετάρτη <span>22/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-23"
|
||||
>Πέμπτη <span>23/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-24"
|
||||
>Παρασκευή <span>24/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-25"
|
||||
>Σάββατο <span>25/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-26"
|
||||
>Κυριακή <span>26/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-27"
|
||||
>Δευτέρα <span>27/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-28"
|
||||
>Τρίτη <span>28/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-29"
|
||||
>Τετάρτη <span>29/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-30"
|
||||
>Πέμπτη <span>30/1</span></a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="programmeContent" class="programme-content">
|
||||
<div class="row">
|
||||
<div class="day col-12 col-sm-2">
|
||||
<p>Τετάρτη<br />21/1</p>
|
||||
</div>
|
||||
<div class="shows col-12 col-sm-10 sentoni">
|
||||
<div id="earlierContainer" class="programme-earlier-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-12 col-sm-4 sidebararea">
|
||||
<div class="banner-placeholder vertical light">
|
||||
<ins
|
||||
data-revive-zoneid="8"
|
||||
data-revive-target="_blank"
|
||||
data-revive-ct0="80535266"
|
||||
data-revive-block="1"
|
||||
data-revive-blockcampaign="1"
|
||||
data-revive-id="30a34a2302634ff5d170d39f518891d2"
|
||||
></ins>
|
||||
<script async src="//dfp.cdl.gr/www/delivery/asyncjs.php"></script>
|
||||
<div class="banner2">
|
||||
<ins
|
||||
data-revive-zoneid="8"
|
||||
data-revive-target="_blank"
|
||||
data-revive-ct0="83289214"
|
||||
data-revive-block="1"
|
||||
data-revive-blockcampaign="1"
|
||||
data-revive-id="30a34a2302634ff5d170d39f518891d2"
|
||||
></ins>
|
||||
<script async src="//dfp.cdl.gr/www/delivery/asyncjs.php"></script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebararea-promo"><h1 class="h1">Δες επίσης</h1></div>
|
||||
<div class="sidebararea-promo"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-episodes">
|
||||
<h1 class="h1">Νέο Πρόγραμμα</h1>
|
||||
<div id="footerFshows" class="owl-carousel owl-theme">
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ"
|
||||
src="https://www.antennaeurope.gr/media/upload-files/cache/42a/42a69c6936c865b6cb1555da86b8101f_ygeiapanwapolaprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ</h2>
|
||||
<p class="excerpt">
|
||||
Το «Υγεία πάνω απ’ όλα» με τη Φωτεινή Γεωργίου, συνεχίζει για 13η χρονιά!
|
||||
</p>
|
||||
<a
|
||||
title="ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ"
|
||||
class="more"
|
||||
href="https://www.antennaeurope.gr/el/igia-pano-ap’-ola.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΡΟΥΚ ΖΟΥΚ"
|
||||
src="https://www.antennaeurope.gr/media/upload-files/cache/7dc/7dcad32b0490fd5e2f4eb944fdd13d4c_roukzoukprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΡΟΥΚ ΖΟΥΚ</h2>
|
||||
<p class="excerpt">
|
||||
Το «Rouk Zouk» για 6η χρονιά με την απολαυστική Ζέτα Μακρυπούλια στα «decks» του
|
||||
αγαπημένου παιχνιδιού!
|
||||
</p>
|
||||
<a
|
||||
title="ΡΟΥΚ ΖΟΥΚ"
|
||||
class="more"
|
||||
href="https://www.antennaeurope.gr/el/rouk-zouk.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΡΑΔΙΟ ΑΡΒΥΛΑ"
|
||||
src="https://www.antennaeurope.gr/media/upload-files/cache/356/356e9b3db418c002aa7bb59095c2887d_radioarvylaprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΡΑΔΙΟ ΑΡΒΥΛΑ</h2>
|
||||
<p class="excerpt">
|
||||
Όλοι οι τηλεοπτικοί δρόμοι οδηγούν στην καυστική σάτιρα και στους μοναδικούς
|
||||
«Ράδιο Αρβύλα» για 18η χρονιά!
|
||||
</p>
|
||||
<a
|
||||
title="ΡΑΔΙΟ ΑΡΒΥΛΑ"
|
||||
class="more"
|
||||
href="https://www.antennaeurope.gr/el/radio-arvila.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt=" THE 2NIGHT SHOW"
|
||||
src="https://www.antennaeurope.gr/media/upload-files/cache/f30/f3041bf52188897fbb8a57509f5a1207_2nightshowprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>THE 2NIGHT SHOW</h2>
|
||||
<p class="excerpt">
|
||||
Οι πιο ενδιαφέρουσες νυχτερινές εξομολογήσεις με τον Γρηγόρη Αρναούτογλου!
|
||||
</p>
|
||||
<a
|
||||
title=" THE 2NIGHT SHOW"
|
||||
class="more"
|
||||
href="https://www.antennaeurope.gr/el/the-2night-show.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="THE REUNION"
|
||||
src="https://www.antennaeurope.gr/media/upload-files/cache/7f5/7f5502d928d0d36f21be192aa53f062e_thereunionprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>THE REUNION</h2>
|
||||
<p class="excerpt">
|
||||
Πριν από 10 χρόνια, δύο φίλοι, ο Σάκης Τανιμανίδης και ο Γιώργος Μαυρίδης,
|
||||
ξεκίνησαν ένα ταξίδι που άλλαξε τη ζωή τους για πάντα. Σήμερα, ένας πατέρας,
|
||||
πλέον, και ένας
|
||||
</p>
|
||||
<a
|
||||
title="THE REUNION"
|
||||
class="more"
|
||||
href="https://www.antennaeurope.gr/el/the-reunion.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-8 foot_1">
|
||||
<h2>Εγγραφή στο ενημερωτικό δελτίο</h2>
|
||||
<form action="#" id="subscribeform" name="newsletter" method="post">
|
||||
<label for="newsletterEmail" class="screen-reader-text">Το email σου</label>
|
||||
<input
|
||||
id="newsletterEmail"
|
||||
type="email"
|
||||
name="email"
|
||||
placeholder="Το email σου"
|
||||
required
|
||||
/>
|
||||
<input type="submit" name="submit" value="Εγγραφή" />
|
||||
<input type="hidden" name="__mail_required" value="email" />
|
||||
<input type="hidden" name="__mail_subject" value="Antenna Europe Newsletter form" />
|
||||
<input
|
||||
type="hidden"
|
||||
name="__mail_success"
|
||||
value="Thank you and welcome to our Newsletter Service!"
|
||||
/>
|
||||
<input
|
||||
type="hidden"
|
||||
name="url"
|
||||
value="https://www.antennaeurope.gr/el/tvguide.html?date=2026-01-21"
|
||||
/>
|
||||
<input type="hidden" name="datetime" value="2025-01-17 00:34:36" />
|
||||
<div id="subscribeformMSG"></div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-12 col-sm-4 foot_2">
|
||||
<h2>Ακολουθήστε μας</h2>
|
||||
<ul class="site-social grid">
|
||||
<li>
|
||||
<a href="https://www.facebook.com/antenna.europe/" target="_blank">
|
||||
<span class="icon icon-facebook">
|
||||
<span class="screen-reader-text"><i class="fab fa-facebook-f"></i></span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.instagram.com/antenna.europe/" target="_blank">
|
||||
<span class="icon icon-instagram">
|
||||
<span class="screen-reader-text"><i class="fab fa-instagram"></i></span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="cms39-footer-nav">
|
||||
<ul id="cms39-footer-nav" class="cms39-footer-nav ul-106">
|
||||
<li class="">
|
||||
<a
|
||||
title="Επικοινωνία"
|
||||
href="https://www.antennaeurope.gr/el/contact.html"
|
||||
class=""
|
||||
>Επικοινωνία</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Συνδεθείτε "
|
||||
href="https://www.antennaeurope.gr/el/connect.html"
|
||||
class=""
|
||||
>Συνδεθείτε
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Εργασία"
|
||||
href="https://www.antennaeurope.gr/el/workwithus.html"
|
||||
class=""
|
||||
>Εργασία</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Διαφημιστείτε"
|
||||
href="https://www.antennaeurope.gr/el/advertise.html"
|
||||
class=""
|
||||
>Διαφημιστείτε</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Για εμάς" href="https://www.antennaeurope.gr/el/about.html" class=""
|
||||
>Για εμάς</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Links" href="https://www.antennaeurope.gr/el/links.html" class=""
|
||||
>Links</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Όροι χρήσης"
|
||||
href="https://www.antennaeurope.gr/el/terms.html"
|
||||
class=""
|
||||
>Όροι χρήσης</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="FAQ" href="https://www.antennaeurope.gr/el/faq.html" class="">FAQ</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Δελτία Τύπου"
|
||||
href="https://www.antennaeurope.gr/el/press.html"
|
||||
class=""
|
||||
>Δελτία Τύπου</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-12 foot_3 text-dark text-theme-copyright">
|
||||
© 2025 ANT1 TV | 2025-01-17 00:34:36
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="copyright text-center">
|
||||
<div id="cdl" style="display: inline-block">
|
||||
<span style="width: 49px; height: 43px; overflow: hidden; display: block">
|
||||
<a
|
||||
rel="external"
|
||||
style="display: block; margin: 0px"
|
||||
target="_blank"
|
||||
title="Array"
|
||||
href="https://www.cdl.gr"
|
||||
>
|
||||
<img
|
||||
width="49"
|
||||
height="43"
|
||||
alt="Array"
|
||||
src="https://www.cdl.gr/media/upload-files/cdl-logo-white.png"
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
rel="external"
|
||||
style="visibility: hidden; display: none margin: 0px;"
|
||||
title="Θέλεις κονκάρδες από το αγαπημένο σου συγκρότημα, κονκάρδες για το bachelor σου, κονκάρδες για τους καλεσμένους σου, κονκάρδες για το party των παιδιών σου, κονκάρδες για την προώθηση της επιχειρησης σου; Τα πάντα για κονκάρδες μόνο στο concarda.com"
|
||||
href="http://www.concarda.com"
|
||||
target="_blank"
|
||||
>για κονκάρδες μόνο στο concarda.com</a
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- created by https://www.cdl.gr Creative Studio, κατασκευή ιστοσελίδων, ιστοσελίδες, digital agency. -->
|
||||
<script type="text/javascript">
|
||||
var search_autocomplete_template = '<span>{{title}}</span>'
|
||||
var search_autocomplete_limit = '10'
|
||||
var search_autocomplete_minLength = '3'
|
||||
var search_autocomplete_emptyTemplate = 'No results found for {{query}}'
|
||||
</script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/block-ui@2.70.1/jquery.blockUI.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/owl.carousel.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://use.fontawesome.com/releases/v5.0.8/js/all.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://www.antennaeurope.gr/themes/default/js/plugins.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://www.antennaeurope.gr/themes/default/js/app.js?sha=b0deb72809b9bb08cdd172c16fb29669"
|
||||
></script>
|
||||
<script
|
||||
async
|
||||
defer
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/jquery-typeahead@2.11.1/dist/jquery.typeahead.min.js"
|
||||
></script>
|
||||
<script
|
||||
async
|
||||
defer
|
||||
type="text/javascript"
|
||||
src="https://www.antennaeurope.gr/plugins/cms39_search/cms39_search.js?v=4.5"
|
||||
></script>
|
||||
</body>
|
||||
</html>
|
4
sites/antennaeurope.gr/antennaeurope.gr.channels.xml
Normal file
4
sites/antennaeurope.gr/antennaeurope.gr.channels.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="antennaeurope.gr" lang="el" xmltv_id="ANT1Europe.gr" site_id="#">ANT1 Europe</channel>
|
||||
</channels>
|
|
@ -9,20 +9,17 @@ dayjs.extend(timezone)
|
|||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'hd-plus.de',
|
||||
site: 'antennaeurope.gr',
|
||||
days: 2,
|
||||
url({ date, channel }) {
|
||||
const today = dayjs().utc().startOf('d')
|
||||
const day = date.diff(today, 'd')
|
||||
|
||||
return `https://www.hd-plus.de/epg/channel/${channel.site_id}?d=${day}`
|
||||
url({ date }) {
|
||||
return `https://www.antennaeurope.gr/el/tvguide.html?date=${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser({ content, date }) {
|
||||
const programs = []
|
||||
const items = parseItems(content)
|
||||
const items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
const prev = programs[programs.length - 1]
|
||||
const $item = cheerio.load(item)
|
||||
const prev = programs[programs.length - 1]
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start.isBefore(prev.start)) {
|
||||
|
@ -31,27 +28,32 @@ module.exports = {
|
|||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.add(1, 'h')
|
||||
programs.push({ title: parseTitle($item), start, stop })
|
||||
const stop = start.add(30, 'm')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const timeString = $item('td:nth-child(2)').text().split(' ').pop()
|
||||
const dateString = `${date.format('YYYY-MM-DD')} ${timeString}`
|
||||
|
||||
return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Europe/Berlin')
|
||||
function parseTitle($item) {
|
||||
return $item('.title').text().trim()
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('td:nth-child(1) > a').text()
|
||||
function parseStart($item, date) {
|
||||
const time = $item('dt.col-time').clone().children().remove().end().text().trim()
|
||||
|
||||
return time
|
||||
? dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Athens')
|
||||
: null
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $('table > tbody > tr').toArray()
|
||||
return $('dl.show').toArray()
|
||||
}
|
46
sites/antennaeurope.gr/antennaeurope.gr.test.js
Normal file
46
sites/antennaeurope.gr/antennaeurope.gr.test.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
const { parser, url } = require('./antennaeurope.gr.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('2025-01-21', 'YYYY-MM-DD').startOf('d')
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date })).toBe('https://www.antennaeurope.gr/el/tvguide.html?date=2025-01-21')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8')
|
||||
let results = parser({ content, date })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(16)
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-21T03:45:00.000Z',
|
||||
stop: '2025-01-21T07:50:00.000Z',
|
||||
title: 'ΚΑΛΗΜΕΡΑ ΕΛΛΑΔΑ'
|
||||
})
|
||||
|
||||
expect(results[15]).toMatchObject({
|
||||
start: '2025-01-22T01:30:00.000Z',
|
||||
stop: '2025-01-22T02:00:00.000Z',
|
||||
title: 'ΤΟ ΠΡΩΙΝΟ'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
date,
|
||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8')
|
||||
})
|
||||
expect(results).toMatchObject([])
|
||||
})
|
15
sites/antennaeurope.gr/readme.md
Normal file
15
sites/antennaeurope.gr/readme.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# antennaeurope.gr
|
||||
|
||||
https://www.antennaeurope.gr/el/tvguide.html
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=antennaeurope.gr
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- antennaeurope.gr
|
||||
```
|
1078
sites/antennapacific.gr/__data__/content.html
Normal file
1078
sites/antennapacific.gr/__data__/content.html
Normal file
File diff suppressed because it is too large
Load diff
916
sites/antennapacific.gr/__data__/no_content.html
Normal file
916
sites/antennapacific.gr/__data__/no_content.html
Normal file
|
@ -0,0 +1,916 @@
|
|||
<!doctype html>
|
||||
<!--[if IE 7]>
|
||||
<html class="ie7" lang="el"> <![endif]-->
|
||||
<!--[if IE 8]>
|
||||
<html class="ie8" lang="el"> <![endif]-->
|
||||
<!--[if IE 9]>
|
||||
<html class="ie9" lang="el"> <![endif]-->
|
||||
<!--[if !IE]><!-->
|
||||
<html lang="el" itemscope itemtype="http://schema.org/WebPage">
|
||||
<!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" lang="el" />
|
||||
<meta http-equiv="content-language" content="el-gr" />
|
||||
<title>Πρόγραμμα</title>
|
||||
<meta name="description" content="cms39" />
|
||||
<meta name="keywords" content="" />
|
||||
|
||||
<meta name="ROBOTS" content="INDEX, FOLLOW" />
|
||||
<link
|
||||
rel="search"
|
||||
type="application/opensearchdescription+xml"
|
||||
href="https://www.antennapacific.gr/opensearch.php"
|
||||
title="Website search"
|
||||
/>
|
||||
<link href="" rel="publisher" />
|
||||
<meta http-equiv="Cache-control" content="public" />
|
||||
<meta http-equiv="Cache-control" content="max-age=86400" />
|
||||
<meta name="designer" content="www.cdl.gr" />
|
||||
<meta name="generator" content="CMS39 FRAMEWORK v8.9.9.1" />
|
||||
<meta name="copyright" content="antennapacific.gr" />
|
||||
<link rel="alternate" hreflang="el" href="https://www.antennapacific.gr/el/tvguide.html" />
|
||||
<link rel="alternate" hreflang="en" href="https://www.antennapacific.gr/en/tvguide.html" />
|
||||
|
||||
<meta property="fb:app_id" content="966242223397117" />
|
||||
<meta property="og:locale" content="el" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta
|
||||
property="og:url"
|
||||
content="https://www.antennapacific.gr/el/tvguide.html?date=2026-01-21"
|
||||
/>
|
||||
<meta property="og:site_name" content="antennapacific.gr" />
|
||||
<meta property="og:title" content="Πρόγραμμα" />
|
||||
<meta property="og:description" content="cms39" />
|
||||
<meta
|
||||
property="og:image"
|
||||
content="https://www.antennapacific.gr/media/upload-files/cache/646/6461bfb90f8f41ad34e74a3396e1edfa_pacificlogo.jpg"
|
||||
/>
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
<script type="text/javascript">
|
||||
var Durl = 'https://www.antennapacific.gr/el'
|
||||
var Turl = 'https://www.antennapacific.gr/themes/default'
|
||||
var url = 'https://www.antennapacific.gr'
|
||||
var Aurl = 'https://www.antennapacific.gr/administrator/cp_ajax?f='
|
||||
var lang = 'el'
|
||||
var lang_symbol = 'el'
|
||||
var siteName = 'antennapacific.gr'
|
||||
var siteV = '5.7.4'
|
||||
var Purl = 'https://www.antennapacific.gr/public/plugins'
|
||||
</script>
|
||||
<link
|
||||
rel="alternate"
|
||||
type="application/rss+xml"
|
||||
title="antennapacific.gr Feed"
|
||||
href="https://www.antennapacific.gr/rss.php"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="57x57"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-57x57.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="60x60"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-60x60.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="72x72"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-72x72.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="76x76"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-76x76.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="114x114"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-114x114.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="120x120"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-120x120.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="144x144"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-144x144.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="152x152"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-152x152.png"
|
||||
/>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/apple-icon-180x180.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/android-icon-192x192.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="32x32"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/favicon-32x32.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="96x96"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/favicon-96x96.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="https://www.antennapacific.gr/themes/default/img/ico/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="https://www.antennapacific.gr/themes/default/manifest.json" />
|
||||
<meta
|
||||
name="msapplication-TileImage"
|
||||
content="https://www.antennapacific.gr/themes/default/img/ico/ms-icon-144x144.png"
|
||||
/>
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
|
||||
<script type="text/javascript">
|
||||
var contact_url = 'https://www.antennapacific.gr'
|
||||
var contact_field_message_min = '20'
|
||||
var contact_field_message_max = '100'
|
||||
var contact_lang = 'el'
|
||||
</script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/assets/owl.carousel.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/assets/owl.theme.default.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/jquery-typeahead@2.11.1/dist/jquery.typeahead.min.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://www.antennapacific.gr/plugins/cms39_search/cms39_search.css?v=4.5"
|
||||
/>
|
||||
<link rel="stylesheet" href="https://www.antennapacific.gr/plugins/contactform/contact.css" />
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-118766183-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || []
|
||||
function gtag() {
|
||||
dataLayer.push(arguments)
|
||||
}
|
||||
gtag('js', new Date())
|
||||
gtag('config', 'UA-118766183-1')
|
||||
</script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="https://www.antennapacific.gr/themes/default/style.css?version=5.7.4"
|
||||
/>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdn.jsdelivr.net/html5shiv/3.7.2/html5shiv-printshiv.min.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-16697709160"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || []
|
||||
function gtag() {
|
||||
dataLayer.push(arguments)
|
||||
}
|
||||
gtag('js', new Date())
|
||||
gtag('config', 'AW-16697709160')
|
||||
</script>
|
||||
</head>
|
||||
<body class="el css_100 css_tvguide css_0 css_page css_page css_root_100 desktop">
|
||||
<div class="masterWraper">
|
||||
<header>
|
||||
<div class="container-fluid">
|
||||
<a
|
||||
class="logo"
|
||||
href="https://www.antennapacific.gr/el/home.html"
|
||||
title="antennapacific.gr"
|
||||
><img
|
||||
alt="logo antennapacific.gr"
|
||||
src="https://www.antennapacific.gr/themes/default/img/pac.svg"
|
||||
/></a>
|
||||
|
||||
<div class="colarea1">
|
||||
<div class="col1inner">
|
||||
<div class="text-right colmenu">
|
||||
<button
|
||||
class="menu-toggle"
|
||||
data-toggle="collapse"
|
||||
data-target="#collapseMenu"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapseMenu"
|
||||
>
|
||||
<span class="menu-icon">
|
||||
<span class="first"></span>
|
||||
<span class="second"></span>
|
||||
<span class="third"></span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sitesearch text-left">
|
||||
<div
|
||||
class="site-search grid__col-auto grid--justify-center grid--align-center visible__sm"
|
||||
>
|
||||
<button
|
||||
class="search-btn"
|
||||
data-toggle="collapse"
|
||||
data-target="#collapseSearch"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapseSearch"
|
||||
>
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="colarea2">
|
||||
<ul class="list-inline"></ul>
|
||||
</div>
|
||||
<div class="colarea3 col-live-now text-right">
|
||||
<a
|
||||
class="playnow"
|
||||
title="more information"
|
||||
data-bid="8136"
|
||||
data-dum="273743"
|
||||
href="https://www.antennapacific.gr/el/to-proino.html"
|
||||
><span class="highlight">Παίζει τώρα</span>ΤΟ ΠΡΩΙΝΟ</a
|
||||
>
|
||||
<ul class="list-inline lang-list">
|
||||
<li class="cms39_language_loop cms39_language_loop_li_el active">
|
||||
<a
|
||||
class="cms39_language_link_el active"
|
||||
title="Ελληνικά"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html"
|
||||
>Ελληνικά</a
|
||||
>
|
||||
</li>
|
||||
<li class="cms39_language_loop cms39_language_loop_li_en">
|
||||
<a
|
||||
class="cms39_language_link_en"
|
||||
title="English"
|
||||
href="https://www.antennapacific.gr/en/tvguide.html"
|
||||
>English</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="collapseMenu" class="collapse">
|
||||
<form
|
||||
role="search"
|
||||
class="searchform"
|
||||
id="searchform"
|
||||
action="https://www.antennapacific.gr/el/search.html"
|
||||
method="GET"
|
||||
>
|
||||
<div class="typeahead__container">
|
||||
<div class="typeahead__field">
|
||||
<span class="typeahead__query">
|
||||
<label for="searchform_q" class="hidden">εύρεση</label>
|
||||
<input
|
||||
class="js-typeahead searchformField form-control"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
placeholder="Αναζήτηση"
|
||||
value=""
|
||||
name="q"
|
||||
id="searchform_q"
|
||||
required
|
||||
/>
|
||||
</span>
|
||||
<span class="typeahead__button">
|
||||
<button type="submit" class="searchformSubmit btn btn-default" title="search site">
|
||||
<span class="typeahead__search-icon"></span>
|
||||
</button>
|
||||
</span>
|
||||
<input data-storage="false" type="hidden" name="date" value="2026-01-21" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<nav class="cms39-header-nav">
|
||||
<ul id="cms39-header-nav" class="cms39-navbar-nav ul-29">
|
||||
<li class="active">
|
||||
<a
|
||||
title="Πρόγραμμα"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html"
|
||||
class="active"
|
||||
>Πρόγραμμα</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Εκπομπές" href="https://www.antennapacific.gr/el/shows.html" class=""
|
||||
>Εκπομπές</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Αθλητικά" href="https://www.antennapacific.gr/el/sports.html" class=""
|
||||
>Αθλητικά</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Συνδεθείτε " href="https://www.antennapacific.gr/el/connect.html" class=""
|
||||
>Συνδεθείτε
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Links" href="https://www.antennapacific.gr/el/links.html" class="">Links</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Επικοινωνία" href="https://www.antennapacific.gr/el/contact.html" class=""
|
||||
>Επικοινωνία</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="site-social grid__cell-footer">
|
||||
<ul class="grid">
|
||||
<li>
|
||||
<a href="https://www.facebook.com/antenna.pacific/" target="_blank">
|
||||
<span class="icon icon-facebook"
|
||||
><span class="screen-reader-text"><i class="fab fa-facebook-f"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" target="_blank">
|
||||
<span class="icon icon-twitter"
|
||||
><span class="screen-reader-text"><i class="fab fa-twitter"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.instagram.com/antenna_pacific/" target="_blank">
|
||||
<span class="icon icon-instagram"
|
||||
><span class="screen-reader-text"><i class="fab fa-instagram"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" target="_blank">
|
||||
<span class="icon icon-youtube"
|
||||
><span class="screen-reader-text"><i class="fab fa-youtube"></i></span
|
||||
></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- .site-social -->
|
||||
</div>
|
||||
<ul class="list-inline lang-list">
|
||||
<li class="cms39_language_loop cms39_language_loop_li_el active">
|
||||
<a
|
||||
class="cms39_language_link_el active"
|
||||
title="Ελληνικά"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html"
|
||||
>Ελληνικά</a
|
||||
>
|
||||
</li>
|
||||
<li class="cms39_language_loop cms39_language_loop_li_en">
|
||||
<a
|
||||
class="cms39_language_link_en"
|
||||
title="English"
|
||||
href="https://www.antennapacific.gr/en/tvguide.html"
|
||||
>English</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="collapseSearch" class="collapse">
|
||||
<div class="inner">
|
||||
<div class="container-fluid">
|
||||
<form
|
||||
role="search"
|
||||
class="searchform"
|
||||
id="searchform"
|
||||
action="https://www.antennapacific.gr/el/search.html"
|
||||
method="GET"
|
||||
>
|
||||
<div class="typeahead__container">
|
||||
<div class="typeahead__field">
|
||||
<span class="typeahead__query">
|
||||
<label for="searchform_q" class="hidden">εύρεση</label>
|
||||
<input
|
||||
class="js-typeahead searchformField form-control"
|
||||
type="search"
|
||||
autocomplete="off"
|
||||
placeholder="Αναζήτηση"
|
||||
value=""
|
||||
name="q"
|
||||
id="searchform_q"
|
||||
required
|
||||
/>
|
||||
</span>
|
||||
<span class="typeahead__button">
|
||||
<button
|
||||
type="submit"
|
||||
class="searchformSubmit btn btn-default"
|
||||
title="search site"
|
||||
>
|
||||
<span class="typeahead__search-icon"></span>
|
||||
</button>
|
||||
</span>
|
||||
<input data-storage="false" type="hidden" name="date" value="2026-01-21" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="info">Άρχισε να πληκτρολογείς οτιδήποτε</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ant1col2">
|
||||
<div class="featuredContentContainer container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-8">
|
||||
<article class="programme-container">
|
||||
<div id="programmeCalendar" class="calendar-horizontal">
|
||||
<div class="showCarousel owl-carousel">
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-17"
|
||||
>Παρασκευή <span>17/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-18"
|
||||
>Σάββατο <span>18/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-19"
|
||||
>Κυριακή <span>19/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-20"
|
||||
>Δευτέρα <span>20/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-21"
|
||||
>Τρίτη <span>21/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-22"
|
||||
>Τετάρτη <span>22/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-23"
|
||||
>Πέμπτη <span>23/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-24"
|
||||
>Παρασκευή <span>24/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-25"
|
||||
>Σάββατο <span>25/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-26"
|
||||
>Κυριακή <span>26/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-27"
|
||||
>Δευτέρα <span>27/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-28"
|
||||
>Τρίτη <span>28/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-29"
|
||||
>Τετάρτη <span>29/1</span></a
|
||||
>
|
||||
</div>
|
||||
<div class="carousel-cell">
|
||||
<a
|
||||
title="view the program"
|
||||
href="https://www.antennapacific.gr/el/tvguide.html?date=2025-01-30"
|
||||
>Πέμπτη <span>30/1</span></a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="programmeContent" class="programme-content">
|
||||
<div class="row">
|
||||
<div class="day col-12 col-sm-2">
|
||||
<p>Τετάρτη<br />21/1</p>
|
||||
</div>
|
||||
|
||||
<div class="shows col-12 col-sm-10 sentoni">
|
||||
<div id="earlierContainer" class="programme-earlier-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-12 col-sm-4 sidebararea">
|
||||
<div class="banner-placeholder vertical light">
|
||||
<ins
|
||||
data-revive-zoneid="1"
|
||||
data-revive-target="_blank"
|
||||
data-revive-ct0="26359802"
|
||||
data-revive-block="1"
|
||||
data-revive-blockcampaign="1"
|
||||
data-revive-id="30a34a2302634ff5d170d39f518891d2"
|
||||
></ins>
|
||||
<script async src="//dfp.cdl.gr/www/delivery/asyncjs.php"></script>
|
||||
<div class="banner2">
|
||||
<ins
|
||||
data-revive-zoneid="1"
|
||||
data-revive-target="_blank"
|
||||
data-revive-ct0="34315738"
|
||||
data-revive-block="1"
|
||||
data-revive-blockcampaign="1"
|
||||
data-revive-id="30a34a2302634ff5d170d39f518891d2"
|
||||
></ins>
|
||||
<script async src="//dfp.cdl.gr/www/delivery/asyncjs.php"></script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebararea-promo">
|
||||
<h1 class="h1">Δες επίσης</h1>
|
||||
</div>
|
||||
<div class="sidebararea-promo"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-episodes">
|
||||
<h1 class="h1">Πρόγραμμα</h1>
|
||||
<div id="footerFshows" class="owl-carousel owl-theme">
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΡΟΥΚ ΖΟΥΚ"
|
||||
src="https://www.antennapacific.gr/media/upload-files/cache/7dc/7dcad32b0490fd5e2f4eb944fdd13d4c_roukzoukprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΡΟΥΚ ΖΟΥΚ</h2>
|
||||
<p class="excerpt">
|
||||
Η Ζέτα Μακρυπούλια μας χαρίζει για 7η σεζόν ακόμα περισσότερες στιγμές γέλιου και
|
||||
διασκέδασης!
|
||||
</p>
|
||||
<a
|
||||
title="ΡΟΥΚ ΖΟΥΚ"
|
||||
class="more"
|
||||
href="https://www.antennapacific.gr/el/rouk-zouk.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ"
|
||||
src="https://www.antennapacific.gr/media/upload-files/cache/42a/42a69c6936c865b6cb1555da86b8101f_ygeiapanwapolaprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ</h2>
|
||||
<p class="excerpt">
|
||||
Το «Υγεία πάνω απ’ όλα» με τη Φωτεινή Γεωργίου, συνεχίζει για 13η χρονιά!
|
||||
</p>
|
||||
<a
|
||||
title="ΥΓΕΙΑ ΠΑΝΩ ΑΠ’ ΟΛΑ"
|
||||
class="more"
|
||||
href="https://www.antennapacific.gr/el/igia-pano-ap’-ola.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="ΡΑΔΙΟ ΑΡΒΥΛΑ"
|
||||
src="https://www.antennapacific.gr/media/upload-files/cache/356/356e9b3db418c002aa7bb59095c2887d_radioarvylaprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>ΡΑΔΙΟ ΑΡΒΥΛΑ</h2>
|
||||
<p class="excerpt">
|
||||
Όλοι οι τηλεοπτικοί δρόμοι οδηγούν στην καυστική σάτιρα και στους μοναδικούς
|
||||
«Ράδιο Αρβύλα» για 18η χρονιά!
|
||||
</p>
|
||||
<a
|
||||
title="ΡΑΔΙΟ ΑΡΒΥΛΑ"
|
||||
class="more"
|
||||
href="https://www.antennapacific.gr/el/radio-arvila.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt=" THE 2NIGHT SHOW "
|
||||
src="https://www.antennapacific.gr/media/upload-files/cache/94a/94a25d7a699a00776d161c35558f1d8f_2nightshowprogramma.jpeg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>THE 2NIGHT SHOW</h2>
|
||||
<p class="excerpt">
|
||||
Οι πιο ενδιαφέρουσες νυχτερινές εξομολογήσεις με τον Γρηγόρη Αρναούτογλου!
|
||||
</p>
|
||||
<a
|
||||
title=" THE 2NIGHT SHOW "
|
||||
class="more"
|
||||
href="https://www.antennapacific.gr/el/the-2night-show.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="show">
|
||||
<div class="inner">
|
||||
<img
|
||||
alt="THE REUNION"
|
||||
src="https://www.antennapacific.gr/media/upload-files/cache/7f5/7f5502d928d0d36f21be192aa53f062e_thereunionprogramma.jpg"
|
||||
/>
|
||||
<div class="content">
|
||||
<h2>THE REUNION</h2>
|
||||
<p class="excerpt">
|
||||
O Σάκης Τανιμανίδης και ο Γιώργος Μαυρίδης μας ταξιδεύουν σε μοναδικούς
|
||||
προορισμούς και εμπειρίες ζωής!
|
||||
</p>
|
||||
<a
|
||||
title="THE REUNION"
|
||||
class="more"
|
||||
href="https://www.antennapacific.gr/el/the-reunion.html"
|
||||
>Δες περισσότερα</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-8 foot_1">
|
||||
<h2>Εγγραφή στο ενημερωτικό δελτίο</h2>
|
||||
|
||||
<form action="#" id="subscribeform" name="newsletter" method="post">
|
||||
<label for="newsletterEmail" class="screen-reader-text">Το email σου</label>
|
||||
<input
|
||||
id="newsletterEmail"
|
||||
type="email"
|
||||
name="email"
|
||||
placeholder="Το email σου"
|
||||
required
|
||||
/>
|
||||
<input type="submit" name="submit" value="Εγγραφή" />
|
||||
<input type="hidden" name="__mail_required" value="email" />
|
||||
<input
|
||||
type="hidden"
|
||||
name="__mail_subject"
|
||||
value="Antenna Pacific Newsletter form"
|
||||
/>
|
||||
<input
|
||||
type="hidden"
|
||||
name="__mail_success"
|
||||
value="Thank you and welcome to our Newsletter Service!"
|
||||
/>
|
||||
<input
|
||||
type="hidden"
|
||||
name="url"
|
||||
value="https://www.antennapacific.gr/el/tvguide.html?date=2026-01-21"
|
||||
/>
|
||||
<input type="hidden" name="datetime" value="2025-01-17 09:57:45" />
|
||||
<div id="subscribeformMSG"></div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-4 foot_2">
|
||||
<h2>Ακολουθήστε μας</h2>
|
||||
<ul class="site-social grid">
|
||||
<li>
|
||||
<a href="https://www.facebook.com/antenna.pacific/" target="_blank">
|
||||
<span class="icon icon-facebook">
|
||||
<span class="screen-reader-text"><i class="fab fa-facebook-f"></i></span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.instagram.com/antenna_pacific/" target="_blank">
|
||||
<span class="icon icon-instagram">
|
||||
<span class="screen-reader-text"><i class="fab fa-instagram"></i></span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<nav class="cms39-footer-nav">
|
||||
<ul id="cms39-footer-nav" class="cms39-footer-nav ul-106">
|
||||
<li class="">
|
||||
<a
|
||||
title="Επικοινωνία"
|
||||
href="https://www.antennapacific.gr/el/contact.html"
|
||||
class=""
|
||||
>Επικοινωνία</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Συνδεθείτε "
|
||||
href="https://www.antennapacific.gr/el/connect.html"
|
||||
class=""
|
||||
>Συνδεθείτε
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Εργασία"
|
||||
href="https://www.antennapacific.gr/el/workwithus.html"
|
||||
class=""
|
||||
>Εργασία</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Διαφημιστείτε"
|
||||
href="https://www.antennapacific.gr/el/advertise.html"
|
||||
class=""
|
||||
>Διαφημιστείτε</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Για εμάς" href="https://www.antennapacific.gr/el/about.html" class=""
|
||||
>Για εμάς</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="Links" href="https://www.antennapacific.gr/el/links.html" class=""
|
||||
>Links</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Όροι χρήσης"
|
||||
href="https://www.antennapacific.gr/el/terms.html"
|
||||
class=""
|
||||
>Όροι χρήσης</a
|
||||
>
|
||||
</li>
|
||||
<li class="">
|
||||
<a title="FAQ" href="https://www.antennapacific.gr/el/faq.html" class="">FAQ</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a
|
||||
title="Δελτία Τύπου"
|
||||
href="https://www.antennapacific.gr/el/press.html"
|
||||
class=""
|
||||
>Δελτία Τύπου</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-12 foot_3 text-dark text-theme-copyright">
|
||||
© 2025 ANT1 TV | 2025-01-17 09:57:45
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="copyright text-center">
|
||||
<div id="cdl" style="display: inline-block">
|
||||
<span style="width: 49px; height: 43px; overflow: hidden; display: block">
|
||||
<a
|
||||
rel="external"
|
||||
style="display: block; margin: 0px"
|
||||
target="_blank"
|
||||
title="Array"
|
||||
href="https://www.cdl.gr"
|
||||
>
|
||||
<img
|
||||
width="49"
|
||||
height="43"
|
||||
alt="Array"
|
||||
src="https://www.cdl.gr/media/upload-files/cdl-logo-white.png"
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
rel="external"
|
||||
style="visibility: hidden; display: none margin: 0px;"
|
||||
title="Θέλεις κονκάρδες από το αγαπημένο σου συγκρότημα, κονκάρδες για το bachelor σου, κονκάρδες για τους καλεσμένους σου, κονκάρδες για το party των παιδιών σου, κονκάρδες για την προώθηση της επιχειρησης σου; Τα πάντα για κονκάρδες μόνο στο concarda.com"
|
||||
href="http://www.concarda.com"
|
||||
target="_blank"
|
||||
>για κονκάρδες μόνο στο concarda.com</a
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- created by https://www.cdl.gr Creative Studio, κατασκευή ιστοσελίδων, ιστοσελίδες, digital agency. -->
|
||||
<script type="text/javascript">
|
||||
var search_autocomplete_template = '<span>{{title}}</span>'
|
||||
var search_autocomplete_limit = '10'
|
||||
var search_autocomplete_minLength = '3'
|
||||
var search_autocomplete_emptyTemplate = 'No results found for {{query}}'
|
||||
</script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/block-ui@2.70.1/jquery.blockUI.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/owl.carousel@2.2.0/dist/owl.carousel.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://use.fontawesome.com/releases/v5.0.8/js/all.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://www.antennapacific.gr/themes/default/js/plugins.js"
|
||||
></script>
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="https://www.antennapacific.gr/themes/default/js/app.js?sha=392fd813650ad1d0420e373638676083"
|
||||
></script>
|
||||
<script
|
||||
async
|
||||
defer
|
||||
type="text/javascript"
|
||||
src="https://cdn.jsdelivr.net/npm/jquery-typeahead@2.11.1/dist/jquery.typeahead.min.js"
|
||||
></script>
|
||||
<script
|
||||
async
|
||||
defer
|
||||
type="text/javascript"
|
||||
src="https://www.antennapacific.gr/plugins/cms39_search/cms39_search.js?v=4.5"
|
||||
></script>
|
||||
</body>
|
||||
</html>
|
4
sites/antennapacific.gr/antennapacific.gr.channels.xml
Normal file
4
sites/antennapacific.gr/antennapacific.gr.channels.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="antennapacific.gr" lang="el" xmltv_id="ANT1Pacific.gr" site_id="#">ANT1 PACIFIC</channel>
|
||||
</channels>
|
59
sites/antennapacific.gr/antennapacific.gr.config.js
Normal file
59
sites/antennapacific.gr/antennapacific.gr.config.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'antennapacific.gr',
|
||||
days: 2,
|
||||
url({ date }) {
|
||||
return `https://www.antennapacific.gr/el/tvguide.html?date=${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser({ content, date }) {
|
||||
const programs = []
|
||||
const items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
const $item = cheerio.load(item)
|
||||
const prev = programs[programs.length - 1]
|
||||
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),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('.title').text().trim()
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const time = $item('dt.col-time').clone().children().remove().end().text().trim()
|
||||
|
||||
return time
|
||||
? dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Athens')
|
||||
: null
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $('dl.show').toArray()
|
||||
}
|
46
sites/antennapacific.gr/antennapacific.gr.test.js
Normal file
46
sites/antennapacific.gr/antennapacific.gr.test.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
const { parser, url } = require('./antennapacific.gr.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('2025-01-21', 'YYYY-MM-DD').startOf('d')
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date })).toBe('https://www.antennapacific.gr/el/tvguide.html?date=2025-01-21')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8')
|
||||
let results = parser({ content, date })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(17)
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-21T05:00:00.000Z',
|
||||
stop: '2025-01-21T06:00:00.000Z',
|
||||
title: 'ANT1 NEWS - ΚΕΝΤΡΙΚΟ ΔΕΛΤΙΟ'
|
||||
})
|
||||
|
||||
expect(results[16]).toMatchObject({
|
||||
start: '2025-01-22T02:45:00.000Z',
|
||||
stop: '2025-01-22T03:15:00.000Z',
|
||||
title: 'ΚΑΛΗΜΕΡΑ ΕΛΛΑΔΑ'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
date,
|
||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8')
|
||||
})
|
||||
expect(results).toMatchObject([])
|
||||
})
|
15
sites/antennapacific.gr/readme.md
Normal file
15
sites/antennapacific.gr/readme.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# antennapacific.gr
|
||||
|
||||
https://www.antennapacific.gr/el/tvguide.html
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=antennapacific.gr
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- antennapacific.gr
|
||||
```
|
7
sites/antennasatellite.gr/__data__/content.html
Normal file
7
sites/antennasatellite.gr/__data__/content.html
Normal file
File diff suppressed because one or more lines are too long
7
sites/antennasatellite.gr/__data__/no_content.html
Normal file
7
sites/antennasatellite.gr/__data__/no_content.html
Normal file
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="antennasatellite.gr" lang="el" xmltv_id="ANT1Satellite.gr" site_id="#">ANT1 SATELLITE</channel>
|
||||
</channels>
|
59
sites/antennasatellite.gr/antennasatellite.gr.config.js
Normal file
59
sites/antennasatellite.gr/antennasatellite.gr.config.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'antennasatellite.gr',
|
||||
days: 2,
|
||||
url({ date }) {
|
||||
return `https://www.antennasatellite.gr/el/tvguide.html?date=${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser({ content, date }) {
|
||||
const programs = []
|
||||
const items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
const $item = cheerio.load(item)
|
||||
const prev = programs[programs.length - 1]
|
||||
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),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('.title').text().trim()
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const time = $item('dt.col-time').clone().children().remove().end().text().trim()
|
||||
|
||||
return time
|
||||
? dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Athens')
|
||||
: null
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $('dl.show').toArray()
|
||||
}
|
46
sites/antennasatellite.gr/antennasatellite.gr.test.js
Normal file
46
sites/antennasatellite.gr/antennasatellite.gr.test.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
const { parser, url } = require('./antennasatellite.gr.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('2025-01-21', 'YYYY-MM-DD').startOf('d')
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date })).toBe('https://www.antennasatellite.gr/el/tvguide.html?date=2025-01-21')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8')
|
||||
let results = parser({ content, date })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(16)
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-21T04:00:00.000Z',
|
||||
stop: '2025-01-21T04:40:00.000Z',
|
||||
title: 'ANT1 NEWS'
|
||||
})
|
||||
|
||||
expect(results[15]).toMatchObject({
|
||||
start: '2025-01-22T00:50:00.000Z',
|
||||
stop: '2025-01-22T01:20:00.000Z',
|
||||
title: 'ΤΟ ΠΡΩΙΝΟ'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
date,
|
||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8')
|
||||
})
|
||||
expect(results).toMatchObject([])
|
||||
})
|
15
sites/antennasatellite.gr/readme.md
Normal file
15
sites/antennasatellite.gr/readme.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# antennasatellite.gr
|
||||
|
||||
https://www.antennasatellite.gr/el/tvguide.html
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=antennasatellite.gr
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- antennasatellite.gr
|
||||
```
|
|
@ -11,14 +11,14 @@
|
|||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="BblackCaribbean.fr" site_id="51557">Bblack! Caribbean</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="C8.fr" site_id="51120">C8</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="Canal10.gp" site_id="51176">Canal 10</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CanalPlusCinema.fr" site_id="51014">Canal + Cinéma France</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CanalPlusHaiti.fr" site_id="51966">Canal + Haïti</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="" site_id="51014">Canal + Cinéma France</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="" site_id="51966">Canal + Haïti</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CanalPlusKids.fr" site_id="51401">Canal + Kids</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CanalPlusSport.fr" site_id="51022">Canal + Sport France</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusClassic.fr" site_id="51328">Cine + Classic</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusClub.fr" site_id="51024">Cine + Club</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusEmotion.fr" site_id="51025">Cine + Émotion</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusFamiz.fr" site_id="51026">Cine + Famiz</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="" site_id="51026">Cine + Famiz</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusFrisson.fr" site_id="51027">Cine + Frisson</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CinePlusPremier.fr" site_id="51028">Cine + Premier</channel>
|
||||
<channel site="canalplus-haiti.com" lang="fr" xmltv_id="CNews.fr" site_id="51048">C News</channel>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalAlphaNE.ch" site_id="#772">CANAL ALPHA NE</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalJ.fr" site_id="#525">CANAL J</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalPlus.fr" site_id="#301">CANAL+</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalPlusCinema.fr" site_id="#198">CANAL+CINEMA(S)</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="" site_id="#198">CANAL+CINEMA(S)</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalPlusDocs.fr" site_id="#899">CANAL+DOCS</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalPlusFoot.fr" site_id="#19">CANAL+FOOT</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CanalPlusFormula1.fr" site_id="#824">CANAL+FORMULA1</channel>
|
||||
|
@ -47,7 +47,7 @@
|
|||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusClassic.fr" site_id="#531">CINE+ CLASSIC</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusClub.fr" site_id="#532">CINE+ CLUB</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusEmotion.fr" site_id="#396">CINE+ EMOTION</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusFamiz.fr" site_id="#533">CINE+ FAMIZ</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="" site_id="#533">CINE+ FAMIZ</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusFrisson.fr" site_id="#398">CINE+ FRISSON</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CinePlusPremier.fr" site_id="#322">CINE+ PREMIER</channel>
|
||||
<channel site="canalplus.com" lang="fr" xmltv_id="CNBCEurope.uk" site_id="#64">CNBC</channel>
|
||||
|
|
|
@ -175,7 +175,7 @@
|
|||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="C8.fr" site_id="445">C8</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalJ.fr" site_id="32">CANAL J</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalPlus.fr" site_id="34">CANAL+</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalPlusCinema.fr" site_id="33">CANAL+CINEMA(S)</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="" site_id="33">CANAL+CINEMA(S)</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalPlusDocs.fr" site_id="3347">CANAL+DOCS</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalPlusGrandEcran.fr" site_id="3349">CANAL+GRAND ECRAN</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CanalPlusKids.fr" site_id="3348">CANAL+kids</channel>
|
||||
|
@ -186,7 +186,7 @@
|
|||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusClassic.fr" site_id="287">CINE+CLASSIC</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusClub.fr" site_id="285">CINE+CLUB</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusEmotion.fr" site_id="283">CINE+EMOTION</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusFamiz.fr" site_id="401">CINE+FAMIZ</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="" site_id="401">CINE+FAMIZ</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusFrisson.fr" site_id="284">CINE+FRISSON</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="CinePlusPremier.fr" site_id="282">CINE+PREMIER</channel>
|
||||
<channel site="chaines-tv.orange.fr" lang="fr" xmltv_id="ClubbingTV.fr" site_id="1989">CLUBBING TV</channel>
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="" site_id="ATB (4)">ATB</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="" site_id="P.A.T. (42)">PAT</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="" site_id="Sony">Sony Channel</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AbyaYalaTV.bo" site_id="ABYA YALA">Abya Yala TV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AEPanregional.us" site_id="A&E Mundo">A&E</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AMCLatinAmerica.us" site_id="AMC">AMC</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AnimalPlanetLatinAmerica.us" site_id="Animal Planet">Animal Planet</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AXNCentralAmerica.us" site_id="AXN">AXN</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="AzMundo.mx" site_id="AZ Mundo">Az Mundo</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="BoliviaTV.bo" site_id="Bolivia TV (7)">Bolivia TV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="BoliviaTV72.bo" site_id="Bolivia TV (7.2)">Bolivia TV 7.2 Deportes</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="Bolivision.bo" site_id="Bolivision (5)">Bolivisión</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CadenaA.bo" site_id="Cadena A (36)">Cadena A</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="24Horas.es" site_id="Canal 24 horas">Canal 24 Horas</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CaracolInternacional.co" site_id="Caracol">Caracol TV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CartoonNetworkPacific.us" site_id="Cartoon Network">Cartoon Network</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CinecanalEast.us" site_id="CINECANAL">Cinecanal Este</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CinemaxLatinAmerica.us" site_id="Cinemax">Cinemax</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CNNInternationalLatinAmerica.us" site_id="CNN">CNN</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="CubavisionInternacional.cu" site_id="Cuba Vision">Cubavisión</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DePeliculaLatinAmerica.mx" site_id="De Pelicula">De Película</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DiscoveryChannelPanregional.us" site_id="Discovery Chanel">Discovery Channel</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DiscoveryHomeHealthPanregional.us" site_id="Discovery Home & Health">Discovery Home & Health Latinoamérica</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DiscoveryKidsPanregional.us" site_id="Discovery Kids">Discovery Kids América Latina</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DisneyChannelSouth.us" site_id="Disney Chanel">Disney Channel</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="DisneyJunior.es" site_id="Disney Junior">Disney Junior España</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="ElGourmetSouth.ar" site_id="elgourmet">El Gourmet</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="ElTreceInternacionalLatinAmerica.ar" site_id="El Trece">El Trece</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="ESouth.us" site_id="E! Entertaiment">E!</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="EuronewsSpanish.fr" site_id="EURONEWS">EuroNews Español</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="EuropaEuropa.ar" site_id="EUROPA EUROPA">Europa Europa</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="EWTNEspanaLatinAmerica.us" site_id="EWTN">EWTN</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="FoxSports2South.us" site_id="Fox Sport 2">Fox Sports 2</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="FoxSports3Panregional.us" site_id="Fox Sport 3">Fox Sports 3</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="FoxSportsSouth.us" site_id="Fox Sport">Fox Sports Latin America</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="FXMEast.us" site_id="FXM">FXM</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="FXSouth.us" site_id="FX">FX</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="HBOLatinAmerica.us" site_id="HBO">HBO</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="HistoryPanregional.us" site_id="History Chanel">History</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="HTV.us" site_id="HTV">HTV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="InvestigationDiscoveryPanregional.us" site_id="ID">Investigation Discovery</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="MariaVision.mx" site_id="Clara Vision">María+Visión</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="MasChicPanregional.ar" site_id="MAS CHIC">Más Chic</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="MTVNorth.us" site_id="MTV">MTV Latino Norte</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="NatGeoKidsPanregional.us" site_id="NatGeo Kids">Nat Geo Kids</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="NationalGeographicPanregional.us" site_id="Nathional Geografic">National Geographic</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="NickelodeonPanregional.us" site_id="Nickelodeom">Nickelodeon</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="RecordTVAmericas.br" site_id="Record">Record TV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="RedUno.bo" site_id="Red Uno (9)">Red Uno</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="RTP.bo" site_id="RTP Red Nacional">RTP</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="SBTInternacionalAmerica.br" site_id="SBT">SBT</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="Space.mx" site_id="Space">Space México</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="StarChannelPanregional.us" site_id="STAR">Star Channel</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="StarLifePanregional.us" site_id="STAR LIFE">Star Life</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="StudioUniversalPanregional.us" site_id="Studio Universal">Studio Universal</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TBSPanregional.us" site_id="TBS Very Funny">TBS</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TCMPanregional.us" site_id="TCM">TCM</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TelefeInternacional.ar" site_id="Telefe Internacional">Telefe Internacional</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TelemundoCentralAmerica.us" site_id="Telemundo">Telemundo</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TelesurEnglish.ve" site_id="Telesur">Telesur</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TLCLatinAmerica.us" site_id="TLC">TLC</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TlnovelasLatinAmerica.mx" site_id="TeleNovelas">Tlnovelas</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TNTPacific.us" site_id="TNT">TNT</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TNTSeries.br" site_id="TNT SERIES">TNT Series</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="Tooncast.us" site_id="Toon Cast">Tooncast</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TVChile.cl" site_id="TV Chile">TV Chile</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TVCulturas.bo" site_id="TV Culturas">TV Culturas</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TVEInternacionalAmerica.es" site_id="TVE">TVE</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TVGloboInternacionalAmericas.br" site_id="TV Globo Internacional">TV Globo Internacional</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TVPeruInternacional.pe" site_id="TNP">TV Perú</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="TyCSportsPanregional.ar" site_id="TyC Sports">TyC Sports</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="UnitelSantaCruz.bo" site_id="Unitel (13)">Unitel Santa Cruz</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="UniversalTVPanregional.us" site_id="Universal">Universal TV</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="VH1East.us" site_id="Vh1">VH1 East</channel>
|
||||
<channel site="comteco.com.bo" lang="es" xmltv_id="WarnerChannelPanregional.us" site_id="Warner Channel">Warner Channel</channel>
|
||||
</channels>
|
|
@ -1,68 +0,0 @@
|
|||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'comteco.com.bo',
|
||||
days: 2,
|
||||
url: function ({ channel }) {
|
||||
return `https://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/${channel.site_id}`
|
||||
},
|
||||
request: {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
data: function ({ date }) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('_method', 'POST')
|
||||
params.append('fechaini', date.format('D/M/YYYY'))
|
||||
params.append('fechafin', date.format('D/M/YYYY'))
|
||||
|
||||
return params
|
||||
}
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
const 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), start, stop })
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const timeString = $item('div > div.col-xs-11 > p > span').text().trim()
|
||||
const dateString = `${date.format('YYYY-MM-DD')} ${timeString}`
|
||||
|
||||
return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm:ss', 'America/La_Paz')
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('div > div.col-xs-11 > p > strong').text().trim()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $('#datosasociados > div > .list-group-item').toArray()
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
const { parser, url, request } = require('./comteco.com.bo.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-11-25', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'ABYA YALA',
|
||||
xmltv_id: 'AbyaYalaTV.bo'
|
||||
}
|
||||
const content =
|
||||
'<!DOCTYPE html><html dir="ltr" lang="es"> <head></head> <body class=""> <div id="wrapper" class="clearfix"> <div class="main-content"> <section class="rubroguias"> <div class="container pt-70 pb-40"> <div class="section-content"> <form method="post" accept-charset="utf-8" class="reservation-form mb-0" role="form" id="myform" action="/pages/canales-y-programacion-tv/paquete-oro/ABYA%20YALA" > <div style="display: none"><input type="hidden" name="_method" value="POST"/></div><div class="row"> <div class="col-sm-5"> <div class="col-xs-5 col-sm-7"> <img src="/img/upload/canales/abya-yala.png" alt="" class="img-responsive"/> </div><div class="col-xs-7 col-sm-5 mt-sm-50 mt-lg-50 mt-md-50 mt-xs-20"> <p><strong>Canal Analógico:</strong> 48</p></div></div></div></form> <div class="row"> <div class="col-sm-12"> <div class="row mt-0"> <div class="single-service"> <h3 class=" text-theme-colored line-bottom text-theme-colored mt-0 text-uppercase " > ABYA YALA </h3> <div id="datosasociados"> <div class="list-group"> <div href="#" class="list-group-item bg-white-f1"> <div class="row"> <div class="col-xs-11"> <p class="mb-0"> <span class="text-red mr-15">00:00:00</span> <strong>Abya Yala noticias - 3ra edición</strong> </p></div></div></div><div href="#" class="list-group-item bg-white-f1"> <div class="row"> <div class="col-xs-11"> <p class="mb-0"> <span class="text-red mr-15">01:00:00</span> <strong>Cierre de emisión</strong> </p></div></div></div><div href="#" class="list-group-item bg-white-f1"> <div class="row"> <div class="col-xs-11"> <p class="mb-0"> <span class="text-red mr-15">23:00:00</span> <strong>Referentes</strong> </p></div></div></div><p class="mt-20"> <a href="/pages/canales-y-programacion-tv" class="btn btn-border btn-gray btn-transparent btn-circled" >Regresar a canales</a > </p></div></div></div></div></div></div></div></div></section> </div></div></body></html>'
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel })).toBe(
|
||||
'https://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/ABYA YALA'
|
||||
)
|
||||
})
|
||||
|
||||
it('can generate valid request method', () => {
|
||||
expect(request.method).toBe('POST')
|
||||
})
|
||||
|
||||
it('can generate valid request headers', () => {
|
||||
expect(request.headers).toMatchObject({
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
})
|
||||
})
|
||||
|
||||
it('can generate valid request data', () => {
|
||||
const result = request.data({ date })
|
||||
expect(result.get('_method')).toBe('POST')
|
||||
expect(result.get('fechaini')).toBe('25/11/2021')
|
||||
expect(result.get('fechafin')).toBe('25/11/2021')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const result = parser({ content, channel, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2021-11-25T04:00:00.000Z',
|
||||
stop: '2021-11-25T05:00:00.000Z',
|
||||
title: 'Abya Yala noticias - 3ra edición'
|
||||
},
|
||||
{
|
||||
start: '2021-11-25T05:00:00.000Z',
|
||||
stop: '2021-11-26T03:00:00.000Z',
|
||||
title: 'Cierre de emisión'
|
||||
},
|
||||
{
|
||||
start: '2021-11-26T03:00:00.000Z',
|
||||
stop: '2021-11-26T03:30:00.000Z',
|
||||
title: 'Referentes'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: '<!DOCTYPE html><html><head></head><body></body></html>'
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
|
@ -1,15 +0,0 @@
|
|||
# comteco.com.bo
|
||||
|
||||
https://www.comteco.com.bo/pages/canales-y-programacion-tv/
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=comteco.com.bo
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- comteco.com.bo
|
||||
```
|
1
sites/digea.gr/__data__/content.json
Normal file
1
sites/digea.gr/__data__/content.json
Normal file
File diff suppressed because one or more lines are too long
95
sites/digea.gr/digea.gr.channels.xml
Normal file
95
sites/digea.gr/digea.gr.channels.xml
Normal file
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3100">ALPHA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3200">SKAI</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3300">ANT1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3400">OPEN BEYOND</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3500">STAR</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3600">MEGA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="3700">ΜΑΚΕΔΟΝΙΑ ΤV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4020">ΔΕΛΤΑ ΤΗΛΕΟΡΑΣΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4030">ΔΙΚΤΥΟ TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4040">ENA CHANNEL</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4050">ΕΠΙΛΟΓΕΣ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4060">ΘΡΑΚΗ ΝΕΤ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4070">ΟΡΕΣΤΙΑΔΑ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4080">ALFA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4090">CENTER TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4100">NEXT TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4110">SMILE (Θράκης)</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4120">STAR ΒOΡΕΙΟΥ ΕΛΛΑΔΟΣ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4170">ΛΥΔΙΑ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4240">ΒΕΡΓΙΝΑ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4260">DION ΤΗΛΕΟΡΑΣΗ Κεντρικής Μακεδονίας</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4270">EURO TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4280">EUROPE 1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4290">GNOMI TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4300">TV100 ΘΕΣΣΑΛΟΝΙΚΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4310">EGNATIA THLEORASI</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4320">PELLA TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4360">AE CHANNEL Thessaloniki</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4370">NICKELODEON+</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4380">4E</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4450">ΛΥΧΝΟΣ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4460">ΜΕΣΟΓΕΙΟΣ ΤΗΛΕΟΡΑΣΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4470">ΟΡΤ TELEVISION</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4490">ΑRT</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4510">BEST</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4520">IONIAN</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4530">LEPANTO ΤΗΛΕΟΡΑΣΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4540">Patra tv</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4550">RTP ΚΕΝΤΡΟ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4560">SUPER</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4670">ΘΕΣΣΑΛΙΑ ΤΗΛΕΟΡΑΣΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4680">ASTRA TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4690">SMILE +</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4700">TRT</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4710">FORMedia TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4800">ENA TV KE</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4810">STAR K.E.</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4830">E ΤV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4900">ΑΡΤ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4910">ALERT</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4920">ATTICA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4930">BLUE SKY</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4940">One Channel</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4950">EXTRA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="4990">A.EPSILON</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5000">ACTION 24</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5010">HIGH TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5020">KONTRA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5030">MAD</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5040">NICKELODEON</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5050">RISE TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5060">SMILE</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5130">ΑΛΗΘΕΙΑ TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5140">ΠΑΤΡΙΔΑ TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5150">AEOLOS</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5300">OCIOC ΝΙΚΑΝΩΡ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5310">DIKTYO1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5320">FLASH TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5330">WEST</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5350">TOP CHANNEL</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5420">ΑΧΕΛΩΟΣ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5430">ΒΗΜΑ ΤΗΛΕΟΡΑΣΗ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5440">ΗΠΕΙΡΟΣ TV1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5450">ART TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5460">CORFU TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5470">ΙTV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5480">START</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5570">TeleKPHTH</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5580">ΚΡΗΤΗTV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5590">KΡHTH1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5600">ΝΕΑ Τηλεόραση Κρήτης</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5610">TV CRETA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5620">NOTOS TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5630">SITIA TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5720">ΑΙΓΑΙΟ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5730">ΣΑΤ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5740">IRIDA</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5750">KOS TV</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5760">TV KOSMOS</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5770">ΘΑΡΡΙ</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5850">SYROS TV1</channel>
|
||||
<channel site="digea.gr" lang="el" xmltv_id="" site_id="5860">VOLCANO</channel>
|
||||
</channels>
|
86
sites/digea.gr/digea.gr.config.js
Normal file
86
sites/digea.gr/digea.gr.config.js
Normal file
|
@ -0,0 +1,86 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'digea.gr',
|
||||
days: 2,
|
||||
url: 'https://www.digea.gr/el/api/epg/get-events',
|
||||
request: {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
||||
},
|
||||
data({ date }) {
|
||||
const data = new URLSearchParams()
|
||||
data.append('action', 'get_events')
|
||||
data.append('date', date.format('YYYY-M-D'))
|
||||
|
||||
return data
|
||||
}
|
||||
},
|
||||
parser({ content, channel }) {
|
||||
let programs = []
|
||||
let items = parseItems(content, channel)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.title,
|
||||
description: item.long_synopsis,
|
||||
start: parseStart(item),
|
||||
stop: parseStop(item)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const data = await axios
|
||||
.post(
|
||||
'https://www.digea.gr/el/api/epg/get-channels',
|
||||
new URLSearchParams({
|
||||
action: 'get_chanels',
|
||||
lang: 'el'
|
||||
}),
|
||||
{
|
||||
headers: {
|
||||
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
||||
}
|
||||
}
|
||||
)
|
||||
.then(r => r.data)
|
||||
.catch(console.error)
|
||||
|
||||
return data.map(channel => {
|
||||
return {
|
||||
lang: 'el',
|
||||
site_id: channel.id,
|
||||
name: channel.name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return dayjs.tz(item.actual_time, 'YYYY-MM-DD HH:mm:ss', 'Europe/Athens')
|
||||
}
|
||||
|
||||
function parseStop(item) {
|
||||
return dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', 'Europe/Athens')
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
try {
|
||||
const data = JSON.parse(content)
|
||||
if (!Array.isArray(data)) return []
|
||||
|
||||
return data.filter(p => p.channel_id === channel.site_id)
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
69
sites/digea.gr/digea.gr.test.js
Normal file
69
sites/digea.gr/digea.gr.test.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
const { parser, url, request } = require('./digea.gr.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('2025-01-17', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '1100',
|
||||
xmltv_id: 'AlphaTV.gr'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url).toBe('https://www.digea.gr/el/api/epg/get-events')
|
||||
})
|
||||
|
||||
it('can generate valid request method', () => {
|
||||
expect(request.method).toBe('POST')
|
||||
})
|
||||
|
||||
it('can generate valid request headers', () => {
|
||||
expect(request.headers).toMatchObject({
|
||||
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
||||
})
|
||||
})
|
||||
|
||||
it('can generate valid request data', () => {
|
||||
const data = request.data({ date })
|
||||
|
||||
expect(data.get('action')).toBe('get_events')
|
||||
expect(data.get('date')).toBe('2025-1-17')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
|
||||
let results = parser({ content, channel })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(19)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-16T23:30:00.000Z',
|
||||
stop: '2025-01-17T01:30:00.000Z',
|
||||
title: '[K12] Το Ξεκαθάρισμα (A Score To Settle)',
|
||||
description:
|
||||
"Περιπέτεια αμερικανικής παραγωγής 2019 [Το πρόγραμμα περιέχει σκηνές σεξουαλικές, βίας, χρήσης ναρκωτικών κι άλλων εξαρτησιογόνων ουσιών και απρεπή εκφορά λόγου]. Ο Φρανκ απελευθερώνεται από τη φυλακή πολλά χρόνια μετά αφού κατηγορήθηκε για ένα έγκλημα που δεν διέπραξε. Τώρα, ελεύθερος, ξεκινά μια πορεία εκδίκησης εναντίον των ανθρώπων των οποίων οι πράξεις τον έστειλαν στη φυλακή. Ηθοποιοί: Νίκολας Κέιτζ, Μπέντζαμιν Μπρατ, Νόα Λε Γκρος, Καρολίνα Γουίντρα. Σενάριο: Σον Κου, Τζον Νιούμαν. Σκηνοθεσία: Σον Κου. Διάρκεια: 94'. "
|
||||
})
|
||||
expect(results[18]).toMatchObject({
|
||||
start: '2025-01-17T21:30:00.000Z',
|
||||
stop: '2025-01-17T23:30:00.000Z',
|
||||
title: '[K8] Βασικά Καλησπέρα Σας',
|
||||
description:
|
||||
"Κωμωδία ελληνικής παραγωγής 1982. Δύο πειρατικοί ραδιοσταθμοί, εκ των οποίων ο ένας βάζει λαϊκά άσματα και ο άλλος ροκ μουσική, ανταγωνίζονται για την πρωτιά στην ακροαματικότητα. Ο ανταγωνισμός γίνεται βαθμηδόν όλο και πιο σκληρός, αλλά ξάφνου τα πράγματα αλλάζουν ρότα καθώς ο μεγαλοδύναμος έρως παρεμβαίνει και κάνει το θαύμα του. Παίζουν: Στάθης Ψάλτης, Πάνος Μιχαλόπουλος, Σταμάτης Γαρδέλης, Έφη Πίκουλα, Γιώργος Ρήγας, Γιάννης Μποσταντζόγλου, Σοφία Αλιμπέρτη, Καίτη Φίνου. Σκηνοθεσία - Σενάριο: Γιάννης Δαλιανίδης. Διάρκεια: 89'."
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
content: '[]'
|
||||
})
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
})
|
21
sites/digea.gr/readme.md
Normal file
21
sites/digea.gr/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# digea.gr
|
||||
|
||||
https://www.digea.gr/el/tileoptikoi-stathmoi/ilektronikos-odigos-programmatos
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=digea.gr
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/digea.gr/digea.gr.config.js --output=./sites/digea.gr/digea.gr.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- digea.gr
|
||||
```
|
570
sites/digiturk.com.tr/__data__/content.html
Normal file
570
sites/digiturk.com.tr/__data__/content.html
Normal file
|
@ -0,0 +1,570 @@
|
|||
<div class="tvGuideDates">
|
||||
<div class="containerBig">
|
||||
<div class="tvGuideDates-select">
|
||||
<div class="swiper tvGuideDatesSwiper">
|
||||
<div class="swiper-wrapper">
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date activeChannel" id="result-1" data-value="01/12/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Bugün</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">12.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/13/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Yarın</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">13.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/14/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Salı</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">14.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/15/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Çarşamba</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">15.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/16/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Perşembe</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">16.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/17/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Cuma</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">17.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="tvGuideDates-select-date " id="result-1" data-value="01/18/2025 00:00:00">
|
||||
<span class="tvGuideDates-select-date-status">Cumartesi</span>
|
||||
<span class="tvGuideDates-select-date-statusDetail">18.01.2025</span>
|
||||
<div class="tvGuideDates-select-date-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="line"></div>
|
||||
<div style="visibility:hidden" class="line"></div>
|
||||
</div>
|
||||
<div class="swiper-button-prev swiper-button-prev1"></div>
|
||||
<div class="swiper-button-next swiper-button-next1"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tvGuideResult">
|
||||
<div class="containerBig">
|
||||
<div class="loaderDigiturk" id="loaderDigiturk" data-type="" data-status="off">
|
||||
<div class="loaderDigiturk-spinner"></div>
|
||||
</div>
|
||||
<link rel="stylesheet" href="/min/css/loader.bundle.min.css" />
|
||||
<div class="tvGuideResult-box" id="result-1">
|
||||
<div class="swiper tvGuideSwiper sidebar sidebar-main sidebar-fixed">
|
||||
<div class="swiper-wrapper">
|
||||
<div class="swiper-slide channelContent">
|
||||
<input type="hidden" id="channelID" name="channelID" value="NICKELODEON HD" />
|
||||
<input type="hidden" id="channelCategory" name="channelCategory" value="218" />
|
||||
<div class="tvGuideResult-box-whole channel">
|
||||
<div class="tvGuideResult-box-whole-bgBox">
|
||||
<div class="tvGuideResult-box-whole-bgBox-image">
|
||||
<img src="https://mediacms01.digiturkplay.com/channel_logo/nick_hd_250x150.png" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">00:00</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H548I6618', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">00:25</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 10dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H551I6619', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">00:35</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H554I6620', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">00:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H557I6621', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">01:20</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H560I6623', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">01:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H563I6624', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">02:05</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H566I6625', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">02:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H569I6627', 351)" title="Monster High">Monster High </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Monster High">Monster High</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">02:50</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H572I6628', 351)" title="Monster High">Monster High </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Monster High">Monster High</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">03:10</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H575I6629', 351)" title="Nicky, Ricky, Dicky ve Dawn">Nicky, Ricky, Dicky ve Dawn </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Nicky, Ricky, Dicky ve Dawn">Nicky, Ricky, Dicky ve Dawn</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">03:35</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H578I6631', 351)" title="Müzik Okulu">Müzik Okulu </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Müzik Okulu">Müzik Okulu</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">03:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H581I6632', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">04:20</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H584I6634', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">04:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H587I6635', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">05:05</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H590I6636', 351)" title="Şirinler">Şirinler </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Şirinler">Şirinler</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">05:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H593I6638', 351)" title="Şirinler">Şirinler </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Şirinler">Şirinler</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">05:50</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H596I6639', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">06:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H599I6640', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">06:35</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H602I6642', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">07:00</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H605I6643', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">07:20</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H608I6644', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">07:45</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H611I6646', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">08:10</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H614I6647', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">08:35</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H617I6649', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">08:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 15dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H620I6650', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">09:10</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H623I6651', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">09:35</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H626I6652', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">09:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H629I6654', 351)" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın... </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın...</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">10:20</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H632I6655', 351)" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın... </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın...</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">10:45</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H635I6657', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">11:05</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H638I6658', 351)" title="Patrick Star Show">Patrick Star Show </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Patrick Star Show">Patrick Star Show</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">11:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H641I6659', 351)" title="Patrick Star Show">Patrick Star Show </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Patrick Star Show">Patrick Star Show</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">11:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H644I6661', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">12:20</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H647I6662', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">12:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 15dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H650I6664', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">12:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H653I6664', 351)" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın... </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın...</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">13:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H656I6666', 351)" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın... </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın...</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">13:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H659I6667', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">14:05</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H662I6669', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">14:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H665I6670', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">14:55</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H668I6672', 351)" title="Risk Takımı">Risk Takımı </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Risk Takımı">Risk Takımı</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">15:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H671I6673', 351)" title="Risk Avcısı Henri">Risk Avcısı Henri </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Risk Avcısı Henri">Risk Avcısı Henri</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">15:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H674I6674', 351)" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">16:05</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H677I6676', 351)" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">16:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H680I6677', 351)" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Sünger Bob Kare Pantolon">Sünger Bob Kare Pantolon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">16:50</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 10dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H683I6679', 351)" title="SüngerBob KarePantalon">SüngerBob KarePantalon </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="SüngerBob KarePantalon">SüngerBob KarePantalon</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">17:00</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 15dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H686I6679', 351)" title="The Patrick Star Show">The Patrick Star Show </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="The Patrick Star Show">The Patrick Star Show</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">17:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 15dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H689I6680', 351)" title="The Patrick Star Show">The Patrick Star Show </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="The Patrick Star Show">The Patrick Star Show</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">17:30</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H692I6681', 351)" title="Patrick Star Show">Patrick Star Show </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Patrick Star Show">Patrick Star Show</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">17:50</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H695I6682', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">18:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H698I6684', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">18:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H701I6685', 351)" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın... </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Ninja Kaplumbağalar'ın...">Ninja Kaplumbağalar'ın...</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">19:00</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H704I6686', 351)" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Gerçek Gürültü Ailesi">Gerçek Gürültü Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">19:25</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H707I6688', 351)" title="Risk Takımı">Risk Takımı </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Risk Takımı">Risk Takımı</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">19:50</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H710I6689', 351)" title="Risk Takımı">Risk Takımı </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Risk Takımı">Risk Takımı</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">20:15</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 25dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H713I6691', 351)" title="Yıldırım Ailesi">Yıldırım Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Yıldırım Ailesi">Yıldırım Ailesi</span>
|
||||
</div>
|
||||
<div class="tvGuideResult-box-wholeDates channelDetail">
|
||||
<div class="tvGuideResult-box-wholeDates-time">
|
||||
<span class="tvGuideResult-box-wholeDates-time-hour">20:40</span>
|
||||
<span class="tvGuideResult-box-wholeDates-time-totalMinute">- 20dk</span>
|
||||
</div>
|
||||
<span class="tvGuideResult-box-wholeDates-title" href="javascript:void;" onclick="getDetail('N59H716I6692', 351)" title="Casagrande Ailesi">Casagrande Ailesi </span>
|
||||
<span class="tvGuideResult-box-wholeDates-description" title="Casagrande Ailesi">Casagrande Ailesi</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-button-prev swiper-button-prev2"></div>
|
||||
<div class="swiper-button-next swiper-button-next2"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popupCustom">
|
||||
</div>
|
||||
<link rel="stylesheet" href="/min/css/tvGuideList.bundle.min.css" />
|
||||
<script src="/min/js/tvGuideList.min.js?v=vztoclwrlVtB3gBiQbn7n5f4veqGlfIhj6DQ8Zx3x0s"></script>
|
||||
<script type="text/javascript" src="/js/nicescroll.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$(".swiper").niceScroll({
|
||||
mousescrollstep: 100,
|
||||
cursorcolor: "#200b3b",
|
||||
cursorborder: "",
|
||||
cursorwidth: 3,
|
||||
hidecursordelay: 100,
|
||||
autohidemode: "leave",
|
||||
horizrailenabled: false,
|
||||
preservenativescrolling: false,
|
||||
railpadding: {
|
||||
right: 0.5,
|
||||
top: 1.5,
|
||||
bottom: 1.5,
|
||||
},
|
||||
});
|
||||
});
|
||||
</script>
|
File diff suppressed because one or more lines are too long
|
@ -1,142 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="144">AL JAZEERA ENGLISH HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="BabyTV.uk" site_id="162">Baby TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="BBCNewsEurope.uk" site_id="141">BBC World News HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="BloombergTVEurope.uk" site_id="139">BLOOMBERG HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="CGTN.cn" site_id="134">CGTN HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="CGTNDocumentary.cn" site_id="194">CGTN DOCUMENTARY HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="CNNInternationalEurope.us" site_id="143">CNN INTERNATIONAL</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="EuronewsEnglish.fr" site_id="145">EURONEWS</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="FashionTVEurope.fr" site_id="110">Fashion TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="en" xmltv_id="France24English.fr" site_id="146">France 24 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="fr" xmltv_id="TV5MondeEurope.fr" site_id="131">TV5 Monde Europe</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="1">beIN</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="108">MTV Live HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="184">TARIH TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="204">Taraftar HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="205">Taraftar 2 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="40">KANAL 24 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="401">ALEM FM</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="408">KAFA RADYO</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="411">Kral Pop Radyo</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="412">Slow Türk</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="414">Show Radyo</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="415">Kral FM</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="416">Radyo Viva</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="417">Baba Radyo</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="424">Joy FM</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="435">5+1 Concerts</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="60">SÖZCÜ TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="64">CADDE TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="7">beIN SERIES 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="360.tr" site_id="29">360 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="A2TV.tr" site_id="35">A2 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AHaber.tr" site_id="32">A Haber HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AkilliTV.tr" site_id="98">Akıllı TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AlQuranAlKareemTV.sa" site_id="147">Al Quran Al Kareem TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AlSunnahAlNabawiyahTV.sa" site_id="148">Al Sunnah Al Nabawiyah TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ANews.tr" site_id="140">A News HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="APara.tr" site_id="43">A Para HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ASpor.tr" site_id="88">A Spor HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ATV.tr" site_id="25">ATV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BBCEarth.tr" site_id="183">BBC EARTH HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BBCFirst.tr" site_id="114">BBC First</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINBoxOffice1.tr" site_id="201">beIN BOX OFFICE 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINGurme.tr" site_id="21">beIN GURME</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINHE.tr" site_id="19">beIN HOME & ENTERTAINMENT</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINIZ.tr" site_id="18">beIN İZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINIZ.tr" site_id="182">beIN İZ HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINMoviesPremiere2.tr" site_id="3">beIN MOVIES PREMIERE 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeriesComedy.tr" site_id="4">beIN MOVIES TURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeriesDrama.tr" site_id="6">beIN SERIES 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeriesSciFi.tr" site_id="2">beIN MOVIES PREMIERE</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeriesVice.tr" site_id="5">beIN MOVIES STARS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports1.tr" site_id="77">beIN SPORTS 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports2.tr" site_id="78">beIN SPORTS 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports3.tr" site_id="79">beIN SPORTS 3</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports4.tr" site_id="80">beIN SPORTS 4</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports5.tr" site_id="81">beIN SPORTS 5</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsHaber.tr" site_id="85">beIN SPORTS HABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsMax1.tr" site_id="82">beIN SPORTS MAX HD 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsMax2.tr" site_id="83">beIN SPORTS MAX HD 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BenguturkTV.tr" site_id="63">BENGÜTÜRK TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BeyazTV.tr" site_id="36">BEYAZ TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BloombergHT.tr" site_id="31">Bloomberg TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Boomerang.tr" site_id="168">Cartoonito</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CartoonNetwork.tr" site_id="169">Cartoon Network</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CBeebies.tr" site_id="161">CBEEBIES HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CNNTurk.tr" site_id="42">CNN TÜRK HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DaVinci.de" site_id="164">Da Vinci</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Digiturk4K.tr" site_id="400">Digiturk 4K</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DiscoveryChannel.tr" site_id="191">Discovery Channel HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DiscoveryScience.tr" site_id="192">Discovery Science HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DisneyChannel.tr" site_id="165">Disney Junior</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DiyanetTV.tr" site_id="68">Diyanet TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DMAX.tr" site_id="49">DMAX HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Ekoturk.tr" site_id="46">EKOTÜRK TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Eurosport1.fr" site_id="71">Eurosport 1 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Eurosport2.fr" site_id="72">Eurosport 2 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="FBTV.tr" site_id="76">FB TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="FlashTV.tr" site_id="50">Flash Haber TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Fox.tr" site_id="26">FOX HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="GSTV.tr" site_id="75">GS TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HaberGlobal.tr" site_id="47">HABER GLOBAL HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="44">HABERTURK HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HalkTV.tr" site_id="53">Halk TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Kanal7.tr" site_id="34">KANAL 7 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="KanalD.tr" site_id="24">Kanal D HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="KRT.tr" site_id="62">KRT TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="LiderHaber.tr" site_id="51">LIDER HABER TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MCMTop.fr" site_id="101">MCM Top HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Mezzo.fr" site_id="102">Mezzo HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MinikaGo.tr" site_id="170">MinikaGO</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTV00s.uk" site_id="103">MTV 00s</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTVHitsEurope.uk" site_id="109">MTV Hits</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTVLive.uk" site_id="395">MTV Live HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NationalGeographic.tr" site_id="185">Nat Geo Wild HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NationalGeographicWild.tr" site_id="181">National Geographic HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Nickelodeon.tr" site_id="172">Nickelodeon</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Nickelodeon.tr" site_id="173">Nickelodeon HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Nickelodeon.tr" site_id="355">Nickelodeon HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NickJr.tr" site_id="171">Nick Jr.</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NTV.tr" site_id="41">NTV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Number1TV.tr" site_id="95">Number1 TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="PowerTV.tr" site_id="100">Power TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Rai1.it" site_id="130">RAI UNO</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ShowTV.tr" site_id="22">Show TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="StarTV.tr" site_id="27">Star TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Tele1.tr" site_id="48">TELE 1 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Teve2.tr" site_id="54">Teve2 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TGRTHaber.tr" site_id="45">TGRT Haber HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TJKTV.tr" site_id="89">TJK TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TLC.tr" site_id="30">TLC HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="23">TRT 1 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="323">TRT1 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT2.tr" site_id="66">TRT 2 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT3.tr" site_id="56">TRT 3 - TRT Spor</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTArabi.tr" site_id="133">TRT Arabi</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTAvaz.tr" site_id="57">TRT AVAZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTBelgesel.tr" site_id="190">TRT Belgesel HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTCocuk.tr" site_id="160">TRT Çocuk</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTEBAIlkokul.tr" site_id="151">TRT EBATV İLKOKUL HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTEBALise.tr" site_id="153">TRT EBATV LİSE HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTEBAOrtaokul.tr" site_id="152">TRT EBATV ORTAOKUL HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTHaber.tr" site_id="33">TRT Haber HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTKurdi.tr" site_id="58">TRT Kurdi</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTMuzik.tr" site_id="104">TRT Müzik</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTSpor.tr" site_id="86">TRT SPOR HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTSporYildiz.tr" site_id="87">TRT SPOR YILDIZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTTurk.tr" site_id="61">TRT TURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTWorld.tr" site_id="342">TRT World HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTWorldHD.tr" site_id="142">TRT World HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TurkHaberTV.tr" site_id="59">TURKHABER TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV100.tr" site_id="37">TV 100 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV8.tr" site_id="28">TV8 HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV85.tr" site_id="55">TV 8,5</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TVNET.tr" site_id="39">TVNET HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="UlkeTV.tr" site_id="38">Ülke TV HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="UlusalKanal.tr" site_id="52">ULUSAL TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="VavTV.tr" site_id="67">VAV TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Yaban.tr" site_id="189">Yaban TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="" site_id="212">EKOL TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="24TV.tr" site_id="178">24 TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="360.tr" site_id="30">360</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="A2TV.tr" site_id="490">A2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AHaber.tr" site_id="301">AHABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="AlJazeera.qa" site_id="182">AL JAZEERA CHANNEL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ANews.tr" site_id="501">A NEWS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="APara.tr" site_id="519">A PARA</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ASpor.tr" site_id="433">A SPOR</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ATV.tr" site_id="300">ATV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BabyTV.fr" site_id="436">BABY TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BBCEarth.tr" site_id="513">BBC EARTH</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BBCFirst.tr" site_id="459">BBC FIRST</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BBCNewsEurope.uk" site_id="77">BBC WORLD NEWS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINGurme.tr" site_id="407">beIN GURME</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINHE.tr" site_id="456">beIN H&E</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINIZ.tr" site_id="299">beIN İZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINMoviesPremiere.tr" site_id="271">beIN MOVIES PREMIERE</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINMoviesStars.tr" site_id="272">beIN MOVIES STARS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINMoviesTurk.tr" site_id="381">beIN MOVIES TURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeries1.qa" site_id="375">beIN SERIES 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSeries2.qa" site_id="326">beIN SERIES 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports1.tr" site_id="193">beIN SPORTS 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports2.tr" site_id="310">beIN SPORTS 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports3.tr" site_id="312">beIN SPORTS 3</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports4.tr" site_id="495">beIN SPORTS 4</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSports5.tr" site_id="506">beIN SPORTS 5</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsHaber.tr" site_id="541">beIN SPORTS HABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsMax1.tr" site_id="507">beIN SPORTS MAX 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="beINSportsMax2.tr" site_id="508">beIN SPORTS MAX 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BenguturkTV.tr" site_id="547">BENGÜTÜRK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BeyazTV.tr" site_id="188">BEYAZ TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BloombergHT.tr" site_id="24">BLOOMBERG HT</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="BloombergTVEurope.uk" site_id="137">BLOOMBERG</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CartoonNetwork.tr" site_id="220">CARTOON NETWORK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CBeebies.uk" site_id="512">CBeebies</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CGTN.cn" site_id="523">CGTN</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CGTNDocumentary.cn" site_id="524">CGTN DOCUMENTARY</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CNBCEurope.uk" site_id="23">CNBC-e</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CNNInternationalEurope.us" site_id="76">CNN INTERNATIONAL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="CNNTurk.tr" site_id="29">CNN TURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DaVinci.de" site_id="529">Da Vinci</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Digiturk4K.tr" site_id="483">DIGI</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DiscoveryChannel.tr" site_id="317">DISCOVERY CHANNEL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DisneyJunior.tr" site_id="282">DISNEY JUNIOR</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="DiyanetTV.tr" site_id="332">DİYANET TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Ekoturk.tr" site_id="521">EKOTURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="EuronewsEnglish.fr" site_id="78">EURONEWS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Eurosport1.fr" site_id="47">EUROSPORT 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Eurosport2.fr" site_id="82">EUROSPORT 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="FashionTVEurope.fr" site_id="74">FASHION TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="FBTV.tr" site_id="55">FB TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="FlashHaberTV.tr" site_id="542">FLASH HABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Fox.tr" site_id="18">FOX</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="France24English.fr" site_id="285">FRANCE 24</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HaberGlobal.tr" site_id="520">HABERGLOBAL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="31">HABERTURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="546">TÜRKHABER TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="HalkTV.tr" site_id="298">HALK TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Kanal7.tr" site_id="439">KANAL 7</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="KanalD.tr" site_id="430">KANAL D</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="KRT.tr" site_id="528">KRT TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="LiderHaber.tr" site_id="543">LİDER HABER TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MCMTop.ru" site_id="60">MCM TOP</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Mezzo.fr" site_id="61">MEZZO</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MinikaGo.tr" site_id="291">MİNİKAGO</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTV00s.uk" site_id="63">MTV 00s</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTVHits.uk" site_id="337">MTV HITS</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="MTVLive.uk" site_id="322">MTV LIVE</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NationalGeographic.tr" site_id="214">NATIONAL GEO.</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NationalGeographicWild.tr" site_id="179">NAT.GEO.WILD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Nickelodeon.tr" site_id="189">NICKELODEON SD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Nickelodeon.tr" site_id="351">NICKELODEON HD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NickJr.tr" site_id="321">NICK JR</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="NTV.tr" site_id="28">NTV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Rai1.it" site_id="85">RAI1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="ShowTV.tr" site_id="294">SHOW TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="SozcuTV.tr" site_id="544">SÖZCÜ TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="StarTV.tr" site_id="406">STAR TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TarihTV.tr" site_id="545">TARİH TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Tele1.tr" site_id="525">TELE 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Teve2.tr" site_id="256">TEVE2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TGRTHaber.tr" site_id="84">TGRT HABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TJKTV.tr" site_id="53">TJK TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="19">TRT 1</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT2.tr" site_id="308">TRT 2</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRT3.tr" site_id="229">TRT 3 / TRT SPOR</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTArabi.tr" site_id="262">TRT ARABI</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTAvaz.tr" site_id="244">TRT AVAZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTBelgesel.tr" site_id="487">TRT BELGESEL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTCocuk.tr" site_id="243">TRT ÇOCUK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTEBAOrtaokul.tr" site_id="537">TRT EBA TV ORTAOKUL</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTHaber.tr" site_id="20">TRT HABER</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTKurdi.tr" site_id="246">TRT KURDI</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTMuzik.tr" site_id="261">TRT MÜZİK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTSpor.tr" site_id="331">TRT SPOR</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTSporYildiz.tr" site_id="533">TRT SPOR YILDIZ</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTTurk.tr" site_id="245">TRT TURK</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TRTWorld.tr" site_id="468">TRT WORLD</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV5MondeEurope.fr" site_id="86">TV5 MONDE EUROPE</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV8.tr" site_id="428">TV8</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV85.tr" site_id="489">TV8,5</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TV100.tr" site_id="527">tv100</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="TVNET.tr" site_id="222">TVNET</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="UlkeTV.tr" site_id="166">ÜLKE TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="UlusalKanal.tr" site_id="539">ULUSAL TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="VavTV.tr" site_id="540">VAV TV</channel>
|
||||
<channel site="digiturk.com.tr" lang="tr" xmltv_id="Yaban.tr" site_id="532">YABAN TV</channel>
|
||||
</channels>
|
||||
|
|
|
@ -1,107 +1,86 @@
|
|||
const _ = require('lodash')
|
||||
const cheerio = require('cheerio')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
// category list is not complete
|
||||
// const categories = {
|
||||
// '00': 'Diğer',
|
||||
// E0: 'Romantik Komedi',
|
||||
// E1: 'Aksiyon',
|
||||
// E4: 'Macera',
|
||||
// E5: 'Dram',
|
||||
// E6: 'Fantastik',
|
||||
// E7: 'Komedi',
|
||||
// E8: 'Korku',
|
||||
// EB: 'Polisiye',
|
||||
// EF: 'Western',
|
||||
// FA: 'Macera',
|
||||
// FB: 'Yarışma',
|
||||
// FC: 'Eğlence',
|
||||
// F0: 'Reality-Show',
|
||||
// F2: 'Haberler',
|
||||
// F4: 'Belgesel',
|
||||
// F6: 'Eğitim',
|
||||
// F7: 'Sanat ve Kültür',
|
||||
// F9: 'Life Style'
|
||||
// }
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
const tz = 'Europe/Istanbul'
|
||||
|
||||
module.exports = {
|
||||
site: 'digiturk.com.tr',
|
||||
days: 2,
|
||||
delay: 1000, // NOTE: under heavy load the server starts blocking requests
|
||||
url: function ({ date, channel }) {
|
||||
return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${
|
||||
channel.site_id
|
||||
}&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false`
|
||||
url({ date }) {
|
||||
return `https://www.digiturk.com.tr/Ajax/GetTvGuideFromDigiturk?Day=${
|
||||
encodeURIComponent(date.format('MM/DD/YYYY'))
|
||||
}+00%3A00%3A00`
|
||||
},
|
||||
request: {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Referer: 'https://www.digiturk.com.tr/'
|
||||
cache: {
|
||||
ttl: 24 * 60 * 60 * 1000 // 1 day
|
||||
}
|
||||
},
|
||||
parser: function ({ content }) {
|
||||
let programs = []
|
||||
const items = parseItems(content)
|
||||
items.forEach(item => {
|
||||
parser({ content, channel, date }) {
|
||||
const programs = []
|
||||
if (content) {
|
||||
const $ = cheerio.load(content)
|
||||
$('.channelDetail').toArray()
|
||||
.forEach(item => {
|
||||
const $item = $(item)
|
||||
const title = $item.find('.tvGuideResult-box-wholeDates-title')
|
||||
if (title.length) {
|
||||
const channelId = title.attr('onclick')
|
||||
if (channelId) {
|
||||
const site_id = channelId.match(/\s(\d+)\)/)[1]
|
||||
if (channel.site_id === site_id) {
|
||||
const startTime = $item.find('.tvGuideResult-box-wholeDates-time-hour').text().trim()
|
||||
const duration = $item.find('.tvGuideResult-box-wholeDates-time-totalMinute')
|
||||
.text().trim().match(/\d+/)[0]
|
||||
const start = dayjs.tz(`${date.format('YYYY-MM-DD')} ${startTime}`, 'YYYY-MM-DD HH:mm', tz)
|
||||
const stop = start.add(parseInt(duration), 'm')
|
||||
programs.push({
|
||||
title: item.PName,
|
||||
// description: item.LongDescription,
|
||||
// category: parseCategory(item),
|
||||
start: parseTime(item.PStartTime),
|
||||
stop: parseTime(item.PEndTime)
|
||||
title: title.text().trim(),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
programs = _.sortBy(programs, 'start')
|
||||
}
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const channels = {}
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
|
||||
const data = await axios
|
||||
.get('https://www.digiturk.com.tr/', {
|
||||
headers: {
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
|
||||
}
|
||||
})
|
||||
.get(this.url({ date: dayjs() }))
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
.catch(console.error)
|
||||
|
||||
let channels = []
|
||||
const $ = cheerio.load(data)
|
||||
$('#chosen-select-channel > option').each((i, el) => {
|
||||
const site_id = $(el).attr('value')
|
||||
const name = $(el).text().trim()
|
||||
|
||||
channels.push({
|
||||
$('.channelContent').toArray()
|
||||
.forEach(el => {
|
||||
const item = $(el)
|
||||
const channelId = item.find('.channelDetail .tvGuideResult-box-wholeDates-title')
|
||||
.first()
|
||||
.attr('onclick')
|
||||
if (channelId) {
|
||||
const site_id = channelId.match(/\s(\d+)\)/)[1]
|
||||
if (channels[site_id] === undefined) {
|
||||
channels[site_id] = {
|
||||
lang: 'tr',
|
||||
site_id,
|
||||
name
|
||||
})
|
||||
name: item.find('#channelID').val()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return channels
|
||||
return Object.values(channels)
|
||||
}
|
||||
}
|
||||
|
||||
function parseTime(time) {
|
||||
let timestamp = parseInt(time.replace('/Date(', '').replace('+0300)/', ''))
|
||||
return dayjs(timestamp)
|
||||
}
|
||||
|
||||
// function parseCategory(item) {
|
||||
// return (item.PGenre) ? categories[item.PGenre] : null
|
||||
// }
|
||||
|
||||
function parseItems(content) {
|
||||
if (!content) return []
|
||||
const data = JSON.parse(content)
|
||||
return data && data.BChannels && data.BChannels[0].CPrograms ? data.BChannels[0].CPrograms : []
|
||||
}
|
||||
|
|
|
@ -4,44 +4,45 @@ 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('2023-01-19', 'YYYY-MM-DD').startOf('d')
|
||||
const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '14',
|
||||
xmltv_id: 'beINMovies2Action.qa'
|
||||
site_id: '351',
|
||||
xmltv_id: 'Nickelodeon.tr'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
const result = url({ date, channel })
|
||||
expect(result).toBe(
|
||||
'https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false'
|
||||
'https://www.digiturk.com.tr/Ajax/GetTvGuideFromDigiturk?Day=01%2F12%2F2025+00%3A00%3A00'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||
const results = parser({ content }).map(p => {
|
||||
const content = fs.readFileSync(path.join(__dirname, '__data__', 'content.html'))
|
||||
const results = parser({ content, channel, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(57)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2023-01-18T20:40:00.000Z',
|
||||
stop: '2023-01-18T22:32:00.000Z',
|
||||
title: 'PARÇALANMIŞ'
|
||||
start: '2025-01-11T21:00:00.000Z',
|
||||
stop: '2025-01-11T21:25:00.000Z',
|
||||
title: 'Sünger Bob Kare Pantolon'
|
||||
})
|
||||
|
||||
expect(results[10]).toMatchObject({
|
||||
start: '2023-01-19T05:04:00.000Z',
|
||||
stop: '2023-01-19T06:42:00.000Z',
|
||||
title: 'HIZLI VE ÖFKELİ: TOKYO YARIŞI'
|
||||
expect(results[56]).toMatchObject({
|
||||
start: '2025-01-12T17:40:00.000Z',
|
||||
stop: '2025-01-12T18:00:00.000Z',
|
||||
title: 'Casagrande Ailesi'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({ content: '' })
|
||||
const result = parser({ content: '', channel, date })
|
||||
expect(result).toMatchObject([])
|
||||
})
|
||||
|
|
|
@ -439,7 +439,7 @@
|
|||
<channel site="directv.com" lang="en" xmltv_id="BravoEast.us" site_id="237#273">Bravo</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="BravoEast.us" site_id="237#8258">Bravo HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="BYUTV.us" site_id="374#374">BYUtv</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="Canal6Nacional.mx" site_id="412#5442">Multimedios</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="412#5442">Multimedios</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CaracolInternacional.co" site_id="417#2547">Caracol TV</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CartoonNetworkEast.us" site_id="296#296">Cartoon Network</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CartoonNetworkEast.us" site_id="296#8255">Cartoon Network HD</channel>
|
||||
|
@ -448,8 +448,8 @@
|
|||
<channel site="directv.com" lang="en" xmltv_id="CBSSportsNetworkUSA.us" site_id="221#5613">CBS Sports Network HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CCTV4America.cn" site_id="2052#4500">CCTV4</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CCTV4America.cn" site_id="2113#5448">CCTV-4 2113</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CGTNAmerica.cn" site_id="2053#4556">CGTN 2053 (99R)</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CGTNAmerica.cn" site_id="2119#4053">CGTN 2119</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="2053#4556">CGTN 2053 (99R)</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="2119#4053">CGTN 2119</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="ChannelNecoInternational.jp" site_id="2042#2195">Channel NECO International</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CharmingChina.us" site_id="2055#4508">Charming China 2055</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="CharmingChina.us" site_id="2116#4031">Charming China 2116</channel>
|
||||
|
@ -518,7 +518,7 @@
|
|||
<channel site="directv.com" lang="en" xmltv_id="EWTN.us" site_id="370#422">EWTN</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="FamilyEntertainmentTV.us" site_id="323#1983">Family Entertainment Television</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="FlixEast.us" site_id="556#547">Flix</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="FMTV.us" site_id="386#8983">FM HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="386#8983">FM HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="FoodNetworkEast.us" site_id="231#231">Food Network</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="FoodNetworkEast.us" site_id="231#8278">Food Network HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="Foro.mx" site_id="453#3439">FOROtv</channel>
|
||||
|
@ -565,7 +565,7 @@
|
|||
<channel site="directv.com" lang="en" xmltv_id="HBOEast.us" site_id="501#501">HBO East</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOFamilyEast.us" site_id="507#507">HBO Family East</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOFamilyEast.us" site_id="507#8973">HBO Family East HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOFamilyWest.us" site_id="508#508">HBO Family West</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="508#508">HBO Family West</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOSignatureEast.us" site_id="503#1786">HBO Signature HD East</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOSignatureEast.us" site_id="503#503">HBO Signature</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="HBOWest.us" site_id="504#504">HBO West</channel>
|
||||
|
@ -628,7 +628,7 @@
|
|||
<channel site="directv.com" lang="en" xmltv_id="MLBNetworkAlternate.us" site_id="213#5214">MLB Network Alt. 213-1 HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="MoreMaxEast.us" site_id="517#4066">MoreMAX HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="MoreMaxEast.us" site_id="517#513">MoreMAX</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="Motortrend.us" site_id="281#3505">MotorTrend HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="" site_id="281#3505">MotorTrend HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="MovieMaxEast.us" site_id="521#3339">MovieMAX</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="MSNBC.us" site_id="356#3526">MSNBC HD</channel>
|
||||
<channel site="directv.com" lang="en" xmltv_id="MSNBC.us" site_id="356#356">MSNBC</channel>
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
<channel site="dishtv.in" lang="en" xmltv_id="ChannelDivya.in" site_id="10000000004750000">Divya TV</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="ChardiklaTimeTV.in" site_id="10000000003050000">CHARDIKLA TIME TV</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="CinemaTV.in" site_id="10000000009290000">CINEMA TV INDIA</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="CNBCAwaaz.in" site_id="10000000000890000">CNBC AWAAZ</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="" site_id="10000000000890000">CNBC AWAAZ</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="CNBCBajar.in" site_id="10000000022380000">CNBC Bajar</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="CNNInternationalSouthAsia.us" site_id="10000000000770000">CNN INTL</channel>
|
||||
<channel site="dishtv.in" lang="en" xmltv_id="CNNNews18.in" site_id="10000000000780000">CNN NEWS 18</channel>
|
||||
|
|
1
sites/dna.fi/__data__/content.json
Normal file
1
sites/dna.fi/__data__/content.json
Normal file
File diff suppressed because one or more lines are too long
125
sites/dna.fi/dna.fi.channels.xml
Normal file
125
sites/dna.fi/dna.fi.channels.xml
Normal file
|
@ -0,0 +1,125 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-1118">Yle TV1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-1424">Viasat History</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-1426">MTV Viihde</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-56786">MTV Aitio</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-86249">STAR Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216356">MTV3</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216366">Nelonen</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216368">MTV Sub</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216370">MTV Ava</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216394">Frii</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216396">National Geographic</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216400">Kutonen</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-216403">TV5</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-295476">MTV Juniori</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-295480">MTV Max</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-296147">Eurosport 1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-296162">MTV Urheilu 1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-296180">Animal Planet</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-296199">MTV Urheilu 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-304785">Discovery Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-307370">SVT1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-359757">Yle TV2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-359767">Yle Teema & Fem</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-452010">V sport 2 Suomi</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-474278">V sport 1 Suomi</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-483208">V sport+ Suomi</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-549801">JIM</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-549944">LIV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-549957">Hero</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-549980">TLC</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-556271">V sport golf</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-556382">V sport 1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-556706">V film premiere</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-801557">Iskuri.net</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-802611">TV7</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-802619">France 24</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-815633">SF-kanalen</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816060">V film family</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816070">V film hits</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816087">V film action</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816114">Viasat Explore</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816116">Viasat Nature</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816157">V sport premium</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816336">V sport football</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816355">V Sport Vinter</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816399">V sport live 1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816402">V sport live 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816405">V sport live 3</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816418">V sport live 4</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816424">V sport live 5</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816519">Eurosport 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816669">DNA Infokanava</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816685">Fuel TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816712">Nautical Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816728">Ginx eSport TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-816730">Motorvision+ HD</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819255">Extreme Sports Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819259">Toto TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819288">Nat Geo Wild</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819298">ID</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819319">Discovery Science</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819333">Travel Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819808">Disney Channel</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819873">Nick Jr.</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819881">Cartoon Network</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-819889">CNN International</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820066">BBC Nordic</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820071">BBC World News</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820087">Sky News</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820089">CNBC</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820095">Fashion TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820141">MTV 00s</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820143">MTV 80s</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820145">iConcerts</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820219">MTV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820221">MTV Hits</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820282">MTV 90s</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820286">Club MTV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820327">SVT2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820382">TV3</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820384">TV4</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820429">TV6</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820431">SVTB /SVT24</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820433">Kunskapskanalen</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820485">ARTE</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820499">3sat</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820519">Deutsche Welle</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820521">RTL</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820523">ZDF</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820622">TV5MONDE EUROPE</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820633">TVE Internacional</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820639">Al Jazeera English</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-820641">Al Jazeera Arabic</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-823382">Euronews</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-823459">Playboy TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-901934">Fight Sports</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-901948">History</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-901961">MTV LIVE</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-901963">France 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-940072">Mezzo</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-940115">English Club TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-940118">V sport ultra</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-1883879">Mezzo Live</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-2352053">Kuukauden kanava</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-3353262">DNA Extra</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-4388314">One Way TV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7293948">Infokanava</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662172">MTV Liiga 1</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662208">MTV Liiga 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662253">MTV Liiga 3</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662258">MTV Liiga 4</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662261">MTV Liiga 5</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662264">MTV Liiga 6</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662268">MTV Liiga 7</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662271">MTV Urheilu 3</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-7662272">MTV Liiga UHD</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-8761536">OnniTV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-9103132">onniTV</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-17520315">Infokanava 2</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-18721608">EVEO</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-22986792">MTV Liiga 8</channel>
|
||||
<channel site="dna.fi" lang="fi" xmltv_id="" site_id="ch-23672028">Alfa</channel>
|
||||
</channels>
|
99
sites/dna.fi/dna.fi.config.js
Normal file
99
sites/dna.fi/dna.fi.config.js
Normal file
|
@ -0,0 +1,99 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
|
||||
module.exports = {
|
||||
site: 'dna.fi',
|
||||
days: 2,
|
||||
url({ date, channel }) {
|
||||
const beginTimestamp = date.add(2, 'h').valueOf()
|
||||
const endTimestamp = date.add(1, 'd').add(2, 'h').subtract(1, 's').valueOf()
|
||||
|
||||
return `https://mts-pro-envoy-vip.dna.fi/hbx/api/pub/xrtv/g/media?q=channel:${channel.site_id}&q=profile:pr&q=start-interval:${beginTimestamp}/${endTimestamp}`
|
||||
},
|
||||
parser({ content, date }) {
|
||||
let programs = []
|
||||
let items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
const data = item?._embedded?.['xrtv:meta']?.data
|
||||
programs.push({
|
||||
title: data?.title,
|
||||
subtitle: data?.episode_title,
|
||||
description: data?.description,
|
||||
season: data?.season_number,
|
||||
episode: data?.episode_number,
|
||||
date: data?.year,
|
||||
categories: parseCategories(item),
|
||||
rating: parseRating(data),
|
||||
images: parseImages(item),
|
||||
directors: parseCast(data, 'director'),
|
||||
actors: parseCast(data, 'actors'),
|
||||
start: dayjs(data?.start),
|
||||
stop: dayjs(data?.end)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const data = await axios
|
||||
.get('https://mts-pro-envoy-vip.dna.fi/hbx/api/pub/xrtv/g/media?q=profile:ch&limit=1000')
|
||||
.then(r => r.data)
|
||||
.catch(console.error)
|
||||
|
||||
return data._embedded['xrtv:media-item'].map(c => {
|
||||
return {
|
||||
lang: 'fi',
|
||||
site_id: c.datalistTerm,
|
||||
name: c.name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseCast(data, role) {
|
||||
if (!data[role] || !data[role].value) return []
|
||||
|
||||
return data[role].value.split(', ').map(name => ({
|
||||
lang: data[role].lang,
|
||||
value: name
|
||||
}))
|
||||
}
|
||||
|
||||
function parseCategories(item) {
|
||||
const categories = item?._embedded?.['xrtv:media-category']
|
||||
|
||||
return Array.isArray(categories) ? categories.map(category => category.name) : []
|
||||
}
|
||||
|
||||
function parseRating(data) {
|
||||
if (!data.age_rating) return null
|
||||
|
||||
return {
|
||||
system: 'VET',
|
||||
value: data.age_rating
|
||||
}
|
||||
}
|
||||
|
||||
function parseImages(item) {
|
||||
const images = item?._embedded?.['xrtv:image']
|
||||
|
||||
return Array.isArray(images) ? images.map(image => image.src) : []
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
try {
|
||||
const data = JSON.parse(content)
|
||||
let items = data?._embedded?.['xrtv:media-item']
|
||||
items = Array.isArray(items) ? items : []
|
||||
items = items.filter(item => {
|
||||
const start = item?._embedded?.['xrtv:meta']?.data?.start
|
||||
if (!start) return false
|
||||
|
||||
return date.isSame(dayjs(start), 'day')
|
||||
})
|
||||
|
||||
return items
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
138
sites/dna.fi/dna.fi.test.js
Normal file
138
sites/dna.fi/dna.fi.test.js
Normal file
|
@ -0,0 +1,138 @@
|
|||
const { parser, url } = require('./dna.fi.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('2025-01-15', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'ch-216356',
|
||||
xmltv_id: 'MTV3.fi'
|
||||
}
|
||||
|
||||
it('can generate valid url', async () => {
|
||||
expect(url({ date, channel })).toBe(
|
||||
'https://mts-pro-envoy-vip.dna.fi/hbx/api/pub/xrtv/g/media?q=channel:ch-216356&q=profile:pr&q=start-interval:1736906400000/1736992799000'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
|
||||
let results = parser({ date, content })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(20)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-15T02:30:00.000Z',
|
||||
stop: '2025-01-15T03:22:00.000Z',
|
||||
title: {
|
||||
lang: 'fi',
|
||||
value: 'Next Level Chef'
|
||||
},
|
||||
subtitle: {
|
||||
lang: 'fi',
|
||||
value: 'Brunssi'
|
||||
},
|
||||
season: 1,
|
||||
episode: 6,
|
||||
rating: {
|
||||
system: 'VET',
|
||||
value: 'S'
|
||||
},
|
||||
date: '2022',
|
||||
images: [
|
||||
'https://mts-pro-cache-vip.dna.fi/meme/v2/37f/3851073346622580374_aspect_ratio_16_9_1.jpg'
|
||||
],
|
||||
description: {
|
||||
lang: 'fi',
|
||||
value:
|
||||
'Kausi 1, 6/11. Brunssi. Päivän haasteessa valmistetaan rentoa brunssiruokaa. Yksi kilpailija tekee valtaisan virheen myöhästyessään annosten luovutuksesta. Amerikkalainen tosi-tv-sarja.'
|
||||
},
|
||||
categories: ['Reality TV', 'Entertainment', 'TV Show', 'Next Level Chef', 'Series 1']
|
||||
})
|
||||
expect(results[5]).toMatchObject({
|
||||
title: {
|
||||
lang: 'fi',
|
||||
value: 'Kauniit ja rohkeat (S)'
|
||||
},
|
||||
subtitle: {
|
||||
lang: 'fi',
|
||||
value: 'Parantava syleily'
|
||||
},
|
||||
start: '2025-01-15T08:30:00.000Z',
|
||||
stop: '2025-01-15T09:00:00.000Z',
|
||||
season: 37,
|
||||
episode: 9380,
|
||||
rating: {
|
||||
system: 'VET',
|
||||
value: 'S'
|
||||
},
|
||||
date: '2023',
|
||||
images: [
|
||||
'https://mts-pro-cache-vip.dna.fi/meme/v2/79e/6509488401145439178_aspect_ratio_16_9_1.jpg'
|
||||
],
|
||||
description: {
|
||||
lang: 'fi',
|
||||
value:
|
||||
'Steffy on vähällä yllättää Hopen ja Carterin kesken herkän hetken. Ridgen kannustamana Taylor suostuu kokeilemaan Shandran parannusmenetelmää, ja pitkään padotut tunteet saavat viimein vapautua.'
|
||||
},
|
||||
categories: [
|
||||
'Soap',
|
||||
'Drama',
|
||||
'Romance',
|
||||
'Series',
|
||||
'TV Show',
|
||||
'The Bold and the Beautiful',
|
||||
'Series 37'
|
||||
],
|
||||
actors: [{ lang: 'en', value: 'Katherine Kelly Lang' }]
|
||||
})
|
||||
expect(results[19]).toMatchObject({
|
||||
start: '2025-01-15T16:30:00.000Z',
|
||||
stop: '2025-01-15T17:00:00.000Z',
|
||||
title: {
|
||||
lang: 'fi',
|
||||
value: 'Emmerdale (S)'
|
||||
},
|
||||
subtitle: {
|
||||
lang: 'fi',
|
||||
value: 'Epäilyksen varjossa'
|
||||
},
|
||||
season: 54,
|
||||
episode: 9845,
|
||||
rating: {
|
||||
system: 'VET',
|
||||
value: 'S'
|
||||
},
|
||||
date: '2023',
|
||||
images: [
|
||||
'https://mts-pro-cache-vip.dna.fi/meme/v2/5e8/5978592001161112833_aspect_ratio_16_9_1.jpg'
|
||||
],
|
||||
description: {
|
||||
lang: 'fi',
|
||||
value:
|
||||
'Caleb haistaa palaneen käryä Craigin kuolemaan liittyen. Mackenzien yllätysvierailu antaa vahvistuksen Chloen päätökselle. Lydia pohtii, pitäisikö hänen mennä Craigin hautajaisiin. Dawnin supistukset säikäyttävät Rhonan.'
|
||||
},
|
||||
categories: ['Soap', 'Drama', 'Romance', 'Series', 'TV Show', 'Emmerdale', 'Series 54'],
|
||||
directors: [
|
||||
{ lang: 'en', value: 'Ian Bevitt' },
|
||||
{ lang: 'en', value: 'Munir Malik' }
|
||||
]
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
date,
|
||||
content: ''
|
||||
})
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
})
|
21
sites/dna.fi/readme.md
Normal file
21
sites/dna.fi/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# dna.fi
|
||||
|
||||
https://www.dna.fi/viihde/dna-viihde/tvopas
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=dna.fi
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/dna.fi/dna.fi.config.js --output=./sites/dna.fi/dna.fi.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- dna.fi
|
||||
```
|
File diff suppressed because one or more lines are too long
1
sites/dsmart.com.tr/__data__/content1.json
Normal file
1
sites/dsmart.com.tr/__data__/content1.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"meta": {"code": 200, "message": "OK"}, "data": {"total": 218, "channels": [{"rating": 3, "ch_id": 805, "logo": "66fd23e8cfef0b37446b86fc", "ch_no": 1, "is_hd": true, "genre": [1, 11], "packages": ["58cfc9c7e138237a591f9a61", "58cfc9c7e138237a591f9a62", "58cfc9c7e138237a591f9a5f", "58cfc9c7e138237a591f9a60", "58cfc9c7e138237a591f9a63", "58cfc9c7e138237a591f9a64", "5dfcdac0cfef0b201d22ad58", "58e5e19be1382365ad190dc3", "58cfc9c7e138237a591f9a67", "58cfc9c7e138237a591f9a66", "58cfc9c7e138237a591f9a65"], "slug": "teknofest", "hd": true, "_id": "58d29bb0eefad3db9c606290", "order": 1, "channel_name": "Teknofest", "description": "", "schedule": []}]}}
|
1
sites/dsmart.com.tr/__data__/content2.json
Normal file
1
sites/dsmart.com.tr/__data__/content2.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,213 +1,107 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="dsmart.com.tr" lang="en" xmltv_id="BBCNewsEurope.uk" site_id="50#58d29bb0eefad3db9c6062c6">BBC World News</channel>
|
||||
<channel site="dsmart.com.tr" lang="en" xmltv_id="CNNInternationalEurope.us" site_id="49#58d29bb0eefad3db9c6062b8">CNN International</channel>
|
||||
<channel site="dsmart.com.tr" lang="en" xmltv_id="NBATV.us" site_id="69#58d29bb0eefad3db9c60626e">NBA TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="102#58d29bb0eefad3db9c60623c">NR1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="104#58d29bb0eefad3db9c606245">NR1 Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="105#5c7fda31cfef0b6cb7a578af">Türkçe Müzik</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="106#5c7fda93cfef0b6cb7a5793b">Turkish Silk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="111#58d29bb0eefad3db9c6062b9">Cartoonito</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="112#58d29bb0eefad3db9c6062b7">Baby TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="115#58d29bb0eefad3db9c6062b6">Da Vinci Learning</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="116#6540d968cfef0b02d2dbb177">Moonbug</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="117#5fedddcecfef0b159330996e">Disney Junior</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="123#5e75c6f5cfef0b15938bc9b9">TRT EBA TV İlkokul</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="124#5e75c923cfef0b15938bc9cc">TRT EBA TV Ortaokul</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="125#5e75c9d1cfef0b15938bc9d1">TRT EBA TV Lise</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="126#59dca805cfef0b4d80a47c2c">Vizyon Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="131#59dca8e2cfef0b4d80a47c34">RTV 23</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="135#5df20d44cfef0b19df84668e">Bahartürk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="139#59dcaaaccfef0b4d80a47d7e">Çifçi TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="150#59dcbc42cfef0b4d80a49628">Kanal 16</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="151#5dea10f3cfef0b49bf6de6fa">Kanal 35</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="158#59dcbd54cfef0b4d80a4963a">Uzay TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="159#59dcbd97cfef0b4d80a4963e">Kanal 28</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="163#6163ee3dcfef0b1593d572b0">Flash Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="166#5de50035cfef0b49bf6ba4e7">Ege Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="167#59dcbe60cfef0b4d80a4964a">KKTC Kanal T</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="168#59dcbe7dcfef0b4d80a4964c">Yeni Kocaeli TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="175#59dcbf24cfef0b4d80a49652">Saudi Quran TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="176#59dcbf4acfef0b4d80a49654">Saudi Sunnah TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="181#58d29bb0eefad3db9c60624f">NHK World English</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="198#58d29bb0eefad3db9c606247">ATV Turkiye SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="206#5d25dbe5cfef0b5761a051db">Test</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="207#5e7865eacfef0b15938c1bb0">TRT EBA TV İlkokul SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="208#5e78662ecfef0b15938c1c03">TRT EBA TV Ortaokul SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="209#5e7866dfcfef0b15938c1c1b">TRT EBA TV Lise SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="210#618bd2bbcfef0b1593e5d42c">45'lik</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="60#61a408d7cfef0b1593ed2812">History Channel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="63#64edfc67cfef0b02d2c038c5">Tarih Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="64#59dca29fcfef0b4d80a47a61">Nature Escape</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="67#59dca3b2cfef0b4d80a47b77">Fashion TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="87#63ecd91acfef0b02d2687aed">SZC</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="89#6486edd4cfef0b02d29f163e">Cadde TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="90#6481bce5cfef0b02d29e23d1">Cine 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="93#58d29bb0eefad3db9c606231">TRT 3 Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="99#58d29bb0eefad3db9c6062c5">Dream Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="24Kitchen.tr" site_id="53#58d29bb0eefad3db9c60627b">24Kitchen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="24TV.tr" site_id="33#58d29bb0eefad3db9c60622e">24</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="360.tr" site_id="42#58d29bb0eefad3db9c606236">360</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="A2TV.tr" site_id="165#59dcbe14cfef0b4d80a49646">a2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AgroTV.tr" site_id="140#5fa3d0a9cfef0b15930f7742">Agro Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AHaber.tr" site_id="199#58d29bb0eefad3db9c60625d">A Haber SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AHaber.tr" site_id="34#58d29bb0eefad3db9c60625e">a Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AkitTV.tr" site_id="91#59dca630cfef0b4d80a47b82">Akit TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AlJazeera.qa" site_id="184#59dcc114cfef0b4d80a49a0a">Al Jazeera Arabic</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AlJazeeraEnglish.qa" site_id="185#59dcc133cfef0b4d80a49a0c">Al Jazeera English</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AltasTV.tr" site_id="153#59dcbc79cfef0b4d80a4962c">Altaş TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ANews.tr" site_id="177#59638e5fcfef0b43f0fd31b5">a News</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="APara.tr" site_id="51#5b9fb1eecfef0b35341b7eb7">A Para</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ASpor.tr" site_id="204#58d29bb0eefad3db9c6062a3">A Spor SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ASpor.tr" site_id="77#58d29bb0eefad3db9c6062b2">a Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ASTV.tr" site_id="147#59dcbbf3cfef0b4d80a49622">AS TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ATV.tr" site_id="24#58d29bb0eefad3db9c60625f">ATV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BBCEarth.tr" site_id="55#58d29bb0eefad3db9c6062bc">BBC Earth</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BBNTurk.tr" site_id="37#5fd318b4cfef0b15932230d0">BBN Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BenguturkTV.tr" site_id="129#59cb8a67cfef0b15ae760a92">Bengütürk TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BeyazTV.tr" site_id="39#58d29bb0eefad3db9c606298">Beyaz TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BeykentTV.tr" site_id="154#59dcbc90cfef0b4d80a4962e">Beykent TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BloombergHT.tr" site_id="43#58d29bb0eefad3db9c60623e">Bloomberg HT</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BRT1.cy" site_id="169#59dcbe9acfef0b4d80a4964e">BRT 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CartoonNetwork.tr" site_id="109#58d29bb0eefad3db9c6062c8">Cartoon Network</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CemTV.tr" site_id="152#5d2dde88cfef0b39db6ab393">Cem Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CNNTurk.tr" site_id="205#59dca1f3cfef0b4d80a47a5f">CNN Türk SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CNNTurk.tr" site_id="29#5f2fc688cfef0b1593e08b76">CNN TÜRK</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CocukSmart.tr" site_id="110#58d29bb0eefad3db9c6062b5">Çocuk Smart</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiscoveryChannel.tr" site_id="58#58d29bb0eefad3db9c606248">Discovery</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiscoveryScience.tr" site_id="59#58d29bb0eefad3db9c60628e">Discovery Science</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DisneyChannel.tr" site_id="118#58d29bb0eefad3db9c60626c">Disney Channel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiyanetTV.tr" site_id="186#58d29bb0eefad3db9c606262">Diyanet Tv Sd</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiyanetTV.tr" site_id="94#5ac73ebbcfef0b34db533a95">Diyanet Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiziSmartMax.tr" site_id="19#58d29bb0eefad3db9c606278">Dizi Smart Max</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiziSmartPremium.tr" site_id="16#58d29bb0eefad3db9c60625a">Dizi Smart Premium</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DMAX.tr" site_id="197#58d29bb0eefad3db9c606246">DMAX SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DMAX.tr" site_id="45#58d29bb0eefad3db9c606282">DMAX</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DocuBox.nl" site_id="57#58d29bb0eefad3db9c6062be">DocuScreen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DreamTurk.tr" site_id="100#58d29bb0eefad3db9c60628d">Dream Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Ekoturk.tr" site_id="47#5c6e8e0ecfef0b613d9ff782">Ekotürk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ESTV.tr" site_id="160#59dcbdaecfef0b4d80a49640">Es TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="EuroD.tr" site_id="179#59dcbfdccfef0b4d80a4974a">Euro D</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Eurosport1.fr" site_id="72#58d29bb0eefad3db9c6062aa">Eurosport</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Eurosport2.fr" site_id="73#58d29bb0eefad3db9c606281">Eurosport 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="EuroStar.tr" site_id="180#59dcc000cfef0b4d80a4974d">Euro Star</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FastFunBox.nl" site_id="68#58d29bb0eefad3db9c6062bf">GameScreen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FBTV.tr" site_id="80#58d29bb0eefad3db9c606235">FB TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FightBox.nl" site_id="78#58d29bb0eefad3db9c6062b4">FightScreen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FilmBox.tr" site_id="13#58d29bb0eefad3db9c6062ba">FilmBox</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Fox.tr" site_id="195#58d29bb0eefad3db9c60623b">FOX SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Fox.tr" site_id="28#58d29bb0eefad3db9c6062a0">FOX</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FoxCrime.tr" site_id="18#58d29bb0eefad3db9c606268">FOXCRIME</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FX.us" site_id="17#58d29bb0eefad3db9c606269">FX</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HaberGlobal.tr" site_id="41#5bac7dedcfef0b02fac035fd">Haber Global</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="192#58d29bb0eefad3db9c606232">Haberturk SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="32#58d29bb0eefad3db9c60629d">Haber Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HalkTV.tr" site_id="161#58d29bb0eefad3db9c606288">Halk TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="InsightTV.nl" site_id="66#5dfc6dc2cfef0b201d222aa0">Insight TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KadirgaTV.tr" site_id="128#59dca8b8cfef0b4d80a47c32">Kadırga TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal26.tr" site_id="148#59dcbc08cfef0b4d80a49624">Kanal 26</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal3.tr" site_id="120#59dca70bcfef0b4d80a47b86">Kanal 3</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal42.tr" site_id="141#59dcab38cfef0b4d80a47e24">Kanal 42</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal7.tr" site_id="194#58d29bb0eefad3db9c606239">Kanal 7 SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal7.tr" site_id="26#58d29bb0eefad3db9c60629c">Kanal 7</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalB.tr" site_id="85#58d29bb0eefad3db9c606240">Kanal B</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalD.tr" site_id="187#58d29bb0eefad3db9c60622b">Kanal D SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalD.tr" site_id="21#58d29bb0eefad3db9c606258">Kanal D</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalFirat.tr" site_id="134#59dca9ddcfef0b4d80a47c3c">Kanal Fırat</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalV.tr" site_id="137#59dcaa71cfef0b4d80a47c42">Kanal V</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KardelenTV.tr" site_id="136#5d44406ecfef0b71b1d3885b">Kardelen Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KoyTV.tr" site_id="138#59dcaa91cfef0b4d80a47d7c">Köy TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KozaTV.tr" site_id="149#59dcbc2fcfef0b4d80a49626">Koza TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KRT.tr" site_id="127#59dca881cfef0b4d80a47c30">KRT</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="LiderHaber.tr" site_id="97#61517908cfef0b1593cd5f9e">Lider Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="LineTV.tr" site_id="130#59b7c231cfef0b07291c2aa2">Line TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="LoveNature.ca" site_id="70#5dfc9faacfef0b201d2246b5">Love Nature</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="LuysTV.tr" site_id="133#61605578cfef0b1593d4a81f">Luys Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MaviKaradenizTV.tr" site_id="155#59dcbc9fcfef0b4d80a49630">Mavi Karadeniz</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MilyonTV.tr" site_id="121#5c9889b0cfef0b4cffc475b4">Milyon</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MinikaCocuk.tr" site_id="119#58d29bb0eefad3db9c60626d">Minika Çocuk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MinikaGo.tr" site_id="113#58d29bb0eefad3db9c606257">Minika GO</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartClassic.tr" site_id="14#58d29bb0eefad3db9c60629a">MovieSmart Classic</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartPremium.tr" site_id="1#58d29bb0eefad3db9c606290">MovieSmart Premium</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartPremium2.tr" site_id="2#58d29bb0eefad3db9c606291">MovieSmart Premium 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartTurk.tr" site_id="15#58d29bb0eefad3db9c606299">MovieSmart Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NationalGeographic.tr" site_id="61#58d29bb0eefad3db9c6062a4">National Geographic</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NationalGeographicWild.tr" site_id="62#58d29bb0eefad3db9c6062a5">National Geographic WILD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NTV.tr" site_id="30#58d29bb0eefad3db9c60623a">NTV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="On4TV.tr" site_id="145#5dde8c07cfef0b2f64b09f0e">On4</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="PowerTurkTV.tr" site_id="107#58d29bb0eefad3db9c6062ac">Power Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="PowerTV.tr" site_id="108#58d29bb0eefad3db9c6062b3">Power TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="RTRPlaneta.ru" site_id="183#5d25b34fcfef0b75bced8a6e">Rtr Planeta</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="RumeliTV.tr" site_id="157#5d75f3bacfef0b29f5225f0e">Rumeli Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Russia24.ru" site_id="182#59dcc0d0cfef0b4d80a498cf">Russia-24</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sat7Turk.cy" site_id="132#59dca98dcfef0b4d80a47c3a">Sat 7 Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ShowMax.tr" site_id="88#59dca5fdcfef0b4d80a47b80">ShowMax</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ShowTV.tr" site_id="188#58d29bb0eefad3db9c60622c">Show TV SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ShowTV.tr" site_id="22#58d29bb0eefad3db9c60629b">Show TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema1001.tr" site_id="11#5fe07f5dcfef0b1593275822">Sinema TV 1001</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema1002.tr" site_id="12#5fe07f72cfef0b159327585a">Sinema TV 1002</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema2.tr" site_id="4#5fe07d9fcfef0b1593275754">Sinema TV 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAile.tr" site_id="7#5fe07e42cfef0b15932757a3">Sinema TV Aile</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAile2.tr" site_id="8#5fe07eabcfef0b15932757a6">Sinema TV Aile 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAksiyon.tr" site_id="5#5fe07dd5cfef0b1593275758">Sinema TV Aksiyon</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAksiyon2.tr" site_id="6#5fe07e23cfef0b15932757a1">Sinema TV Aksiyon 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaKomedi.tr" site_id="9#5fe07f29cfef0b1593275800">Sinema TV Comedy</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaKomedi2.tr" site_id="10#5fe07f45cfef0b159327581f">Sinema TV Comedy 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaTV.tr" site_id="3#5fe07d7acfef0b1593275751">Sinema TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SporSmart.tr" site_id="74#58d29bb0eefad3db9c60628a">Spor Smart</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SporSmart2.tr" site_id="79#5fcb6bd2cfef0b15931fcdf8">SPOR SMART 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SportsTV.tr" site_id="81#58d29bb0eefad3db9c606296">Sports Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SSport.tr" site_id="75#5ff5d18bcfef0b1593364e28">S Sport</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SSport2.tr" site_id="76#5ff5d2c8cfef0b15933651c7">S Sport 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="StarTV.tr" site_id="189#58d29bb0eefad3db9c60622d">STAR TV SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="StarTV.tr" site_id="23#58d29bb0eefad3db9c606259">Star</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TatlisesTV.tr" site_id="103#644a774dcfef0b02d28abccb">Tatlıses Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TAYTV.tr" site_id="71#59dca4d8cfef0b4d80a47b7a">TAY TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Tele1.tr" site_id="162#59dcbddccfef0b4d80a49642">Tele 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TempoTV.tr" site_id="144#61f935e5cfef0b1593123810">Tempo Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Teve2.tr" site_id="20#58d29bb0eefad3db9c6062a1">teve2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Teve2.tr" site_id="203#58d29bb0eefad3db9c60627a">teve2 SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TGRTBelgesel.tr" site_id="122#59dca751cfef0b4d80a47b88">TGRT Belgesel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TGRTEU.tr" site_id="178#59dcbfb6cfef0b4d80a49748">TGRT EU</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TGRTHaber.tr" site_id="44#58d29bb0eefad3db9c60623d">TGRT Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Tivi6.tr" site_id="142#618bd28fcfef0b1593e5d42a">Tivi6</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TLC.tr" site_id="35#58d29bb0eefad3db9c606238">TLC</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TMB.tr" site_id="101#58d29bb0eefad3db9c606272">TMB</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="190#58d29bb0eefad3db9c60622f">TRT 1 SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="25#58d29bb0eefad3db9c606274">TRT 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT2.tr" site_id="95#58d29bb0eefad3db9c606263">trt 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT4K.tr" site_id="174#59dcbee1cfef0b4d80a49650">TRT 4K</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTArabi.tr" site_id="173#58d29bb0eefad3db9c606265">TRT Arabi</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTAvaz.tr" site_id="172#58d29bb0eefad3db9c60624b">TRT Avaz</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTBelgesel.tr" site_id="200#58d29bb0eefad3db9c606264">Trt Belgesel SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTBelgesel.tr" site_id="65#58d29bb0eefad3db9c6062a8">TRT Belgesel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTCocuk.tr" site_id="114#58d29bb0eefad3db9c606255">TRT Çocuk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTHaber.tr" site_id="191#58d29bb0eefad3db9c606230">TRT Haber SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTHaber.tr" site_id="31#58d29bb0eefad3db9c606289">TRT Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTKurdi.tr" site_id="171#58d29bb0eefad3db9c60624a">TRT Kurdi</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTMuzik.tr" site_id="98#58d29bb0eefad3db9c606266">TRT Müzik</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTSpor.tr" site_id="201#58d29bb0eefad3db9c606270">Trt Spor SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTSpor.tr" site_id="82#58d29bb0eefad3db9c6062a9">TRT Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTSporYildiz.tr" site_id="83#5da87214cfef0b4df9157780">Trt Spor Yıldız</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTTurk.tr" site_id="96#58d29bb0eefad3db9c60624c">TRT Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTWorld.tr" site_id="170#58d29bb0eefad3db9c6062cc">TRT World</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV100.tr" site_id="36#5ccfd6adcfef0b6021816941">Tv 100</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV4.tr" site_id="84#59dca577cfef0b4d80a47b7c">TV4</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV5.tr" site_id="92#5bf6b074cfef0b7351c27d14">Tv 5</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV52.tr" site_id="146#5db29993cfef0b4df918bc9e">Tv 52</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV8.tr" site_id="193#58d29bb0eefad3db9c606233">TV 8 SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV8.tr" site_id="27#58d29bb0eefad3db9c6062ae">TV8</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV85.tr" site_id="46#58d29bb0eefad3db9c6062cb">TV 8,5</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TVDen.tr" site_id="143#5975e329cfef0b50e2627904">TV Den</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TVNET.tr" site_id="202#58d29bb0eefad3db9c606276">Tvnet SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TVNET.tr" site_id="40#58d29bb0eefad3db9c60629e">TV Net</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UcanKusTV.tr" site_id="38#58d29bb0eefad3db9c6062b0">Uçankuş TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UlkeTV.tr" site_id="196#58d29bb0eefad3db9c606243">ULKE TV SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UlkeTV.tr" site_id="48#58d29bb0eefad3db9c60629f">Ülke TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UlusalKanal.tr" site_id="86#58d29bb0eefad3db9c606242">Ulusal TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UniversiteTV.tr" site_id="164#65142dbbcfef0b02d2cc14b7">Üniversite Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="VatanTV.tr" site_id="156#59dcbcb5cfef0b4d80a49632">Vatan TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="VavTV.tr" site_id="54#6071fb3bcfef0b159373a531">Vav Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ViasatHistory.tr" site_id="56#58d29bb0eefad3db9c6062bd">Viasat History</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="WomanTV.tr" site_id="52#61f934e2cfef0b1593123808">Woman TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="5d25dbe5cfef0b5761a051db">Test</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="58d29bb0eefad3db9c6062b4">CosmoSports</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="58d29bb0eefad3db9c6062ba">FilmScreen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="58d29bb0eefad3db9c6062bf">Azoomee</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="58d29bb0eefad3db9c606231">TRT 3 Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="58d29bb0eefad3db9c606247">ATV Turkiye SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="59dca29fcfef0b4d80a47a61">Nature Escape</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="61a408d7cfef0b1593ed2812">History Channel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="6540d968cfef0b02d2dbb177">Moonbug</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="66337391cfef0b02d78776c8">Ekol Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="66e7e5cdcfef0b374461c45b">Spor Çoklu Ekran</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="66e7e50dcfef0b374461c36e">Ulusal Çoklu Ekran</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="66e7e54ccfef0b374461c370">Haber Çoklu Ekran</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="" site_id="5e75c923cfef0b15938bc9cc">TRT EBA TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="24TV.tr" site_id="58d29bb0eefad3db9c60622e">24</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="360.tr" site_id="58d29bb0eefad3db9c606236">360</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="A2TV.tr" site_id="59dcbe14cfef0b4d80a49646">a2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="AHaber.tr" site_id="58d29bb0eefad3db9c60625e">a Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ANews.tr" site_id="59638e5fcfef0b43f0fd31b5">a News</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="APara.tr" site_id="5b9fb1eecfef0b35341b7eb7">A Para</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ASpor.tr" site_id="58d29bb0eefad3db9c6062b2">a Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ATV.tr" site_id="58d29bb0eefad3db9c60625f">ATV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BabyTV.fr" site_id="58d29bb0eefad3db9c6062b7">Baby TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BBCEarth.tr" site_id="58d29bb0eefad3db9c6062bc">BBC Earth</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BBCNewsEurope.uk" site_id="58d29bb0eefad3db9c6062c6">BBC World News</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BeyazTV.tr" site_id="58d29bb0eefad3db9c606298">Beyaz TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="BloombergHT.tr" site_id="58d29bb0eefad3db9c60623e">Bloomberg HT</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Cartoonito.uk" site_id="58d29bb0eefad3db9c6062b9">Cartoonito</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CartoonNetwork.tr" site_id="58d29bb0eefad3db9c6062c8">Cartoon Network</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CNBCEurope.uk" site_id="66630f98cfef0b02d797d815">CNBC-e</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CNNInternationalEurope.us" site_id="58d29bb0eefad3db9c6062b8">CNN International</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CNNTurk.tr" site_id="59dca1f3cfef0b4d80a47a5f">CNN Türk SD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="CocukSmart.tr" site_id="58d29bb0eefad3db9c6062b5">Çocuk Smart</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DaVinci.de" site_id="58d29bb0eefad3db9c6062b6">Da Vinci Learning</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiscoveryChannel.tr" site_id="58d29bb0eefad3db9c606248">Discovery</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DisneyJunior.tr" site_id="5fedddcecfef0b159330996e">Disney Junior</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiziSmartMax.tr" site_id="58d29bb0eefad3db9c606278">Dizi Smart Max</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DiziSmartPremium.tr" site_id="58d29bb0eefad3db9c60625a">Dizi Smart Premium</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DMAX.tr" site_id="58d29bb0eefad3db9c606282">DMAX</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DocuBox.nl" site_id="58d29bb0eefad3db9c6062be">DocuScreen</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DreamTurk.tr" site_id="58d29bb0eefad3db9c6062c5">Dream Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="DreamTurk.tr" site_id="58d29bb0eefad3db9c60628d">Dream Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Ekoturk.tr" site_id="5c6e8e0ecfef0b613d9ff782">Ekotürk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="EuroD.tr" site_id="59dcbfdccfef0b4d80a4974a">Euro D</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Eurosport1.tr" site_id="58d29bb0eefad3db9c6062aa">Eurosport</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Eurosport2.tr" site_id="58d29bb0eefad3db9c606281">Eurosport 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FashionTVEurope.fr" site_id="59dca3b2cfef0b4d80a47b77">Fashion TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="FX.us" site_id="58d29bb0eefad3db9c606269">FX</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HaberGlobal.tr" site_id="5bac7dedcfef0b02fac035fd">Haber Global</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HaberturkTV.tr" site_id="58d29bb0eefad3db9c60629d">Haber Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="HTSporTV.tr" site_id="66d839a0cfef0b37445c6db1">HT Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="InvestigationDiscoveryEurope.us" site_id="58d29bb0eefad3db9c60628e">Discovery ID</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Kanal7.tr" site_id="58d29bb0eefad3db9c60629c">Kanal 7</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="KanalD.tr" site_id="58d29bb0eefad3db9c606258">Kanal D</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="LoveNature.ca" site_id="5dfc9faacfef0b201d2246b5">Love Nature</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MinikaGo.tr" site_id="58d29bb0eefad3db9c606257">Minika GO</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartClassic.tr" site_id="58d29bb0eefad3db9c60629a">MovieSmart Classic</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="MovieSmartTurk.tr" site_id="58d29bb0eefad3db9c606299">MovieSmart Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NationalGeographic.tr" site_id="58d29bb0eefad3db9c6062a4">National Geographic</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NationalGeographicWild.tr" site_id="58d29bb0eefad3db9c6062a5">National Geographic WILD</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NBATV.us" site_id="58d29bb0eefad3db9c60626e">NBA TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NOWTV.tr" site_id="58d29bb0eefad3db9c6062a0">NOW</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="NTV.tr" site_id="58d29bb0eefad3db9c60623a">NTV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ShowTV.tr" site_id="58d29bb0eefad3db9c60629b">Show TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema2.tr" site_id="5fe07d9fcfef0b1593275754">Sinema TV 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema1001.tr" site_id="5fe07f5dcfef0b1593275822">Sinema TV 1001</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Sinema1002.tr" site_id="5fe07f72cfef0b159327585a">Sinema TV 1002</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAile2.tr" site_id="5fe07eabcfef0b15932757a6">Sinema TV Aile 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAile.tr" site_id="5fe07e42cfef0b15932757a3">Sinema TV Aile</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAksiyon2.tr" site_id="5fe07e23cfef0b15932757a1">Sinema TV Aksiyon 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaAksiyon.tr" site_id="5fe07dd5cfef0b1593275758">Sinema TV Aksiyon</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaKomedi2.tr" site_id="5fe07f45cfef0b159327581f">Sinema TV Comedy 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaKomedi.tr" site_id="5fe07f29cfef0b1593275800">Sinema TV Comedy</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SinemaTV.tr" site_id="5fe07d7acfef0b1593275751">Sinema TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SozcuTV.tr" site_id="63ecd91acfef0b02d2687aed">SZC</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SporSmart2.tr" site_id="5fcb6bd2cfef0b15931fcdf8">SPOR SMART 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="SporSmart.tr" site_id="58d29bb0eefad3db9c60628a">Spor Smart</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="StarTV.tr" site_id="58d29bb0eefad3db9c606259">Star</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TarihTV.tr" site_id="64edfc67cfef0b02d2c038c5">Tarih Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Tele1.tr" site_id="59dcbddccfef0b4d80a49642">Tele 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="Teve2.tr" site_id="58d29bb0eefad3db9c6062a1">teve2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TGRTHaber.tr" site_id="58d29bb0eefad3db9c60623d">TGRT Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TLC.tr" site_id="58d29bb0eefad3db9c606238">TLC</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TMB.tr" site_id="58d29bb0eefad3db9c606272">TMB</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT1.tr" site_id="58d29bb0eefad3db9c606274">TRT 1</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT2.tr" site_id="58d29bb0eefad3db9c606263">trt 2</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRT4K.tr" site_id="59dcbee1cfef0b4d80a49650">TRT 4K</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTAvaz.tr" site_id="58d29bb0eefad3db9c60624b">TRT Avaz</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTBelgesel.tr" site_id="58d29bb0eefad3db9c6062a8">TRT Belgesel</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTCocuk.tr" site_id="58d29bb0eefad3db9c606255">TRT Çocuk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTHaber.tr" site_id="58d29bb0eefad3db9c606289">TRT Haber</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTKurdi.tr" site_id="58d29bb0eefad3db9c60624a">TRT Kurdi</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTMuzik.tr" site_id="58d29bb0eefad3db9c606266">TRT Müzik</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTSpor.tr" site_id="58d29bb0eefad3db9c6062a9">TRT Spor</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTSporYildiz.tr" site_id="5da87214cfef0b4df9157780">Trt Spor Yıldız</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TRTTurk.tr" site_id="58d29bb0eefad3db9c60624c">TRT Türk</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV4.tr" site_id="59dca577cfef0b4d80a47b7c">TV4</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV8.tr" site_id="58d29bb0eefad3db9c6062ae">TV8</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV85.tr" site_id="58d29bb0eefad3db9c6062cb">TV 8,5</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TV100.tr" site_id="5ccfd6adcfef0b6021816941">Tv 100</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="TVNET.tr" site_id="58d29bb0eefad3db9c60629e">TV Net</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="UlkeTV.tr" site_id="58d29bb0eefad3db9c60629f">Ülke TV</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="VavTV.tr" site_id="6071fb3bcfef0b159373a531">Vav Tv</channel>
|
||||
<channel site="dsmart.com.tr" lang="tr" xmltv_id="ViasatHistory.tr" site_id="58d29bb0eefad3db9c6062bd">Viasat History</channel>
|
||||
</channels>
|
||||
|
|
|
@ -1,104 +1,130 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
const duration = require('dayjs/plugin/duration')
|
||||
const doFetch = require('@ntlab/sfetch')
|
||||
const debug = require('debug')('site:dsmart.com.tr')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(duration)
|
||||
|
||||
const API_ENDPOINT = 'https://www.dsmart.com.tr/api/v1/public/epg/schedules'
|
||||
doFetch.setDebugger(debug)
|
||||
|
||||
const channelsWithSchedule = true
|
||||
const pageLimit = 10
|
||||
const caches = {}
|
||||
|
||||
module.exports = {
|
||||
site: 'dsmart.com.tr',
|
||||
days: 2,
|
||||
url({ date, channel }) {
|
||||
const [page] = channel.site_id.split('#')
|
||||
|
||||
return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser: function ({ content, channel }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel)
|
||||
items.forEach(item => {
|
||||
const prev = programs[programs.length - 1]
|
||||
let start
|
||||
if (prev) {
|
||||
start = parseStart(item, prev.stop)
|
||||
} else {
|
||||
start = parseStart(item, dayjs.utc(item.day))
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 24 * 60 * 60 * 1000 // 1 day
|
||||
}
|
||||
let duration = parseDuration(item)
|
||||
let stop = start.add(duration, 's')
|
||||
|
||||
programs.push({
|
||||
title: item.program_name,
|
||||
category: parseCategory(item),
|
||||
description: item.description.trim(),
|
||||
},
|
||||
url({ date, page = 1 }) {
|
||||
return `https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=${
|
||||
page
|
||||
}&limit=${
|
||||
pageLimit
|
||||
}&day=${
|
||||
date.format('YYYY-MM-DD')
|
||||
}`
|
||||
},
|
||||
async parser({ content, channel, date, useCache = true }) {
|
||||
const programs = []
|
||||
if (content) {
|
||||
if (typeof content === 'string') {
|
||||
content = JSON.parse(content)
|
||||
}
|
||||
if (useCache) {
|
||||
const cacheKey = date.format('YYYYMMDD')
|
||||
// cache whole channels for the day
|
||||
if (caches[cacheKey] === undefined) {
|
||||
if (content?.data?.total) {
|
||||
const queues = []
|
||||
const pages = Math.ceil(content.data.total / pageLimit)
|
||||
for (let page = 2; page <= pages; page++) {
|
||||
queues.push(module.exports.url({ date, page }))
|
||||
}
|
||||
await doFetch(queues, (url, res) => {
|
||||
if (Array.isArray(res?.data?.channels)) {
|
||||
content.data.channels.push(...res.data.channels)
|
||||
}
|
||||
})
|
||||
caches[cacheKey] = content
|
||||
}
|
||||
} else {
|
||||
content = caches[cacheKey]
|
||||
}
|
||||
}
|
||||
if (Array.isArray(content?.data?.channels)) {
|
||||
content.data.channels
|
||||
.filter(i => i._id === channel.site_id)
|
||||
.forEach(i => {
|
||||
if (i.schedule.length) {
|
||||
let dayStart, ofs
|
||||
programs.push(...i.schedule
|
||||
.map(p => {
|
||||
const baseDate = dayjs.utc(p.day)
|
||||
const startDate = dayjs.utc(p.start_date)
|
||||
// calculate base offset if needed
|
||||
if (!dayStart) {
|
||||
dayStart = startDate
|
||||
ofs = dayjs.duration(dayjs.utc(`${p.day.substr(0, 11)}${p.start_date.substr(11)}`).diff(baseDate))
|
||||
.asSeconds()
|
||||
}
|
||||
const delta = dayjs.duration(startDate.diff(dayStart)).asSeconds()
|
||||
// ignore days in duration
|
||||
const [h, m, s] = (p.duration.includes(',') ? p.duration.split(',')[1].trim() : p.duration)
|
||||
.split(':').map(Number)
|
||||
const duration = (h * 3600) + (m * 60) + s
|
||||
const start = baseDate.add(ofs + delta, 's')
|
||||
const stop = start.add(duration, 's')
|
||||
return {
|
||||
title: p.program_name,
|
||||
description: p.description,
|
||||
category: p.genre && p.genre.includes('/') ?
|
||||
p.genre.split('/').map(g => `${g.substr(0, 1).toUpperCase()}${g.substr(1)}`) : null,
|
||||
start,
|
||||
stop
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const perPage = 1
|
||||
const totalChannels = 210
|
||||
const pages = Math.ceil(totalChannels / perPage)
|
||||
|
||||
const channels = []
|
||||
for (let i in Array(pages).fill(0)) {
|
||||
const page = parseInt(i) + 1
|
||||
const url = `${API_ENDPOINT}?page=${page}&limit=${perPage}&day=${dayjs().format(
|
||||
'YYYY-MM-DD'
|
||||
)}`
|
||||
let offset = i * perPage
|
||||
await axios
|
||||
.get(url)
|
||||
.then(r => r.data)
|
||||
.then(data => {
|
||||
offset++
|
||||
if (data && data.data && Array.isArray(data.data.channels)) {
|
||||
data.data.channels.forEach((item, j) => {
|
||||
const index = offset + j
|
||||
channels.push({
|
||||
const f = page => this.url({ date: dayjs(), page })
|
||||
let pages, page = 1
|
||||
const queues = [f(page)]
|
||||
await doFetch(queues, (url, res) => {
|
||||
if (!pages && res.data.total) {
|
||||
pages = Math.ceil(res.data.total / pageLimit)
|
||||
while (page < pages) {
|
||||
queues.push(f(++page))
|
||||
}
|
||||
}
|
||||
if (Array.isArray(res?.data?.channels)) {
|
||||
channels.push(...res.data.channels
|
||||
.filter(i => (channelsWithSchedule && i.schedule.length) || !channelsWithSchedule)
|
||||
.map(i => {
|
||||
return {
|
||||
lang: 'tr',
|
||||
name: item.channel_name,
|
||||
site_id: index + '#' + item._id
|
||||
})
|
||||
})
|
||||
name: i.channel_name,
|
||||
site_id: i._id
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err.message)
|
||||
})
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
return channels
|
||||
}
|
||||
}
|
||||
|
||||
function parseCategory(item) {
|
||||
return item.genre !== '0' ? item.genre : null
|
||||
}
|
||||
|
||||
function parseStart(item, date) {
|
||||
const time = dayjs.utc(item.start_date)
|
||||
|
||||
return dayjs.utc(`${date.format('YYYY-MM-DD')} ${time.format('HH:mm:ss')}`, 'YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
|
||||
function parseDuration(item) {
|
||||
const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/)
|
||||
|
||||
return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss)
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
const [, channelId] = channel.site_id.split('#')
|
||||
const data = JSON.parse(content)
|
||||
if (!data || !data.data || !Array.isArray(data.data.channels)) return null
|
||||
const channelData = data.data.channels.find(i => i._id == channelId)
|
||||
|
||||
return channelData && Array.isArray(channelData.schedule) ? channelData.schedule : []
|
||||
}
|
||||
|
|
|
@ -1,64 +1,81 @@
|
|||
const { parser, url } = require('./dsmart.com.tr.config.js')
|
||||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
|
||||
const date = dayjs.utc('2023-01-16', 'YYYY-MM-DD').startOf('d')
|
||||
jest.mock('axios')
|
||||
|
||||
const date = dayjs.utc('2025-01-13', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '3#5fe07d7acfef0b1593275751',
|
||||
xmltv_id: 'SinemaTV.tr'
|
||||
site_id: '5fe07f5dcfef0b1593275822',
|
||||
xmltv_id: 'Sinema1001.tr'
|
||||
}
|
||||
|
||||
axios.get.mockImplementation(url => {
|
||||
const result = {}
|
||||
const urls = {
|
||||
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=10&day=2025-01-13':
|
||||
'content1.json',
|
||||
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=2&limit=10&day=2025-01-13':
|
||||
'content2.json',
|
||||
}
|
||||
if (urls[url] !== undefined) {
|
||||
result.data = fs.readFileSync(path.join(__dirname, '__data__', urls[url])).toString()
|
||||
if (!urls[url].startsWith('content1')) {
|
||||
result.data = JSON.parse(result.data)
|
||||
}
|
||||
}
|
||||
|
||||
return Promise.resolve(result)
|
||||
})
|
||||
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date, channel })).toBe(
|
||||
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=3&limit=1&day=2023-01-16'
|
||||
expect(url({ date })).toBe(
|
||||
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=10&day=2025-01-13'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||
const results = parser({ channel, content }).map(p => {
|
||||
it('can parse response', async () => {
|
||||
const content = fs.readFileSync(path.join(__dirname, '__data__', 'content1.json')).toString()
|
||||
const results = (await parser({ content, channel, date })).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(11)
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2023-01-15T22:00:00.000Z',
|
||||
stop: '2023-01-15T23:45:00.000Z',
|
||||
title: 'Bizi Ayıran Her Şey',
|
||||
category: 'sinema/genel',
|
||||
start: '2025-01-12T21:30:00.000Z',
|
||||
stop: '2025-01-12T23:30:00.000Z',
|
||||
title: 'Taksi Şoförü',
|
||||
description:
|
||||
'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.'
|
||||
'Vietnam savaşının izlerinin etkisindeki bir asker ve New York sokakları. Travis Bickle, geceleri taksi şoförlüğü yaptığı New York’ta bir yandan da gündelik yaşama ayak uydurmaya çalışır. Çürümeye yüz tutmuş bir topluma karşı tutulan bir ayna niteliğindeki film, yönetmen Martin Scorsese’nin kariyerinin en önemli filmlerinden biri olarak kabul görür.',
|
||||
category: ['Sinema', 'Genel']
|
||||
})
|
||||
|
||||
expect(results[1]).toMatchObject({
|
||||
start: '2023-01-15T23:45:00.000Z',
|
||||
stop: '2023-01-16T01:30:00.000Z',
|
||||
title: 'Pixie',
|
||||
category: 'sinema/genel',
|
||||
expect(results[10]).toMatchObject({
|
||||
start: '2025-01-13T19:00:00.000Z',
|
||||
stop: '2025-01-13T21:00:00.000Z',
|
||||
title: 'Senin Adın',
|
||||
description:
|
||||
'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.'
|
||||
})
|
||||
|
||||
expect(results[12]).toMatchObject({
|
||||
start: '2023-01-16T20:30:00.000Z',
|
||||
stop: '2023-01-16T22:30:00.000Z',
|
||||
title: 'Seberg',
|
||||
category: 'sinema/genel',
|
||||
description:
|
||||
'Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.'
|
||||
'Dağların sardığı bir bölgede yaşayan Mitsuha, hayatından çok da memnun olmayan liseli bir kızdır. Babası vali olarak çalışmakta ve seçim kampanyaları ile uğraşmaktadır. Evde kendisi, kardeşi ve büyükannesi dışında kimse yoktur. Kırsal kesimdeki yaşamı onu bunaltmaktadır ve esas isteği Tokyo\'nun muhteşem şehir hayatının bir parçası olmaktır. Diğer tarafta ise Taki vardır.',
|
||||
category: ['Sinema', 'Genel']
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
it('can handle empty guide', async () => {
|
||||
const results = await parser({
|
||||
channel,
|
||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
|
||||
date,
|
||||
content: fs.readFileSync(path.join(__dirname, '__data__', 'no_content.json')).toString(),
|
||||
useCache: false
|
||||
})
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
|
|
|
@ -18,15 +18,15 @@
|
|||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#489">Maaddii Abol</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#215">SS MotorSport Nigeria</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="1Magic.za" site_id="nga#103">1 Magic</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicEpic.za" site_id="nga#152">Africa Magic Epic</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicFamily.za" site_id="nga#154">Africa Magic Family</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicHausa.za" site_id="nga#156">Africa Magic Hausa</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicIgbo.za" site_id="nga#159">Africa Magic Igbo</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicShowcase.za" site_id="nga#151">Africa Magic Showcase HD</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicUrban.za" site_id="nga#153">Africa Magic Urban</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricaMagicYoruba.za" site_id="nga#157">Africa Magic Yoruba</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfricanewsEnglish.cg" site_id="nga#417">Africanews</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AfroMusicPop.pt" site_id="nga#326">AFRO Music English</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#152">Africa Magic Epic</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#154">Africa Magic Family</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#156">Africa Magic Hausa</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#159">Africa Magic Igbo</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#151">Africa Magic Showcase HD</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#153">Africa Magic Urban</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#157">Africa Magic Yoruba</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#417">Africanews</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="" site_id="nga#326">AFRO Music English</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AITInternational.ng" site_id="nga#253">AIT</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="nga#406">Al Jazeera</channel>
|
||||
<channel site="dstv.com" lang="en" xmltv_id="Arewa24.ng" site_id="nga#261">Arewa 24</channel>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<channel site="elcinema.com" lang="ar" xmltv_id="2MInternational.ma" site_id="1353">المغربية الثانية</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AbuDhabiTV.ae" site_id="1136">أبو ظبي</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AlAoulaMiddleEast.ma" site_id="1312">الأولى المغربية</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AlArabyTV2.uk" site_id="1382">التلفزيون العربي 2</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="" site_id="1382">التلفزيون العربي 2</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AlDafrahTV.ae" site_id="1264">الظفرة</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AlhayatTV.eg" site_id="1137">الحياة</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="AlJadeed.lb" site_id="1216">الجديد</channel>
|
||||
|
@ -78,7 +78,7 @@
|
|||
<channel site="elcinema.com" lang="ar" xmltv_id="MBCMasr.eg" site_id="1239">إم بي سي مصر</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="MBCMasr2.eg" site_id="1278">إم بي سي مصر 2</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="MBCMax.ae" site_id="1132">إم بي سي ماكس</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="MBCPlusDrama.ae" site_id="1131">إم بي سي دراما +</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="" site_id="1131">إم بي سي دراما +</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="MixBelAraby.eg" site_id="1371">ميكس بالعربي</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="MTV.lb" site_id="1296">إم تي في</channel>
|
||||
<channel site="elcinema.com" lang="ar" xmltv_id="NationalGeographicAbuDhabi.ae" site_id="1266">ناشونال جيوجراف...</channel>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<channel site="elcinema.com" lang="en" xmltv_id="2MInternational.ma" site_id="1353">2M TV</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AbuDhabiTV.ae" site_id="1136">Abu Dhabi TV</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AlAoulaMiddleEast.ma" site_id="1312">Al Aoula Morocco</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AlArabyTV2.uk" site_id="1382">Alaraby TV 2</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="" site_id="1382">Alaraby TV 2</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AlDafrahTV.ae" site_id="1264">Al Dafrah</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AlhayatTV.eg" site_id="1137">Alhayat TV</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="AlJadeed.lb" site_id="1216">Al Jadeed TV</channel>
|
||||
|
@ -71,11 +71,11 @@
|
|||
<channel site="elcinema.com" lang="en" xmltv_id="MBCAction.ae" site_id="1130">MBC Action</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCBollywood.ae" site_id="1259">MBC Bollywood</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCDrama.ae" site_id="1194">MBC Drama</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCIraq.ae" site_id="1340">MBC Iraq</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="" site_id="1340">MBC Iraq</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCMasr.eg" site_id="1239">MBC Egypt</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCMasr2.eg" site_id="1278">MBC MASR 2</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCMax.ae" site_id="1132">MBC MAX</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MBCPlusDrama.ae" site_id="1131">MBC Drama +</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="" site_id="1131">MBC Drama +</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MixBelAraby.eg" site_id="1371">Mix Bel Araby</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="MTV.lb" site_id="1296">MTV</channel>
|
||||
<channel site="elcinema.com" lang="en" xmltv_id="NationalGeographicAbuDhabi.ae" site_id="1266">National Geogra...</channel>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="sky-cinema-spooky">Sky Cinema Spooky</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="sky-cinema-twilight">Sky Cinema Twilight</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="4Music.uk" site_id="4music">4Music</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="alibi.uk" site_id="alibi">Alibi</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="alibi">Alibi</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="AnimalPlanet.uk" site_id="animal-planet">Animal Planet</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="BBCFour.uk" site_id="bbc-four">BBC Four</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="BBCOneNorthernIreland.uk" site_id="bbc-one-ni">BBC One NI</channel>
|
||||
|
@ -26,20 +26,20 @@
|
|||
<channel site="entertainment.ie" lang="en" xmltv_id="ComedyCentral.uk" site_id="comedy-central">Comedy Central</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="ComedyCentralExtra.uk" site_id="comedy-central-extra">Comedy Central Extra</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Cula4.ie" site_id="cula4">Cúla4</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Dave.uk" site_id="dave">Dave</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="dave">Dave</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="DiscoveryChannel.uk" site_id="discovery-channel">Discovery Channel</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="DiscoveryHistory.uk" site_id="discovery-history">Discovery History</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="DiscoveryScience.uk" site_id="discovery-science">Discovery Science</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="DiscoveryTurbo.uk" site_id="discovery-turbo">Discovery Turbo</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="DMAX.uk" site_id="dmax">DMAX</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Drama.uk" site_id="drama">Drama</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="drama">Drama</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="E.ie" site_id="e-entertainment">E! Entertainment</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="E4.uk" site_id="e4">E4</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="E4Extra.uk" site_id="e4-extra">E4 Extra</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Eden.uk" site_id="eden">Eden</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="eden">Eden</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Eurosport1.uk" site_id="eurosport-1">Eurosport 1</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Eurosport2.uk" site_id="eurosport-2">Eurosport 2</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="GOLD.uk" site_id="gold">GOLD</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="gold">GOLD</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="GREATaction.uk" site_id="great-action">Great! Action</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="GREATmovies.uk" site_id="great-movies">Great! Movies</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="GREATromance.uk" site_id="great-movies-romance">Great! Movies Romance</channel>
|
||||
|
@ -107,6 +107,6 @@
|
|||
<channel site="entertainment.ie" lang="en" xmltv_id="VirginMediaOne.ie" site_id="virgin-media-one">Virgin Media One</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="VirginMediaThree.ie" site_id="virgin-media-three">Virgin Media Three</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="VirginMediaTwo.ie" site_id="virgin-media-two">Virgin Media Two</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="W.uk" site_id="w">W</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="Yesterday.uk" site_id="yesterday">Yesterday</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="w">W</channel>
|
||||
<channel site="entertainment.ie" lang="en" xmltv_id="" site_id="yesterday">Yesterday</channel>
|
||||
</channels>
|
||||
|
|
85320
sites/epg.112114.xyz/__data__/content.xml
Normal file
85320
sites/epg.112114.xyz/__data__/content.xml
Normal file
File diff suppressed because it is too large
Load diff
933
sites/epg.112114.xyz/epg.112114.xyz.channels.xml
Normal file
933
sites/epg.112114.xyz/epg.112114.xyz.channels.xml
Normal file
|
@ -0,0 +1,933 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="4K综艺">4K综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="1905环球经典">1905环球经典</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV体育">BTV体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV影视">BTV影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="BRTVArtsChannel.cn" site_id="BTV文艺">BTV文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV新闻">BTV新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV生活">BTV生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV科教">BTV科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="BTV财经">BTV财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV1">CCTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV2">CCTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV3">CCTV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV4">CCTV4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV4K">CCTV4K</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV4欧洲">CCTV4欧洲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV4美洲">CCTV4美洲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV5">CCTV5</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV5+">CCTV5+</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV6">CCTV6</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV7">CCTV7</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV8">CCTV8</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV8K">CCTV8K</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV9">CCTV9</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV10">CCTV10</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV11">CCTV11</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV12">CCTV12</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV13">CCTV13</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV14">CCTV14</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV15">CCTV15</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV16">CCTV16</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV17">CCTV17</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTVNEWS">CCTVNEWS</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV娱乐">CCTV娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV怀旧剧场">CCTV怀旧剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV第一剧场">CCTV第一剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CCTV风云剧场">CCTV风云剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV1">CDTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV2">CDTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV3">CDTV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV4">CDTV4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV5">CDTV5</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CDTV6">CDTV6</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CETV1">CETV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CETV2">CETV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CETV3">CETV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CETV4">CETV4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN">CGTN</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN俄语">CGTN俄语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN法语">CGTN法语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN纪录">CGTN纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN西语">CGTN西语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CGTN阿语">CGTN阿语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CHC动作电影">CHC动作电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CHC家庭影院">CHC家庭影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CHC影迷电影">CHC影迷电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CHC高清电影">CHC高清电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CINEMAX热门影院">CINEMAX热门影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CMC北美">CMC北美</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="CMC香港">CMC香港</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="DALIAN1">DALIAN1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="DALIAN2">DALIAN2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="DALIAN4">DALIAN4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="DONGFANG1">DONGFANG1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="DOX4K">DOX4K</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="FZTV1">FZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="GTV游戏竞技">GTV游戏竞技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBHGTV1">HBHGTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBHGTV2">HBHGTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBHSTV1">HBHSTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBJZTV1">HBJZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBJZTV2">HBJZTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBO">HBO</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBO原创巨献">HBO原创巨献</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBO强档巨献">HBO强档巨献</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBO溫馨家庭">HBO溫馨家庭</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBSYTV1">HBSYTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBSYTV2">HBSYTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBSYTV3">HBSYTV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBSZTV1">HBSZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBSZTV2">HBSZTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBWHTV2">HBWHTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBWHTV3">HBWHTV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBWHTV7">HBWHTV7</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBXGTV1">HBXGTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBXGTV2">HBXGTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBXYTV1">HBXYTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBXYTV2">HBXYTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBYCSXTV1">HBYCSXTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HBYCSXTV2">HBYCSXTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HISTORY">HISTORY</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HNXTTV1">HNXTTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HOY76">HOY76</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HOY77">HOY77</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HOY78">HOY78</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUASHU-JCYS">HUASHU-JCYS</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUASHU-TSJL">HUASHU-TSJL</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI1">HUBEI1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI2">HUBEI2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI3">HUBEI3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI4">HUBEI4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI5">HUBEI5</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI6">HUBEI6</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI7">HUBEI7</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HUBEI9">HUBEI9</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HZTV1">HZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="HZTV2">HZTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="IPTV少儿动画">IPTV少儿动画</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="IPTV热播剧场">IPTV热播剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="IPTV经典电影">IPTV经典电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="IPTV魅力时尚">IPTV魅力时尚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="JINHUATV1">JINHUATV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="LSTIME电影台">LSTIME电影台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv中国功夫">NEWTV中国功夫</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv军事评论">NEWTV军事评论</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv军旅剧场">NEWTV军旅剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv动作电影">NEWTV动作电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv古装剧场">NEWTV古装剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv家庭剧场">NEWTV家庭剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv怡伴健康">NEWTV怡伴健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv惊悚悬疑">NEWTV惊悚悬疑</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv武搏世界">NEWTV武搏世界</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv潮妈辣婆">NEWTV潮妈辣婆</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv炫舞未来">NEWTV炫舞未来</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv热播精选">NEWTV热播精选</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv爱情喜剧">NEWTV爱情喜剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv精品体育">NEWTV精品体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv精品大剧">NEWTV精品大剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv精品纪录">NEWTV精品纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv精品综合">NEWTV精品综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv超级体育">NEWTV超级体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv超级电影">NEWTV超级电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv超级电视剧">NEWTV超级电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv超级综艺">NEWTV超级综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="newtv金牌综艺">NEWTV金牌综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW剧集台">NOW剧集台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW华剧台">NOW华剧台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW影视点播站">NOW影视点播站</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW新闻台">NOW新闻台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW爆谷台">NOW爆谷台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW爆谷星影台">NOW爆谷星影台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW直播台">NOW直播台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="NOW财经台">NOW财经台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="POPC">POPC</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="QHTV1">QHTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="RTHK31">RTHK31</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="RTHK32">RTHK32</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="RTHK33">RTHK33</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="RTHK34">RTHK34</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="RTHK35">RTHK35</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV1">SCTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV2">SCTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV3">SCTV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV4">SCTV4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV5">SCTV5</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV7">SCTV7</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV8">SCTV8</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SCTV9">SCTV9</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SITV14">SITV14</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SKYNEWS">SKYNEWS</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SONYMAX">SONYMAX</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SONYSAB">SONYSAB</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SXJZTV1">SXJZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="SXJZTV2">SXJZTV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="TATV1">TATV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="TATV3">TATV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="TVB PLUS">TVB PLUS</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="TVB剧场">TVB剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="TVB星河">TVB星河</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="VIUTVSIX">VIUTVSIX</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="XSJZTV1">XSJZTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="Y+影院">Y+影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="ZHTV-1">ZHTV-1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="ZHTV-2">ZHTV-2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="三沙卫视">三沙卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海">上海</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海教育">上海教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海教育台">上海教育台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海新闻综合">上海新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海星尚">上海星尚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海第一财经">上海第一财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海纪实人文">上海纪实人文</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海艺术人文">上海艺术人文</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上海都市">上海都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="上视东方影视">上视东方影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="世界地理">世界地理</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东北热剧">东北热剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东南卫视">东南卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东方卫视">东方卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东方影视">东方影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东方电影">东方电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东方财经">东方财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东森亚洲卫视">东森亚洲卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东森亚洲新闻台">东森亚洲新闻台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东莞新闻">东莞新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="东莞生活资讯">东莞生活资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中华特产">中华特产</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中华美食">中华美食</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国交通">中国交通</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国功夫">中国功夫</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国天气">中国天气</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国教育1台">中国教育1台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国教育2台">中国教育2台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国教育3台">中国教育3台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国教育4台">中国教育4台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中国教育一套">中国教育一套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中天亚洲台">中天亚洲台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中天新闻台">中天新闻台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中央台–珠江">中央台–珠江</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中学生">中学生</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中山公共">中山公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中山教育">中山教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中山综合">中山综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="中视">中视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="之江纪录">之江纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="乌鲁木齐都市">乌鲁木齐都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="乐游">乐游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="书画">书画</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云上电影院">云上电影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南公共">云南公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南卫视">云南卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南娱乐">云南娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南少儿">云南少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南康旅">云南康旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南影视">云南影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南生活">云南生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="云南都市">云南都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="亚洲剧台">亚洲剧台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="亚洲新闻台">亚洲新闻台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="京视剧场">京视剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="仙游电视">仙游电视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="优优宝贝">优优宝贝</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="优漫卡通">优漫卡通</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="佛山公共">佛山公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="佛山南海">佛山南海</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="佛山影视">佛山影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="佛山综合">佛山综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="佛山顺德">佛山顺德</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="先锋乒羽">先锋乒羽</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="全民热练">全民热练</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="六安公共">六安公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="六安公共 LIUANTV1">六安公共 LIUANTV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="六安新闻综合">六安新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="六安都市生活">六安都市生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兰州公共">兰州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兰州文旅">兰州文旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兰州新闻综合">兰州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兰州生活经济">兰州生活经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兵器科技">兵器科技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="兵团卫视">兵团卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古农牧">内蒙古农牧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古卫视">内蒙古卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古少儿">内蒙古少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古文体娱乐">内蒙古文体娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古新闻综合">内蒙古新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古经济生活">内蒙古经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="内蒙古综合">内蒙古综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="军事评论">军事评论</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="军旅剧场">军旅剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="农业致富">农业致富</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="农林卫视">农林卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰中文">凤凰中文</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰卫视中文台">凤凰卫视中文台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰卫视资讯台">凤凰卫视资讯台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰卫视香港台">凤凰卫视香港台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰资讯">凤凰资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="凤凰香港">凤凰香港</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="力量影院">力量影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="动作电影">动作电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="动漫秀场">动漫秀场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="动物星球">动物星球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="劲爆体育">劲爆体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京体育休闲">北京体育休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京卫视">北京卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京国际">北京国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京国际频道">北京国际频道</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京影视">北京影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京文艺">北京文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京新闻">北京新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京淘BABY">北京淘BABY</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京淘剧场">北京淘剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京淘娱乐">北京淘娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京淘电影">北京淘电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京生活">北京生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京纪实">北京纪实</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京纪实科教">北京纪实科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北京财经">北京财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北海公共">北海公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北海新闻综合">北海新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="北海经济科教">北海经济科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="千禧经典台">千禧经典台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="半岛英语">半岛英语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="华视">华视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="华语剧台">华语剧台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京信息">南京信息</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京十八">南京十八</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京十八生活">南京十八生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京少儿">南京少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京影视">南京影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京教科">南京教科</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京教育科技">南京教育科技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京文旅纪录">南京文旅纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京新闻综合">南京新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南京电视台">南京电视台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南充科教">南充科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南充综合">南充综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南方卫视">南方卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南方少儿">南方少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南方影视">南方影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南方经济">南方经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南方综艺">南方综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南昌公共">南昌公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南昌新闻综合">南昌新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南昌资讯">南昌资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南昌都市">南昌都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="南通新闻综合">南通新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="卡酷动画">卡酷动画</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="卡酷少儿">卡酷少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="卫生健康">卫生健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门一套">厦门一套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门三套">厦门三套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门二套">厦门二套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门卫视">厦门卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门海峡">厦门海峡</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门移动">厦门移动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="厦门综合">厦门综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="发现之旅">发现之旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="古装剧场">古装剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="台州公共">台州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="台州城市生活">台州城市生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="台州文化生活">台州文化生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="台州新闻综合">台州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="台视">台视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林公共新闻">吉林公共新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林卫视">吉林卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林市公共">吉林市公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林市新闻">吉林市新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林市科教">吉林市科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林乡村">吉林乡村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林影视">吉林影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林生活">吉林生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林综艺文化">吉林综艺文化</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉林都市">吉林都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉视乡村">吉视乡村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉视影视">吉视影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉视生活">吉视生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吉视都市">吉视都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="吴江新闻综合">吴江新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="呼和浩特影视">呼和浩特影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="呼和浩特综合">呼和浩特综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="呼和浩特都市">呼和浩特都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="咪咕综合体育">咪咕综合体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="咪咕足球">咪咕足球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="哈哈炫动">哈哈炫动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="哒啵电竞">哒啵电竞</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="哒啵赛事">哒啵赛事</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="嘉佳卡通">嘉佳卡通</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川卫视">四川卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川妇女儿童">四川妇女儿童</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川乡村">四川乡村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川影视文艺">四川影视文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川文化旅游">四川文化旅游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川新闻">四川新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川科教">四川科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四川经济">四川经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="四海钓鱼">四海钓鱼</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="国学">国学</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="国家地理高清">国家地理高清</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="外汇理财">外汇理财</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大庆新闻综合">大庆新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大湾区卫视">大湾区卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大湾区卫视海外版">大湾区卫视海外版</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大连文体">大连文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大连新闻综合">大连新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="大连生活">大连生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天元围棋">天元围棋</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天映CM+">天映CM+</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天映印度尼西亚">天映印度尼西亚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天映新加坡">天映新加坡</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天映经典">天映经典</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天映马来西亚">天映马来西亚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津体育">天津体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津卫视">天津卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津少儿">天津少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津影视">天津影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津教育">天津教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津文艺">天津文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津新闻">天津新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天津都市">天津都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="天龙八部集">天龙八部集</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原影视">太原影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原教育">太原教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原文体">太原文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原新闻综合">太原新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原百姓">太原百姓</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="太原社教法制">太原社教法制</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="央广健康">央广健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="央视台球">央视台球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="央视文化精品">央视文化精品</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="女性时尚">女性时尚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏公共">宁夏公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏卫视">宁夏卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏少儿">宁夏少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏教育">宁夏教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏文旅">宁夏文旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宁夏经济">宁夏经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安多卫视">安多卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽公共">安徽公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽农业科教">安徽农业科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽卫视">安徽卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽国际">安徽国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽影视">安徽影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽科教">安徽科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽经济生活">安徽经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽经视">安徽经视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽综艺">安徽综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="安徽综艺体育">安徽综艺体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宜宾新闻综合">宜宾新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="宜春新闻综合">宜春新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="客家生活">客家生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="家庭剧场">家庭剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="少儿动漫">少儿动漫</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东体育">山东体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东体育休闲">山东体育休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东公共">山东公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东农科">山东农科</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东卫视">山东卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东少儿">山东少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东影视">山东影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东教育">山东教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东教育卫视">山东教育卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东文旅">山东文旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东新闻">山东新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东生活">山东生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东综艺">山东综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山东齐鲁">山东齐鲁</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山西卫视">山西卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山西影视">山西影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山西文体生活">山西文体生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山西社会与法治">山西社会与法治</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="山西经济与科技">山西经济与科技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="岭南戏曲">岭南戏曲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="峨嵋电影">峨嵋电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="峨眉电影">峨眉电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="崇左综合">崇左综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="常州公共">常州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="常州新闻">常州新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="常州生活">常州生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="常州综合">常州综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="常州都市">常州都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="幼儿教育">幼儿教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东体育">广东体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东公共">广东公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东卫视">广东卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东国际">广东国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东少儿">广东少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东影视">广东影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东新闻">广东新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东民生">广东民生</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东珠江">广东珠江</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东移动">广东移动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东经济科教">广东经济科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广东综艺">广东综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广元公共">广元公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广元新闻综合">广元新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广州影视">广州影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广州新闻">广州新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广州法治">广州法治</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广州竞赛">广州竞赛</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广州综合台">广州综合台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西卫视">广西卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西国际">广西国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西影视">广西影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西新闻">广西新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西综艺旅游">广西综艺旅游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="广西都市">广西都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="康巴卫视">康巴卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="延边1台">延边1台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="延边2台">延边2台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="延边卫视">延边卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="开封综合-开封新闻综合-开封新闻综合-河南开封综合-开封1新闻综合">开封综合-开封新闻综合-开封新闻综合-河南开封综合-开封1新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="弈坛春秋">弈坛春秋</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="徐州文艺影视">徐州文艺影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="徐州新闻综合">徐州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="徐州经济生活">徐州经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="快乐垂钓">快乐垂钓</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="怀旧剧场">怀旧剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="怡伴健康">怡伴健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="惊悚悬疑">惊悚悬疑</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都公共">成都公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都少儿">成都少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都影视文艺">成都影视文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都新闻综合">成都新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都经济资讯">成都经济资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成都都市生活">成都都市生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="成龙作品集">成龙作品集</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="揭阳生活">揭阳生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="揭阳综合">揭阳综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="攀枝花新闻综合">攀枝花新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="收藏天下">收藏天下</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="文物宝库">文物宝库</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新余公共">新余公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新余新闻综合">新余新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新动漫">新动漫</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新片放映厅">新片放映厅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆体育健康">新疆体育健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆卫视">新疆卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆少儿">新疆少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆汉语影视">新疆汉语影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆汉语经济">新疆汉语经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新疆汉语综艺">新疆汉语综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="新视觉">新视觉</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="旅游卫视">旅游卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无线新闻">无线新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无锡新闻综合">无锡新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无锡电视娱乐">无锡电视娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无锡电视生活">无锡电视生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无锡电视经济">无锡电视经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="无锡都市资讯">无锡都市资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="日照新闻综合">日照新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="日照科教">日照科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="早期教育">早期教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="时代出行">时代出行</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="时代家居">时代家居</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="时代风尚">时代风尚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="明星大片">明星大片</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="明珠台">明珠台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="星光影院">星光影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="星空卫视">星空卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="星空购物">星空购物</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="曼联电视">曼联电视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="来宾综合">来宾综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州导视">杭州导视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州影视">杭州影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州房产">杭州房产</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州文化">杭州文化</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州生活">杭州生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州综合">杭州综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州西湖明珠">杭州西湖明珠</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="杭州青少体育">杭州青少体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="松原综合">松原综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="柳州公共">柳州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="柳州新闻综合">柳州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="柳州科教">柳州科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="梅州-1">梅州-1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="梨园">梨园</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="欢乐剧场">欢乐剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="欢笑剧场">欢笑剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="欧美影院">欧美影院</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="歌手2024">歌手2024</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武术世界">武术世界</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉外语">武汉外语</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉少儿">武汉少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉教育">武汉教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉文体">武汉文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉新闻综合">武汉新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉电视剧">武汉电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉科技生活">武汉科技生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉科教生活">武汉科教生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="武汉经济">武汉经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="民视">民视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="求索动物">求索动物</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="求索生活">求索生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="求索科学">求索科学</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="求索纪录">求索纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="求索记录">求索记录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕头文旅体育">汕头文旅体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕头新闻综合">汕头新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕头经济生活">汕头经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕头综合">汕头综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕尾文化生活">汕尾文化生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汕尾新闻综合">汕尾新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏休闲体育">江苏休闲体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏优漫卡通">江苏优漫卡通</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏体育休闲">江苏体育休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏卫视">江苏卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏国际">江苏国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏城市">江苏城市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏影视">江苏影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏教育">江苏教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏教育电视台">江苏教育电视台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏新闻">江苏新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江苏综艺">江苏综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西公共农业">江西公共农业</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西卫视">江西卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西少儿">江西少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西影视旅游">江西影视旅游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西新闻">江西新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西移动">江西移动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西经济生活">江西经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江西都市">江西都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江门侨乡生活">江门侨乡生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="江门综合">江门综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="汽摩">汽摩</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="沈阳新闻">沈阳新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北农民">河北农民</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北卫视">河北卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北少儿科教">河北少儿科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北影视剧">河北影视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北文旅公共">河北文旅公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北经济">河北经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河北都市">河北都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南公共">河南公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南卫视">河南卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南乡村">河南乡村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南新农村">河南新农村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南新闻">河南新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南梨园">河南梨园</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南民生">河南民生</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南法治">河南法治</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南电视剧">河南电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河南都市">河南都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="河源公共">河源公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="法治天地">法治天地</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="泰州一套">泰州一套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="泰州三套">泰州三套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="泸州新闻综合">泸州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="济南综合">济南综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="济南鲁中">济南鲁中</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江NEWS">浙江NEWS</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江公共新闻">浙江公共新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江卫视">浙江卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江国际">浙江国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江少儿">浙江少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江教科影视">浙江教科影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江教育">浙江教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江数码时代">浙江数码时代</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江新闻">浙江新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江民生休闲">浙江民生休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江经济生活">浙江经济生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江经视">浙江经视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="浙江钱江都市">浙江钱江都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南公共">海南公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南卫视">海南卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南少儿">海南少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南文旅">海南文旅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南新闻">海南新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海南自贸">海南自贸</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="海峡卫视">海峡卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="淮南新闻综合">淮南新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳体育健康">深圳体育健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳卫视">深圳卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳国际">深圳国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳少儿">深圳少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳电视剧">深圳电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳移动">深圳移动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳财经">深圳财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳财经生活">深圳财经生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深圳都市">深圳都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="深视体育健康">深视体育健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="清远公共">清远公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="清远新闻综合">清远新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="游戏风云">游戏风云</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北公共·新闻">湖北公共·新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北公共新闻">湖北公共新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北卫视">湖北卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北垄上">湖北垄上</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北影视">湖北影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北教育">湖北教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北生活">湖北生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北经济">湖北经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北经视">湖北经视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖北综合">湖北综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南卫视">湖南卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南卫视国际">湖南卫视国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南国际">湖南国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南娱乐">湖南娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南教育">湖南教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南爱晚">湖南爱晚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南电影">湖南电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南电视剧">湖南电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南经视">湖南经视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湖南都市">湖南都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湛江公共">湛江公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="湛江综合">湛江综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="滨州民生">滨州民生</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="滨州综合">滨州综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="漳州新闻">漳州新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="潮妈辣婆">潮妈辣婆</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="潮安综合">潮安综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="潮州民生">潮州民生</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="潮州综合">潮州综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澜湄国际">澜湄国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳亚卫视">澳亚卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视体育">澳视体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视卫星">澳视卫星</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视澳门">澳视澳门</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视综艺">澳视综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视葡文">澳视葡文</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="澳视资讯">澳视资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="炫舞未来">炫舞未来</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="热播精选">热播精选</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="爱大剧">爱大剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="爱情喜剧">爱情喜剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="爱看导视">爱看导视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="玉林公共">玉林公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="玉林新闻综合">玉林新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="环球奇观">环球奇观</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="环球旅游">环球旅游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="环球经典">环球经典</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="现代女性">现代女性</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="现代教育">现代教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="珠海-1">珠海-1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="珠海-2">珠海-2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="珠海新闻">珠海新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="珠海生活">珠海生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃公共">甘肃公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃公共应急">甘肃公共应急</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃卫视">甘肃卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃少儿">甘肃少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃文化影视">甘肃文化影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃科教">甘肃科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="甘肃经济">甘肃经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="生态环境">生态环境</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="生活时尚">生活时尚</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="电视指南">电视指南</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="电竞天堂">电竞天堂</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="百姓健康">百姓健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="百色综合">百色综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="眉山综合">眉山综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩中原">睛彩中原</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩广场舞">睛彩广场舞</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩竞技">睛彩竞技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩篮球">睛彩篮球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩羽毛球">睛彩羽毛球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="睛彩青少">睛彩青少</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="石家庄娱乐">石家庄娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="石家庄新闻综合">石家庄新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="石家庄生活">石家庄生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="石家庄都市">石家庄都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福州1-新闻">福州1-新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福州2套-影视">福州2套-影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福州3-生活">福州3-生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建体育">福建体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建公共">福建公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建少儿">福建少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建教育">福建教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建文体">福建文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建新闻">福建新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建旅游">福建旅游</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建电视剧">福建电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建经济">福建经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="福建综合">福建综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="移动戏曲">移动戏曲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="第一剧场">第一剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="第一财经">第一财经</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="篮球">篮球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精品体育">精品体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精品剧场">精品剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精品大剧">精品大剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精品纪录">精品纪录</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精品萌宠">精品萌宠</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="精彩影视">精彩影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="红色轮播">红色轮播</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纪实科教">纪实科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来体育台">纬来体育台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来戏剧台">纬来戏剧台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来日本台">纬来日本台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来电影台">纬来电影台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来精彩台">纬来精彩台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来综合台">纬来综合台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纬来音乐台">纬来音乐台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="纯享4K">纯享4K</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="绍兴公共">绍兴公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="绍兴文化影视">绍兴文化影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="绍兴新闻综合">绍兴新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="经济科教">经济科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="绵阳影视科技">绵阳影视科技</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="绵阳新闻综合">绵阳新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="综合体育">综合体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="美亚电影">美亚电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="翡翠台">翡翠台</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="老故事">老故事</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="肇庆新闻">肇庆新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="肇庆生活服务">肇庆生活服务</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="自贡公共">自贡公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="自贡综合">自贡综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="苏州文化生活">苏州文化生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="苏州文化生活-苏州新闻综合-苏州生活资讯-苏州社会经济">苏州文化生活-苏州新闻综合-苏州生活资讯-苏州社会经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="苏州新闻综合">苏州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="苏州生活资讯">苏州生活资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="苏州社会经济">苏州社会经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="茂名公共">茂名公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="茂名综合">茂名综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="茶">茶</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="莆田一套">莆田一套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="莆田二套">莆田二套</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="蒙语卫视">蒙语卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="藏语卫视">藏语卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西宁生活">西宁生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西宁综合">西宁综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安丝路">西安丝路</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安商务资讯">西安商务资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安商务资迅">西安商务资迅</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安影视">西安影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安新闻综合">西安新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安移动电视">西安移动电视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西安都市">西安都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西湖明珠">西湖明珠</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西藏卫视">西藏卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西藏影视文化">西藏影视文化</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="西藏藏语卫视">西藏藏语卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="证券资讯">证券资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="象视界">象视界</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="财富天下">财富天下</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州公共">贵州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州卫视">贵州卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州大众生活">贵州大众生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州乡村生态">贵州乡村生态</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州影视文艺">贵州影视文艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州科教">贵州科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵州科教健康">贵州科教健康</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵阳生活">贵阳生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="贵阳综合">贵阳综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="赣州公共">赣州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="赣州教育">赣州教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="赣州新闻综合">赣州新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="超级体育">超级体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="超级电影">超级电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="超级电视剧">超级电视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="超级综艺">超级综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="车迷">车迷</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁体育">辽宁体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁体育休闲">辽宁体育休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁公共">辽宁公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁北方">辽宁北方</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁卫视">辽宁卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁影视剧">辽宁影视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁教育青少">辽宁教育青少</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁生活">辽宁生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁经济">辽宁经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁都市">辽宁都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="辽宁青少">辽宁青少</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="追剧少女">追剧少女</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="遂宁公共">遂宁公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="遂宁综合">遂宁综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州商都">郑州商都</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州妇女">郑州妇女</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州戏曲">郑州戏曲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州文体">郑州文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州新闻">郑州新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="郑州生活">郑州生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="都市剧场">都市剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重广融媒">重广融媒</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆卫视">重庆卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆国际">重庆国际</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆娱乐">重庆娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆少儿">重庆少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆影视">重庆影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆影视剧">重庆影视剧</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆文体娱乐">重庆文体娱乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆新农村">重庆新农村</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆新闻">重庆新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆时尚生活">重庆时尚生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆生活资讯">重庆生活资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆社会与法">重庆社会与法</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆科教">重庆科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆移动">重庆移动</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆红叶">重庆红叶</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重庆红岩文化">重庆红岩文化</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="重温经典">重温经典</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="金华新闻">金华新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="金牌综艺">金牌综艺</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="金色学堂">金色学堂</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="金鹰卡通">金鹰卡通</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="金鹰纪实">金鹰纪实</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="钦州公共">钦州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="钦州综合">钦州综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="钱江">钱江</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="钱江都市">钱江都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="银川公共">银川公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="银川文体">银川文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="银川生活">银川生活</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="锦州公共">锦州公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="锦州新闻">锦州新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="锦州都市">锦州都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长春市民">长春市民</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长春文旅体育">长春文旅体育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长春汽车">长春汽车</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长春经济">长春经济</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长春综合">长春综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="长沙政法">长沙政法</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="防城港公共">防城港公共</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="防城港新闻综合">防城港新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西体育休闲">陕西体育休闲</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西农林卫视">陕西农林卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西卫视">陕西卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西影视">陕西影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西新闻资讯">陕西新闻资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西秦腔">陕西秦腔</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西都市青春">陕西都市青春</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="陕西银龄">陕西银龄</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv1">青岛TV1</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv2">青岛TV2</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv3">青岛TV3</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv4">青岛TV4</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv5">青岛TV5</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛tv6">青岛TV6</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛影视">青岛影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛教育">青岛教育</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛新闻综合">青岛新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛生活服务">青岛生活服务</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛财经资讯">青岛财经资讯</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青岛都市">青岛都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青年学苑">青年学苑</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青海卫视">青海卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青海经视">青海经视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青海综合">青海综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="青海都市">青海都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="鞍山新闻综合">鞍山新闻综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="韶关新闻">韶关新闻</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="风云剧场">风云剧场</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="风云足球">风云足球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="风云音乐">风云音乐</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="高尔夫网球">高尔夫网球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="高清大片">高清大片</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="魅力潇湘">魅力潇湘</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="魅力足球">魅力足球</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黄河卫视">黄河卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑莓动画">黑莓动画</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑莓电影">黑莓电影</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江农业科教">黑龙江农业科教</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江卫视">黑龙江卫视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江少儿">黑龙江少儿</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江影视">黑龙江影视</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江文体">黑龙江文体</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江新闻法制">黑龙江新闻法制</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江新闻法治">黑龙江新闻法治</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="黑龙江都市">黑龙江都市</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="龙岩综合">龙岩综合</channel>
|
||||
<channel site="epg.112114.xyz" lang="zh" xmltv_id="" site_id="龙祥时代">龙祥时代</channel>
|
||||
</channels>
|
45
sites/epg.112114.xyz/epg.112114.xyz.config.js
Normal file
45
sites/epg.112114.xyz/epg.112114.xyz.config.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
const axios = require('axios')
|
||||
const parser = require('epg-parser')
|
||||
|
||||
module.exports = {
|
||||
site: 'epg.112114.xyz',
|
||||
days: 1,
|
||||
url: 'https://epg.112114.xyz/pp.xml',
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 24 * 60 * 60 * 1000 // 1 day
|
||||
}
|
||||
},
|
||||
parser: function ({ content, channel, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel, date)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.title?.[0]?.value,
|
||||
start: item.start,
|
||||
stop: item.stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const data = await axios
|
||||
.get('https://epg.112114.xyz/pp.xml')
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
const { channels } = parser.parse(data)
|
||||
|
||||
return channels.map(channel => ({
|
||||
lang: 'zh',
|
||||
site_id: channel.id,
|
||||
name: channel.displayName[0].value
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
function parseItems(content, channel, date) {
|
||||
const { programs } = parser.parse(content)
|
||||
|
||||
return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day'))
|
||||
}
|
42
sites/epg.112114.xyz/epg.112114.xyz.test.js
Normal file
42
sites/epg.112114.xyz/epg.112114.xyz.test.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
const { parser, url } = require('./epg.112114.xyz.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
const date = dayjs.utc('2025-01-11', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = { site_id: 'BTV文艺', xmltv_id: 'BRTVArtsChannel.cn', lang: 'zh' }
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url).toBe('https://epg.112114.xyz/pp.xml')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml'))
|
||||
const results = parser({ date, content, channel })
|
||||
|
||||
expect(results.length).toBe(28)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-11T00:07:00.000Z',
|
||||
stop: '2025-01-11T00:24:00.000Z',
|
||||
title: '每日文艺播报'
|
||||
})
|
||||
expect(results[27]).toMatchObject({
|
||||
start: '2025-01-11T15:16:00.000Z',
|
||||
stop: '2025-01-11T15:59:00.000Z',
|
||||
title: '笑动剧场'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: ''
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
21
sites/epg.112114.xyz/readme.md
Normal file
21
sites/epg.112114.xyz/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# epg.112114.xyz
|
||||
|
||||
https://epg.112114.xyz/pp.xml
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=epg.112114.xyz
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/epg.112114.xyz/epg.112114.xyz.config.js --output=./sites/epg.112114.xyz/epg.112114.xyz.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- epg.112114.xyz
|
||||
```
|
BIN
sites/epg.iptvx.one/__data__/content.xml.gz
Normal file
BIN
sites/epg.iptvx.one/__data__/content.xml.gz
Normal file
Binary file not shown.
2865
sites/epg.iptvx.one/epg.iptvx.one.channels.xml
Normal file
2865
sites/epg.iptvx.one/epg.iptvx.one.channels.xml
Normal file
File diff suppressed because it is too large
Load diff
64
sites/epg.iptvx.one/epg.iptvx.one.config.js
Normal file
64
sites/epg.iptvx.one/epg.iptvx.one.config.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
const axios = require('axios')
|
||||
const iconv = require('iconv-lite')
|
||||
const parser = require('epg-parser')
|
||||
const { ungzip } = require('pako')
|
||||
|
||||
let cachedContent
|
||||
|
||||
module.exports = {
|
||||
site: 'epg.iptvx.one',
|
||||
days: 2,
|
||||
url: 'https://iptvx.one/epg/epg_noarch.xml.gz',
|
||||
request: {
|
||||
maxContentLength: 500000000, // 500 MB
|
||||
cache: {
|
||||
ttl: 24 * 60 * 60 * 1000 // 1 day
|
||||
}
|
||||
},
|
||||
parser: function ({ buffer, channel, date, cached }) {
|
||||
if (!cached) cachedContent = undefined
|
||||
|
||||
let programs = []
|
||||
const items = parseItems(buffer, channel, date)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.title?.[0]?.value,
|
||||
description: item.desc?.[0]?.value,
|
||||
start: item.start,
|
||||
stop: item.stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const data = await axios
|
||||
.get('https://epg.iptvx.one/api/channels.json')
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
return data.channels.map(channel => {
|
||||
const [name] = channel.chan_names.split(' • ')
|
||||
|
||||
return {
|
||||
lang: 'ru',
|
||||
site_id: channel.chan_id,
|
||||
name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseItems(buffer, channel, date) {
|
||||
if (!buffer) return []
|
||||
|
||||
if (!cachedContent) {
|
||||
const content = ungzip(buffer)
|
||||
const encoded = iconv.decode(content, 'utf8')
|
||||
cachedContent = parser.parse(encoded)
|
||||
}
|
||||
|
||||
const { programs } = cachedContent
|
||||
|
||||
return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day'))
|
||||
}
|
46
sites/epg.iptvx.one/epg.iptvx.one.test.js
Normal file
46
sites/epg.iptvx.one/epg.iptvx.one.test.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
const { parser, url } = require('./epg.iptvx.one.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
const date = dayjs.utc('2025-01-13', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = { site_id: '12-omsk', xmltv_id: 'Channel12.ru' }
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url).toBe('https://iptvx.one/epg/epg_noarch.xml.gz')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const buffer = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml.gz'))
|
||||
const results = parser({ date, buffer, channel })
|
||||
|
||||
expect(results.length).toBe(29)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-13T00:00:00.000Z',
|
||||
stop: '2025-01-13T00:55:00.000Z',
|
||||
title: 'Акценты недели',
|
||||
description:
|
||||
'Программа расскажет зрителям о том, как развивались самые яркие события недели, поможет расставить акценты над самыми обсуждаемыми новостями. Россия, ток-шоу'
|
||||
})
|
||||
expect(results[28]).toMatchObject({
|
||||
start: '2025-01-13T22:15:00.000Z',
|
||||
stop: '2025-01-14T00:00:00.000Z',
|
||||
title: 'д/с Необыкновенные люди',
|
||||
description:
|
||||
'Герои цикла – врачи, спортсмены, представители творческих профессий, волонтеры и многие-многие другие. Их деятельность связана с жизнью особенных людей. Россия, док. сериал'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
buffer: ''
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
35
sites/epg.iptvx.one/readme.md
Normal file
35
sites/epg.iptvx.one/readme.md
Normal file
|
@ -0,0 +1,35 @@
|
|||
# epg.iptvx.one
|
||||
|
||||
https://epg.iptvx.one/
|
||||
|
||||
### Download the guide
|
||||
|
||||
Windows (Command Prompt):
|
||||
|
||||
```sh
|
||||
SET "NODE_OPTIONS=--max-old-space-size=5000" && npm run grab --- --site=epg.iptvx.one
|
||||
```
|
||||
|
||||
Windows (PowerShell):
|
||||
|
||||
```sh
|
||||
$env:NODE_OPTIONS="--max-old-space-size=5000"; npm run grab --- --site=epg.iptvx.one
|
||||
```
|
||||
|
||||
Linux and macOS:
|
||||
|
||||
```sh
|
||||
NODE_OPTIONS=--max-old-space-size=5000 npm run grab --- --site=epg.iptvx.one
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/epg.iptvx.one/epg.iptvx.one.config.js --output=./sites/epg.iptvx.one/epg.iptvx.one.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- epg.iptvx.one
|
||||
```
|
|
@ -33,9 +33,9 @@
|
|||
<channel site="firstmedia.com" lang="en" xmltv_id="CelestialMoviesIndonesiaHD.id" site_id="311">Celestial Movies HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="CGTN.cn" site_id="210">CGTN</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="ChampionsTV1.id" site_id="141">Champions TV 1</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="ChampionsTV1HD.id" site_id="321">Champions TV 1 HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="" site_id="321">Champions TV 1 HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="ChampionsTV2.id" site_id="142">Champions TV 2</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="ChampionsTV2HD.id" site_id="322">Champions TV 2 HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="" site_id="322">Champions TV 2 HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="CinemaxAsia.sg" site_id="290">Cinemax</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="CinemaxAsiaHD.sg" site_id="310">Cinemax HD</channel>
|
||||
<channel site="firstmedia.com" lang="en" xmltv_id="CNA.sg" site_id="242">Channel News Asia</channel>
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
<channel site="flixed.io" lang="en" xmltv_id="CartoonNetworkEast.us" site_id="12131">Cartoon Network (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CartoonNetworkWest.us" site_id="18151">Cartoon Network (West)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CBSEast.us" site_id="10098">CBS (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CBSNews.us" site_id="104846">CBS News Streaming</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="" site_id="104846">CBS News Streaming</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CBSSportsNetworkUSA.us" site_id="16365">CBS Sports Network</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CBSSportsNetworkUSA.us" site_id="59250">CBS Sports Network HD</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="CBSWest.us" site_id="29073">CBS (West)</channel>
|
||||
|
@ -234,7 +234,7 @@
|
|||
<channel site="flixed.io" lang="en" xmltv_id="HBOComedyEast.us" site_id="59839">HBO Comedy HD</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOEast.us" site_id="10240">HBO (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOFamilyEast.us" site_id="16585">HBO Family (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOFamilyWest.us" site_id="16619">HBO Family (West)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="" site_id="16619">HBO Family (West)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOSignatureEast.us" site_id="10243">HBO Signature (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOSignatureWest.us" site_id="16576">HBO Signature (West)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="HBOWest.us" site_id="10244">HBO (West)</channel>
|
||||
|
@ -279,7 +279,7 @@
|
|||
<channel site="flixed.io" lang="en" xmltv_id="MLBStrikeZone.us" site_id="75219">MLB Network Strike Zone</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="MoreMaxEast.us" site_id="10121">MoreMAX (East)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="MoreMaxWest.us" site_id="16620">MoreMAX (West)</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="Motortrend.us" site_id="31046">MOTORTREND HD</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="" site_id="31046">MOTORTREND HD</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="MSG.us" site_id="80169">MSG National</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="MSGPlus.us" site_id="11105">MSG Plus Zone 1</channel>
|
||||
<channel site="flixed.io" lang="en" xmltv_id="MSGPlus2.us" site_id="65492">MSG Plus HD Zone 2</channel>
|
||||
|
|
1
sites/freeview.co.uk/__data__/content.json
Normal file
1
sites/freeview.co.uk/__data__/content.json
Normal file
File diff suppressed because one or more lines are too long
168
sites/freeview.co.uk/freeview.co.uk.channels.xml
Normal file
168
sites/freeview.co.uk/freeview.co.uk.channels.xml
Normal file
|
@ -0,0 +1,168 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#12952">YAAAS!</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#12960">Pop Player</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#13144">MBC</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#14448">TRUE CRIME</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#14456">TRUE CRIME XTRA</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#15016">Sonlife</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#15064">On Demand 365</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#15448">Channelbox</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#15480">UK RADIO PORTAL</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#15584">GREAT! mystery</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16164">CNA</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16170">GIGS</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16176">EXTREME CHANNEL</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16188">Trailblazer</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16194">Odyssey TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16200">Ketchup TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16216">Ketchup Too</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16224">Alaraby Network</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16230">wedotv movies</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16240">ROK</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16264">3ABN</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16284">Al Jazeera Arabic</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16298">Real Crime</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16310">Shots!</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16322">NHK WORLD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16328">Newsmax</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16346">Amazing Facts</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16352">Moochi</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16370">FRANCE 24</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16376">Nosey</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16394">Shop On TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16400">Purpose Media</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#16406">Talk</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22080">Sky News</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22592">talkSPORT</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22624">RNIB Connect</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22656">Heart</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22688">Capital</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22848">Classic FM</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22880">LBC</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#22912">Trans World Radio</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#23152">That's TV 2</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#23184">SonLife</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#23904">That's Dance</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#24448">Gems TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#26368">Smooth Radio</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#27424">POP UP</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#27744">Rewind TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#27808">Together TV IP</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#28032">That's Melody</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#28160">Premier Radio</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#28320">GREAT! movies extra</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#28352">GREAT! player</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#28384">GREAT! romance mix</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#33664">New Media TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#34048">Global Arabic +</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#34112">LEGEND XTRA</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#4416">BBC Red Button</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5632">BBC R5L</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5696">BBC 5SX</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5760">BBC 6 Music</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5824">BBC Radio 4 Ex</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5888">BBC R1X</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#5952">BBC Asian Net.</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6016">BBC World Sv.</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6148">BBC Radio London</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6157">BBC Three Counties</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6275">BBC Berkshire</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6279">BBC Essex</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6284">BBC Surrey</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6720">BBC Radio 1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6784">BBC Radio 2</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6848">BBC Radio 3</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#6912">BBC Radio 4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#7168">BBC RB 1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="" site_id="64257#8700">That's TV 3</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="4seven.uk" site_id="64257#22528">4seven</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="5Action.uk" site_id="64257#16112">5ACTION</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="5SELECT.uk" site_id="64257#20256">5SELECT</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="5STAR.uk" site_id="64257#12928">5STAR</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="5USA.uk" site_id="64257#12992">5USA</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Alarabiya.ae" site_id="64257#16304">AL ARABIYA</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="64257#16278">Al Jazeera English</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="AsharqNews.sa" site_id="64257#16296">ASHARQ NEWS</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCFour.uk" site_id="64257#4544">BBC FOUR</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCFourHD.uk" site_id="64257#18048">BBC FOUR HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCNews.uk" site_id="64257#4352">BBC NEWS</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCOneLondon.uk" site_id="64257#4164">BBC ONE Lon</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCOneLondonHD.uk" site_id="64257#17536">BBC ONE Lon HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCParliament.uk" site_id="64257#4736">BBC Parliament</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCThree.uk" site_id="64257#4288">BBC THREE</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCThreeHD.uk" site_id="64257#17920">BBC THREE HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCTwo.uk" site_id="64257#4287">BBC TWO</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BBCTwoHD.uk" site_id="64257#17472">BBC TWO HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Blaze.uk" site_id="64257#14384">Blaze</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="BlazePlus1.uk" site_id="64257#14388">Blaze+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="CBBC.uk" site_id="64257#4608">CBBC</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="CBBCHD.uk" site_id="64257#18112">CBBC HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="CBeebies.uk" site_id="64257#4672">CBeebies</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="CBeebiesHD.uk" site_id="64257#18176">CBeebies HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Challenge.uk" site_id="64257#22226">Challenge</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel4.uk" site_id="64257#8384">Channel 4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel4HD.uk" site_id="64257#17664">Channel 4 HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel4Plus1.uk" site_id="64257#8452">Channel 4+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel5.uk" site_id="64257#8500">Channel 5</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel5HD.uk" site_id="64257#17728">Channel 5 HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Channel5Plus1.uk" site_id="64257#13024">Channel 5+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="DMAX.uk" site_id="64257#27680">DMAX</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="E4.uk" site_id="64257#8448">E4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="E4Extra.uk" site_id="64257#22368">E4 Extra</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="E4Plus1.uk" site_id="64257#8458">E4+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Film4.uk" site_id="64257#8385">Film4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Film4Plus1.uk" site_id="64257#22464">Film4+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="FoodNetwork.uk" site_id="64257#23040">Food Network</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GBNews.uk" site_id="64257#27360">GB News</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GINXEsportsTV.uk" site_id="64257#16182">GINX TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GODTV.uk" site_id="64257#16256">God TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GREATaction.uk" site_id="64257#15576">GREAT! action</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GREATmovies.uk" site_id="64257#27872">GREAT! movies</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GREATromance.uk" site_id="64257#27296">GREAT! romance</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="GREATtv.uk" site_id="64257#27168">GREAT! tv</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="HGTV.uk" site_id="64257#28000">HGTV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="HobbyMaker.uk" site_id="64257#27840">HobbyMaker</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="IdealWorldTV.uk" site_id="64257#25920">Ideal World</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV1.uk" site_id="64257#8261">ITV1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV1HD.uk" site_id="64257#17604">ITV1 HD</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV1Plus1.uk" site_id="64257#8361">ITV1+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV2.uk" site_id="64257#8325">ITV2</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV2Plus1.uk" site_id="64257#15952">ITV2+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV3.uk" site_id="64257#8294">ITV3</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV3Plus1.uk" site_id="64257#16016">ITV3+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV4.uk" site_id="64257#8330">ITV4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITV4Plus1.uk" site_id="64257#15920">ITV4+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITVBe.uk" site_id="64257#8340">ITVBe</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ITVBePlus1.uk" site_id="64257#15864">ITVBe+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="JewelleryMaker.uk" site_id="64257#27200">Jewellery Maker</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Legend.uk" site_id="64257#14480">LEGEND</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="LondonLive.uk" site_id="64257#32842">London Live</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="More4.uk" site_id="64257#8442">More 4</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="PBSAmerica.uk" site_id="64257#27968">PBS America</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Pop.uk" site_id="64257#33280">POP</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Quest.uk" site_id="64257#27328">QUEST</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="QuestPlus1.uk" site_id="64257#23808">QUEST+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="QuestRed.uk" site_id="64257#23744">Quest Red</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="QVC.uk" site_id="64257#13120">QVC</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="QVC2.uk" site_id="64257#14416">QVC2</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="Really.uk" site_id="64257#23712">Really</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="RevelationTV.uk" site_id="64257#16248">Revelation TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="SkyArts.uk" site_id="64257#22144">Sky Arts</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="SkyMix.uk" site_id="64257#22208">Sky Mix</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TalkingPicturesTV.uk" site_id="64257#28224">TalkingPictures TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TBNUK.uk" site_id="64257#20160">TBN UK</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="ThatsTV.uk" site_id="64257#27936">That's TV (UK)</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TinyPop.uk" site_id="64257#33472">Tiny Pop</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TJC.uk" site_id="64257#15592">TJC</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TogetherTV.uk" site_id="64257#16364">Together TV</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="TogetherTVPlus1.uk" site_id="64257#27392">Together TV+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UDave.uk" site_id="64257#22272">U&Dave</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UDaveJaVu.uk" site_id="64257#13008">U&DaveJaVu</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UDrama.uk" site_id="64257#16208">U&Drama</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UDramaPlus1.uk" site_id="64257#22336">U&Drama+1</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UEden.uk" site_id="64257#19968">U&Eden</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UW.uk" site_id="64257#28096">U&W</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="UYesterday.uk" site_id="64257#25792">U&Yesterday</channel>
|
||||
<channel site="freeview.co.uk" lang="en" xmltv_id="WildEarth.uk" site_id="64257#14464">WildEarth</channel>
|
||||
</channels>
|
73
sites/freeview.co.uk/freeview.co.uk.config.js
Normal file
73
sites/freeview.co.uk/freeview.co.uk.config.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const parseDuration = require('parse-duration')
|
||||
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
site: 'freeview.co.uk',
|
||||
days: 2,
|
||||
url({ date, channel }) {
|
||||
const [networkId] = channel.site_id.split('#')
|
||||
const startTimestamp = date.startOf('d').unix()
|
||||
|
||||
return `https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`
|
||||
},
|
||||
parser({ content, channel }) {
|
||||
let programs = []
|
||||
let items = parseItems(content, channel)
|
||||
items.forEach(item => {
|
||||
const start = parseStart(item)
|
||||
const duration = parseDuration(item.duration)
|
||||
const stop = start.add(duration, 'ms')
|
||||
programs.push({
|
||||
title: item.main_title,
|
||||
subtitle: item.secondary_title,
|
||||
image: parseImage(item),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const networkId = '64257' // Great London
|
||||
const startTimestamp = dayjs.utc().startOf('d').unix()
|
||||
const data = await axios
|
||||
.get(`https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
return data.data.programs.map(item => ({
|
||||
lang: 'en',
|
||||
site_id: `${networkId}#${item.service_id}`,
|
||||
name: item.title
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
function parseImage(item) {
|
||||
return item.image_url ? `${item.image_url}?w=800` : null
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return dayjs(item.start_time)
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
try {
|
||||
const data = JSON.parse(content)
|
||||
const programs = data?.data?.programs
|
||||
if (!Array.isArray(programs)) return []
|
||||
const [, channelId] = channel.site_id.split('#')
|
||||
const channelData = programs.find(p => p.service_id === channelId)
|
||||
const channelPrograms = channelData?.events
|
||||
if (!Array.isArray(channelPrograms)) return []
|
||||
|
||||
return channelPrograms
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
55
sites/freeview.co.uk/freeview.co.uk.test.js
Normal file
55
sites/freeview.co.uk/freeview.co.uk.test.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
const { parser, url } = require('./freeview.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('2025-01-16', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '64257#4164',
|
||||
xmltv_id: 'BBCOneLondon.uk'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date, channel })).toBe(
|
||||
'https://www.freeview.co.uk/api/tv-guide?nid=64257&start=1736985600'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||
let results = parser({ content, channel })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(25)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-16T00:00:00.000Z',
|
||||
stop: '2025-01-16T00:45:00.000Z',
|
||||
title: 'The Weakest Link',
|
||||
subtitle: 'Series 4: Episode 7',
|
||||
image: 'https://img.freeviewplay.tv/p0b041486e4378cbf074511098f74e78f?w=800'
|
||||
})
|
||||
expect(results[24]).toMatchObject({
|
||||
start: '2025-01-16T23:40:00.000Z',
|
||||
stop: '2025-01-17T00:10:00.000Z',
|
||||
title: 'Newscast',
|
||||
subtitle: 'Series 5: 16/01/2025',
|
||||
image: 'https://img.freeviewplay.tv/pb43e790fe10fe5ba668caf22224bc312?w=800'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
content: '[]',
|
||||
channel
|
||||
})
|
||||
|
||||
expect(results).toMatchObject([])
|
||||
})
|
21
sites/freeview.co.uk/readme.md
Normal file
21
sites/freeview.co.uk/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# freeview.co.uk
|
||||
|
||||
https://www.freeview.co.uk/tv-guide
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=freeview.co.uk
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/freeview.co.uk/freeview.co.uk.config.js --output=./sites/freeview.co.uk/freeview.co.uk.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- freeview.co.uk
|
||||
```
|
30
sites/galamtv.kz/galamtv.kz.channels.xml
Normal file
30
sites/galamtv.kz/galamtv.kz.channels.xml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Qazaqstan.kz" site_id="636e54cf8a8f73bae8244f41">Qazaqstan</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Khabar.kz" site_id="559d1f1278d72701950089d8">Хабар</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="24KZ.kz" site_id="559d1ec678d72701950089d6">24KZ</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Balapan.kz" site_id="636e55468a8f73bae8244f47">Balapan</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="MunaraTV.kz" site_id="65f2f54aee18d69ad327e734">Munara TV</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="TuranTV.kz" site_id="5c659fb2a46eaa398e8fd690">Turan TV</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Channel7.kz" site_id="559d1ebb78d72701950089d5">Седьмой канал</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="31Kanal.kz" site_id="642cb168aa0f504df48a14ed">31 Канал</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="ElArna.kz" site_id="59f2faa4a12e9e27dc8a5978">Ел Арна</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="AlmatyTV.kz" site_id="559d1dcb78d72701950089d2">Almaty TV</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="JibekJoly.kz" site_id="559d41b978d7270195008a67">Jibek Joly</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Novoetelevidenie.kz" site_id="559d224e78d7270195008a15">Новое Телевидение</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Zhetisu.kz" site_id="571a017c4e2e6750a693cc3b">Жетысу</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="YourTV.kz" site_id="57bb6e6c4e2e6775aedaa771">твоЁтв</channel>
|
||||
<channel site="galamtv.kz" lang="ru" xmltv_id="Mir24.ru" site_id="535f6608ebf8c403a1001bfb">Мир 24</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="HitTV.kz" site_id="559d208e78d72701950089f4">Hit TV</channel>
|
||||
<channel site="galamtv.kz" lang="ru" xmltv_id="ChannelOneEurasia.kz" site_id="559d416078d7270195008a66">Первый канал Евразия</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="AtamekenBusiness.kz" site_id="59f2f908a12e9e27dc8a5977">Atameken Business</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="TDK42.kz" site_id="57bb6e7c4e2e6775aedaa772">ТДК 42</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="KTK.kz" site_id="6050cd449037e65d03dfbfb8">КТК</channel>
|
||||
<channel site="galamtv.kz" lang="ru" xmltv_id="Mir.ru" site_id="559d23a778d7270195008a32">Мир</channel>
|
||||
<channel site="galamtv.kz" lang="tr" xmltv_id="TRTAvaz.tr" site_id="603d11a15c1ee21399b5f01f">TRT Avaz</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="Turkistan.kz" site_id="61cdbf0c493dbd2692772acc">Turkistan</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="AstanaTV.kz" site_id="642cb1e6aa0f504df48a14f8">Astana TV</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="NTK.kz" site_id="642cb25caa0f504df48a1502">НТК</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="CaspianNews.kz" site_id="642cb423aa0f504df48a1514">Caspian News</channel>
|
||||
<channel site="galamtv.kz" lang="kk" xmltv_id="INSPORT.kz" site_id="6675767c0e9f3f6e3ae2c2df">INSPORT</channel>
|
||||
</channels>
|
64
sites/galamtv.kz/galamtv.kz.config.js
Normal file
64
sites/galamtv.kz/galamtv.kz.config.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'galamtv.kz',
|
||||
timezone: 'Asia/Almaty',
|
||||
days: 2,
|
||||
request: {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Referer: 'https://galamtv.kz/',
|
||||
Origin: 'https://galamtv.kz',
|
||||
Accept: '*/*',
|
||||
'Accept-Encoding': 'gzip, deflate, br, zstd'
|
||||
}
|
||||
},
|
||||
url({ channel, date }) {
|
||||
const todayEpoch = date.startOf('day').unix()
|
||||
const nextDayEpoch = date.add(1, 'day').startOf('day').unix()
|
||||
return `https://galam.server-api.lfstrm.tv/channels/${channel.site_id}/programs?period=${todayEpoch}:${nextDayEpoch}`
|
||||
},
|
||||
parser: function ({ content }) {
|
||||
let programs = []
|
||||
const data = JSON.parse(content)
|
||||
const programsData = data.programs || []
|
||||
|
||||
programsData.forEach(program => {
|
||||
const start = dayjs.unix(program.scheduleInfo.start)
|
||||
const stop = dayjs.unix(program.scheduleInfo.end)
|
||||
|
||||
programs.push({
|
||||
title: program.metaInfo.title,
|
||||
description: program.metaInfo.description,
|
||||
image: program.mediaInfo.thumbnails[0].url,
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
try {
|
||||
const response = await axios.get('https://galam.server-api.lfstrm.tv/channels-now')
|
||||
return response.data.channels.map(item => {
|
||||
return {
|
||||
lang: 'kk',
|
||||
site_id: item.channels.id,
|
||||
name: item.channels.info.metaInfo.title
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Error fetching channels:', error)
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
71
sites/galamtv.kz/galamtv.kz.test.js
Normal file
71
sites/galamtv.kz/galamtv.kz.test.js
Normal file
|
@ -0,0 +1,71 @@
|
|||
const { parser, url } = require('./galamtv.kz.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('2025-01-10', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '636e54cf8a8f73bae8244f41',
|
||||
xmltv_id: 'Qazaqstan.kz'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date, channel })).toBe(
|
||||
`https://galam.server-api.lfstrm.tv/channels/${
|
||||
channel.site_id
|
||||
}/programs?period=${date.unix()}:${date.add(1, 'day').unix()}`
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = JSON.stringify({
|
||||
programs: [
|
||||
{
|
||||
metaInfo: {
|
||||
title: 'Гимн',
|
||||
description: 'Государственный гимн Республики Казахстан'
|
||||
},
|
||||
scheduleInfo: {
|
||||
start: 1736470800,
|
||||
end: 1736471100
|
||||
},
|
||||
mediaInfo: {
|
||||
thumbnails: [
|
||||
{
|
||||
url: 'http://galam.server-img.lfstrm.tv:80/image/aHR0cDovL2dhbGFtLmltZy1vcmlnaW5hbHMubGZzdHJtLnR2OjgwL3R2aW1hZ2VzL3RodW1iL2YyNWFmYWY2ZDkzYjU5YjdkMjBiZDNiODhiZjg4NWI0X29yaWcuanBn'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
const result = parser({ content, channel }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2025-01-10T01:00:00.000Z',
|
||||
stop: '2025-01-10T01:05:00.000Z',
|
||||
title: 'Гимн',
|
||||
description: 'Государственный гимн Республики Казахстан',
|
||||
image:
|
||||
'http://galam.server-img.lfstrm.tv:80/image/aHR0cDovL2dhbGFtLmltZy1vcmlnaW5hbHMubGZzdHJtLnR2OjgwL3R2aW1hZ2VzL3RodW1iL2YyNWFmYWY2ZDkzYjU5YjdkMjBiZDNiODhiZjg4NWI0X29yaWcuanBn'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: '{"programs":[]}'
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
21
sites/galamtv.kz/readme.md
Normal file
21
sites/galamtv.kz/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# galamtv.kz
|
||||
|
||||
https://galamtv.kz/channels/now
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=galamtv.kz
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/galamtv.kz/galamtv.kz.config.js --output=./sites/galamtv.kz/galamtv.kz.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- galamtv.kz
|
||||
```
|
|
@ -265,7 +265,7 @@
|
|||
<channel site="gatotv.com" lang="es" xmltv_id="ExcelsiorTV.mx" site_id="excelsior_tv">Excelsior TV</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="ExtraTV42.cr" site_id="extra_tv_42_de_costa_rica">42 de Costa Rica</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="Foro.mx" site_id="foro_tv">Foro TV</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="Fox.es" site_id="fox_espana">Fox España</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="" site_id="fox_espana">Fox España</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="FoxDeportes.us" site_id="fox_deportes">Fox Deportes</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="FoxNewsChannel.us" site_id="fox_news">Fox News</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="FUTV.cr" site_id="futv">FUTV</channel>
|
||||
|
@ -379,7 +379,7 @@
|
|||
<channel site="gatotv.com" lang="es" xmltv_id="Syfy.es" site_id="syfy_espana">Syfy España</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TCM.es" site_id="tcm_espana">TCM España</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TCMPanregional.us" site_id="tcm_panregional">TCM Panregional</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TCTV.ec" site_id="tc_television">TC Televisión</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="" site_id="tc_television">TC Televisión</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TeenNickLatinAmerica.us" site_id="teennick">TeenNick</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="Teleamazonas.ec" site_id="teleamazonas">Teleamazonas</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TeleAntillas.do" site_id="2_de_republica_dominicana_teleantillas">2 de República Dominicana</channel>
|
||||
|
@ -428,7 +428,7 @@
|
|||
<channel site="gatotv.com" lang="es" xmltv_id="Tooncast.us" site_id="tooncast">Tooncast</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="Trece.co" site_id="13_de_colombia">13 de Colombia</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="Trece.py" site_id="13_de_paraguay">13 de Paraguay</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TreceCostaRicaTV.cr" site_id="13_de_costa_rica">13 de Costa Rica</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="" site_id="13_de_costa_rica">13 de Costa Rica</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="truTVLatinAmerica.us" site_id="tru_tv">truTV Lat.</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TSi.hn" site_id="tsi_honduras">Telesistema Informativo (TSI)</channel>
|
||||
<channel site="gatotv.com" lang="es" xmltv_id="TUDN.mx" site_id="tudn_mexico">TUDN México</channel>
|
||||
|
|
1
sites/gigatv.3bbtv.co.th/__data__/content.json
Normal file
1
sites/gigatv.3bbtv.co.th/__data__/content.json
Normal file
File diff suppressed because one or more lines are too long
82
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.channels.xml
Normal file
82
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.channels.xml
Normal file
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="2">NBT</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ThaiPBS.th" site_id="3">ThaiPBS</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ALTV.th" site_id="4">ALTV</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="TV5HD.th" site_id="5">TV5 HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="TSports7.th" site_id="7">T Sports 7</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ThaiParliamentTelevision.th" site_id="10">TPTV</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="TNN16.th" site_id="16">TNN16</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="JKN18.th" site_id="18">JKN 18</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="NationTV.th" site_id="22">Nation TV</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="WorkpointTV.th" site_id="23">Workpoint</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="True4U.th" site_id="24">True4U</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="GMM25.th" site_id="25">GMM 25</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="27">CH8</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="MONO29.th" site_id="29">Mono 29</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="MCOTHD.th" site_id="30">MCOT HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="31">ONE31 HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ThairathTV.th" site_id="32">Thairath TV</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="33">3HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="AmarinTV.th" site_id="34">AmarinTV HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="35">CH7 HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="PPTV.th" site_id="36">PPTV HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="101">3BB Asian</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="103">HBO</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="104">HBO Signature</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="105">HBO Hits</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="106">HBO Family</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="107">Cinemax</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="109">Mono29 Plus</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="110">Warner TV</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="111">Rock Action</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="112">Rock Entertainment</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="Mangorn.th" site_id="121">Mangorn</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="202">MONO 29 Music Station</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="203">RUSH Stories</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="AlureChannel.th" site_id="204">A'lure Channel</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="205">Food Network</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="206">Asian Food Network</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="207">Hunan TV HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="208">Yunnan International</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="210">TLC</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="Khongdee.th" site_id="221">Khongdee</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ThainessTV.th" site_id="222">Thainess</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="301">Cartoon Network</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="302">Cartoonito</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="303">Nickelodeon</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="304">Nick Jr.</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="306">Boomerang (Thai)</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="401">3BB Sports One</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="411">Golf Channel Thailand HD Plus</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="503">Discovery Channel</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="504">Animal Planet</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="505">Discovery Asia</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="Samrujlok.th" site_id="521">Samrujlok</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="MySci.th" site_id="522">MySci</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="523">Animal Show</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="601">BBC News</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="602">CNN INTERNATIONNAL</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="603">Bloomberg</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="604">CGTN</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="605">CCTV 4</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="606">Al Jazeera English HD</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="607">CNA</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="" site_id="608">NHK WORLD-JAPAN</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV1.th" site_id="701">DLTV 1</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV2.th" site_id="702">DLTV 2</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV3.th" site_id="703">DLTV 3</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV4.th" site_id="704">DLTV 4</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV5.th" site_id="705">DLTV 5</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV6.th" site_id="706">DLTV 6</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV7.th" site_id="707">DLTV 7</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV8.th" site_id="708">DLTV 8</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV9.th" site_id="709">DLTV 9</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV10.th" site_id="710">DLTV 10</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV11.th" site_id="711">DLTV 11</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV12.th" site_id="712">DLTV 12</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV13.th" site_id="713">DLTV 13</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV14.th" site_id="714">DLTV 14</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="DLTV15.th" site_id="715">DLTV 15</channel>
|
||||
<channel site="gigatv.3bbtv.co.th" lang="th" xmltv_id="ETV.th" site_id="716">ETV</channel>
|
||||
</channels>
|
65
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.config.js
Normal file
65
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.config.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'gigatv.3bbtv.co.th',
|
||||
days: 1,
|
||||
url({ channel }) {
|
||||
return `https://gigatv.3bbtv.co.th/wp-content/themes/changwattana/epg/${channel.site_id}.json`
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.programName,
|
||||
start: parseTime(item.startTime),
|
||||
stop: parseTime(item.endTime)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const data = await axios
|
||||
.get('https://gigatv.3bbtv.co.th/wp-content/themes/changwattana/epg/channel.json')
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
const channels = []
|
||||
data.forEach(group => {
|
||||
group.channel_list.forEach(channel => {
|
||||
channels.push({
|
||||
lang: 'th',
|
||||
site_id: channel.channel_id,
|
||||
name: channel.channel_name
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
return channels
|
||||
}
|
||||
}
|
||||
|
||||
function parseTime(string) {
|
||||
return dayjs.tz(string, 'YYYY-MM-DD HH:mm:ss', 'Asia/Bangkok')
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
try {
|
||||
let data = JSON.parse(content)
|
||||
if (!Array.isArray(data)) return []
|
||||
data = data.filter(p => date.isSame(parseTime(p.startTime), 'day'))
|
||||
|
||||
return data
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
45
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.test.js
Normal file
45
sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.test.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
const { parser, url } = require('./gigatv.3bbtv.co.th.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('2025-01-12', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '222',
|
||||
xmltv_id: 'ThainessTV.th'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel })).toBe(
|
||||
'https://gigatv.3bbtv.co.th/wp-content/themes/changwattana/epg/222.json'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||
let results = parser({ content, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(32)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2025-01-12T00:00:00.000Z',
|
||||
stop: '2025-01-12T00:30:00.000Z',
|
||||
title: 'THAILAND FORM ABOVE : TAK'
|
||||
})
|
||||
expect(results[31]).toMatchObject({
|
||||
start: '2025-01-12T23:30:00.000Z',
|
||||
stop: '2025-01-13T00:00:00.000Z',
|
||||
title: 'MAESA ELEPHANT CAMP'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
expect(parser({ content: '', date })).toMatchObject([])
|
||||
})
|
21
sites/gigatv.3bbtv.co.th/readme.md
Normal file
21
sites/gigatv.3bbtv.co.th/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# gigatv.3bbtv.co.th
|
||||
|
||||
https://gigatv.3bbtv.co.th/epg
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=gigatv.3bbtv.co.th
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.config.js --output=./sites/gigatv.3bbtv.co.th/gigatv.3bbtv.co.th.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- gigatv.3bbtv.co.th
|
||||
```
|
2978
sites/guiadetv.com/__data__/content.html
Normal file
2978
sites/guiadetv.com/__data__/content.html
Normal file
File diff suppressed because it is too large
Load diff
471
sites/guiadetv.com/__data__/no_content.html
Normal file
471
sites/guiadetv.com/__data__/no_content.html
Normal file
|
@ -0,0 +1,471 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="author" content="Guia de TV - O seu guia de tv completo">
|
||||
<link rel="preconnect" href="https://apis.google.com">
|
||||
<link rel="preconnect" href="https://pagead2.googlesyndication.com">
|
||||
<link rel="preconnect" href="https://www.google-analytics.com">
|
||||
<link rel="preconnect" href="https://www.googletagmanager.com">
|
||||
<title>Estamos com Problemas de Conexão - Guia de TV</title>
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" name="description">
|
||||
<meta content="tv, guia de tv, guia da tv, programção da tv, tv guia" name="keywords">
|
||||
<link href="" rel="canonical">
|
||||
<script>
|
||||
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6(1.0)5.4.3("2-0",1.0);',7,7,'theme|localStorage|data|setAttribute|documentElement|document|if'.split('|'),0,{}))
|
||||
</script>
|
||||
<meta content="#1987C9" name="theme-color">
|
||||
<meta content="yes" name="apple-mobile-web-app-capable">
|
||||
<meta content="#1987C9" name="msapplication-TileColor">
|
||||
<meta content="#1987C9" name="msapplication-navbutton-color">
|
||||
|
||||
<link media="all" type="text/css" rel="stylesheet" href="https://www.guiadetv.com/assets/css/home.css?id=115642e437be337a48a6">
|
||||
<link media="all" type="text/css" rel="stylesheet" href="https://www.guiadetv.com/css/img.css?1.2.2">
|
||||
|
||||
<meta property="og:locale" content="pt_BR" />
|
||||
<link rel="alternate" href="android-app://com.guiadetv">
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" property="og:title">
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" property="og:description">
|
||||
<meta content="https://www.guiadetv.com/assets/img/guiadetv.png" property="og:image">
|
||||
<meta content="500" property="og:image:width">
|
||||
<meta content="500" property="og:image:height">
|
||||
<meta property="og:site_name" content="Guia de TV" />
|
||||
<meta content="article" property="og:type">
|
||||
<meta content="https://www.guiadetv.com" property="og:url">
|
||||
<meta content="pt_BR" property="og:locale">
|
||||
<meta content="https://fb.com/guiadetv" property="article:publisher">
|
||||
|
||||
<meta content="summary_large_image" property="twitter:card">
|
||||
<meta content="@guiadetvbr" property="twitter:site">
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" property="twitter:title">
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" property="twitter:description">
|
||||
<meta content="https://www.guiadetv.com/assets/img/guiadetv.png" property="twitter:image">
|
||||
<meta content="https://www.guiadetv.com" property="twitter:url">
|
||||
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" itemprop="name">
|
||||
<meta content="https://www.guiadetv.com" itemprop="url">
|
||||
<meta content="https://www.guiadetv.com/assets/img/guiadetv.png" itemprop="image">
|
||||
<meta content="Estamos com Problemas de Conexão - Guia de TV" itemprop="description">
|
||||
<meta content="https://www.guiadetv.com" name="application-name">
|
||||
<meta name="copyright" content="Guia de TV" />
|
||||
|
||||
<meta content="noodp" name="googlebot">
|
||||
<meta name="Googlebot-News" content="index, follow">
|
||||
|
||||
<meta content="551672212353377" property="fb:app_id">
|
||||
<meta name="google-site-verification" content="Jw0tC6Y79JP2VFeTuhFJt5kiAZ2lL8whxZlo4F37qtc" />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" rel="stylesheet">
|
||||
<meta content="no-cache, no-store" http-equiv="Cache-Control">
|
||||
<meta content="no-cache, no-store" http-equiv="Pragma">
|
||||
<meta content="Mon, 06 Jan 1990 00:00:01 GMT" http-equiv="expires">
|
||||
<meta content="1" property="fb:aa_id">
|
||||
|
||||
<link rel="shortcut icon" href="https://www.guiadetv.com/assets/icons/favicon.ico" />
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-57x57.png" rel="apple-touch-icon" sizes="57x57">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-60x60.png" rel="apple-touch-icon" sizes="60x60">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-72x72.png" rel="apple-touch-icon" sizes="72x72">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-76x76.png" rel="apple-touch-icon" sizes="76x76">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-114x114.png" rel="apple-touch-icon" sizes="114x114">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-120x120.png" rel="apple-touch-icon" sizes="120x120">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-144x144.png" rel="apple-touch-icon" sizes="144x144">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-152x152.png" rel="apple-touch-icon" sizes="152x152">
|
||||
<link href="https://www.guiadetv.com/assets/icons/apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180">
|
||||
<link href="https://www.guiadetv.com/assets/icons/android-icon-192x192.png" rel="icon" sizes="192x192" type="image/png">
|
||||
<link href="https://www.guiadetv.com/assets/icons/favicon-32x32.png" rel="icon" sizes="32x32" type="image/png">
|
||||
<link href="https://www.guiadetv.com/assets/icons/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png">
|
||||
<link href="https://www.guiadetv.com/assets/icons/favicon-16x16.png" rel="icon" sizes="16x16" type="image/png">
|
||||
<link href="https://www.guiadetv.com/assets/icons/manifest.json" rel="manifest">
|
||||
<meta content="https://www.guiadetv.com/assets/icons/ms-icon-144x144.png" name="msapplication-TileImage">
|
||||
|
||||
<script>
|
||||
self!=top&&top.location.replace(window.location.href)
|
||||
</script>
|
||||
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MVBE98M22E"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-MVBE98M22E');
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-260225556-1");
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function(c,l,a,r,i,t,y){
|
||||
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
|
||||
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
|
||||
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
|
||||
})(window, document, "clarity", "script", "oor5to7xw2");
|
||||
</script>
|
||||
|
||||
|
||||
<!-- Livewire Styles --><style >[wire\:loading][wire\:loading], [wire\:loading\.delay][wire\:loading\.delay], [wire\:loading\.inline-block][wire\:loading\.inline-block], [wire\:loading\.inline][wire\:loading\.inline], [wire\:loading\.block][wire\:loading\.block], [wire\:loading\.flex][wire\:loading\.flex], [wire\:loading\.table][wire\:loading\.table], [wire\:loading\.grid][wire\:loading\.grid], [wire\:loading\.inline-flex][wire\:loading\.inline-flex] {display: none;}[wire\:loading\.delay\.none][wire\:loading\.delay\.none], [wire\:loading\.delay\.shortest][wire\:loading\.delay\.shortest], [wire\:loading\.delay\.shorter][wire\:loading\.delay\.shorter], [wire\:loading\.delay\.short][wire\:loading\.delay\.short], [wire\:loading\.delay\.default][wire\:loading\.delay\.default], [wire\:loading\.delay\.long][wire\:loading\.delay\.long], [wire\:loading\.delay\.longer][wire\:loading\.delay\.longer], [wire\:loading\.delay\.longest][wire\:loading\.delay\.longest] {display: none;}[wire\:offline][wire\:offline] {display: none;}[wire\:dirty]:not(textarea):not(input):not(select) {display: none;}:root {--livewire-progress-bar-color: #2299dd;}[x-cloak] {display: none !important;}</style>
|
||||
</head>
|
||||
|
||||
<body id="kt_body" class="toolbar-enabled">
|
||||
|
||||
|
||||
<div id="menukit">
|
||||
<div class="d-flex flex-column-auto">
|
||||
<div class="page d-flex flex-row flex-column-fluid">
|
||||
<div class="wrapper d-flex flex-column flex-row-fluid" id="kt_wrapper">
|
||||
<div id="kt_header" class="header border-gray-300 border-bottom bg-white align-items-stretch"
|
||||
data-kt-sticky="true" data-kt-sticky-name="header"
|
||||
data-kt-sticky-offset="{default: '500px', lg: '500px'}">
|
||||
<div class="container-xxl d-flex align-items-center">
|
||||
<div class="d-flex align-items-center d-lg-none ms-n2 me-3" data-bs-toggle="collapse"
|
||||
title="Exibir Menu">
|
||||
<div class="btn btn-icon btn-custom w-30px h-30px w-md-40px h-md-40px"
|
||||
id="kt_header_menu_mobile_toggle"><i class="fas fa-bars text-primary fs-2x"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-logo me-5 me-md-10 flex-grow-1 flex-lg-grow-0"> <a href="/" wire:navigate>
|
||||
<img alt="Logo" src="/assets/img/logo_with.svg"
|
||||
class="darklogo h-35px h-lg-50px logo-default" />
|
||||
<img alt="Logo" src="/assets/img/logo.svg" class="withlogo h-35px h-lg-50px logo-default" />
|
||||
</a></div>
|
||||
<div class="d-flex flex-row-reverse align-items-stretch justify-content-between flex-lg-grow-1">
|
||||
<div class="d-flex align-items-stretch flex-shrink-1" id="kt_header_nav">
|
||||
<div class="header-menu align-items-stretch" data-kt-drawer="true"
|
||||
data-kt-drawer-name="header-menu" data-kt-drawer-activate="{default: true, lg: false}"
|
||||
data-kt-drawer-overlay="{default: true, lg: false}"
|
||||
data-kt-drawer-width="{default:'200px', '300px': '250px'}"
|
||||
data-kt-drawer-direction="start" data-kt-drawer-toggle="#kt_header_menu_mobile_toggle"
|
||||
data-kt-drawer-dismiss="true"
|
||||
data-kt-swapper="true" data-kt-swapper-mode="prepend"
|
||||
data-kt-swapper-parent="{default: '#kt_body', lg: '#kt_header_nav'}">
|
||||
|
||||
<div class="menu menu-column menu-lg-row menu-state-bg colorfut " data-kt-menu="true">
|
||||
|
||||
<div class="d-lg-none mb-6 d-flex py-4
|
||||
border-gray-300 border-bottom bg-opacity-80 justify-content-center"><img alt="Logo"
|
||||
src="/assets/img/logo_with.svg"
|
||||
class="darklogo h-35px h-lg-50px logo-default" />
|
||||
<img alt="Logo" src="/assets/img/logo.svg"
|
||||
class="withlogo h-35px h-lg-50px logo-default" />
|
||||
</div>
|
||||
|
||||
|
||||
<a href="https://www.guiadetv.com" wire:navigate>
|
||||
<div
|
||||
class=" menu-item menu-lg-down-accordion me-lg-1">
|
||||
<span class="menu-link py-3">
|
||||
<span class="menu-title"> Início</span> </span>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="https://www.guiadetv.com/programacao/" wire:navigate.hover>
|
||||
<div
|
||||
class=" active menu-item menu-lg-down-accordion me-lg-1">
|
||||
<span class="menu-link py-3">
|
||||
<span class="menu-title"> Programação da TV</span> </span>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://www.guiadetv.com/futebol/hoje/" wire:navigate.hover>
|
||||
<div
|
||||
class=" menu-item menu-lg-down-accordion me-lg-1">
|
||||
<span class="menu-link py-3"> <span class="menu-title">Futebol
|
||||
Hoje</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://www.guiadetv.com/info/contato/" wire:navigate>
|
||||
<div
|
||||
class=" menu-item menu-lg-down-accordion me-lg-1">
|
||||
<span class="menu-link py-3"> <span class="menu-title">Contato</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex align-items-stretch justify-content-between">
|
||||
<div class="topbar d-flex align-items-stretch flex-shrink-1">
|
||||
|
||||
<div class="d-flex align-items-center ms-1 ms-lg-3">
|
||||
<div class="btn btn-icon btn-custom position-relative w-30px h-30px w-md-40px h-md-40px"
|
||||
data-bs-html="true" data-bs-placement="bottom" data-bs-toggle="modal"
|
||||
data-bs-target="#modal_search">
|
||||
<i class="fas fa-search text-primary fs-2x"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="d-flex align-items-center ms-1 ms-lg-3">
|
||||
<div class="btn btn-icon btn-custom position-relative w-30px h-30px w-md-40px h-md-40px"
|
||||
data-bs-html="true" data-bs-placement="bottom" data-bs-toggle="modal"
|
||||
data-bs-target="#kt_modal_1"><i class="bi bi-gear fs-2x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="pub" class="mt-4">
|
||||
|
||||
|
||||
|
||||
<div class="mt-2 p-2 col-md-10 mb-10 col-lg-7">
|
||||
<div id="androidDiv" style="display: none;">
|
||||
<a href="https://play.google.com/store/apps/details?id=com.guiadetv&orig=site" target="_blank">
|
||||
<img src="https://www.guiadetv.com/assets/publi/baixar-app-guiadetv.png" width="100%" alt=""
|
||||
alt="Link para baixar o nosso app na Google Play Store">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function isAndroid() {
|
||||
return /Android/i.test(navigator.userAgent);
|
||||
}
|
||||
var div = document.getElementById('androidDiv');
|
||||
if (isAndroid()) {
|
||||
div.style.display = 'block';
|
||||
} else {
|
||||
div.style.display = 'none';
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<main id="guiadetv" class="global flex-root"><div class="container-xxl ">
|
||||
<div class="row mt-10 ">
|
||||
<div class="col-sm-12 col-md-12 col-lg-12 ">
|
||||
<center>
|
||||
<div>
|
||||
<img src="/assets/img/foradoar.gif" alt="500" class="img-fluid">
|
||||
<h1> 500 </h1>
|
||||
</div>
|
||||
|
||||
<div class="ml-4 mb-10 text-lg text-gray-500 uppercase tracking-wider">
|
||||
Estamos com Problemas de Conexão</div>
|
||||
</center>
|
||||
</div></div>
|
||||
</main>
|
||||
<footer class="bg-white border-gray-300 border-top">
|
||||
<div class="footer-copyright align-items-stretch p-3 mt-5">
|
||||
<div class="container ">
|
||||
<div class="row">
|
||||
<div class="col l2 s12 ">
|
||||
<p> <a href="/">
|
||||
<img alt="Logo" src="/assets/img/logo_with.svg"
|
||||
class="darklogo h-35px h-lg-50px logo-default" />
|
||||
<img alt="Logo" src="/assets/img/logo.svg" class="withlogo h-35px h-lg-50px logo-default" />
|
||||
</a></p>
|
||||
<h5 class="white-text">Programação da TV</h5>
|
||||
<p class="grey-text text-lighten-4">Explore a programação diária dos canais abertos e fechados, com
|
||||
o Guia de TV você sabe quais programas vão passar e seus horários. O guia de TV te ajuda a
|
||||
não perder nada.</p>
|
||||
|
||||
<h3>Nosso Aplicativo</h3>
|
||||
|
||||
|
||||
<a href="https://play.google.com/store/apps/details?id=com.guiadetv" target="_blank"
|
||||
title="Baixe nosso app para ANDROID">
|
||||
<img src="/assets/img/app_badge_google.png" alt="Google Play Store" width="151" height="45"></a>
|
||||
</div>
|
||||
<div class="col l5 offset-l2 s12">
|
||||
<h3>Guia de TV</h3>
|
||||
<ul class="list-unstyled text-small">
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/">Página Inicial</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/programacao/">Agora na TV</a>
|
||||
</li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/guiadejogos/">Guia de Jogos</a>
|
||||
</li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/noticias/">Notícias</a></li>
|
||||
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/categorias/esportes.html">Esportes na
|
||||
TV</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/categorias/noticias.html">Notícias da
|
||||
TV</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/categorias/filmes-e-series.html">Filmes e Séries</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/categorias/documentarios.html">Documentários na TV</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col l5 offset-l2 s12">
|
||||
<h3>Links Úteis</h3>
|
||||
<ul class="list-unstyled text-small">
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/sobre/">Sobre</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/contato/">Contato</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/politica/">Política de
|
||||
Privacidade</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/cookies/">Política de
|
||||
Cookies</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/termo-de-uso/">Termos de
|
||||
Uso</a></li>
|
||||
<li class="mb-1"><a class="text-dark" href="https://www.guiadetv.com/info/advertising/">Publicidade</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer-copyright border-gray-300 border-top align-items-stretch p-5 mb-20">
|
||||
<div class="container mb-20">
|
||||
<div class="row">
|
||||
|
||||
<div class="col l5 offset-l2 s12">
|
||||
© 2024 GuiadeTV.com - Todos os direitos reservados </br>
|
||||
® É proibida a reprodução parcial ou total do nosso conteúdo.
|
||||
<a href="/info/blog"> <span class="badge badge-primary"> Versão 1.2.2
|
||||
</span></a>
|
||||
</div>
|
||||
|
||||
<div class="col l5 offset-l2 s12 float-end">
|
||||
<p class=" mb-1"> Visite-nos
|
||||
<a class="text-primary right" href="https://twitter.com/guiadetvbr" target="_blank"> Twitter</a>
|
||||
•
|
||||
<a class="text-primary right" href="https://instagram.com/guiadetvoficial" target="_blank">
|
||||
Instagram </a>
|
||||
|
||||
</br>
|
||||
© COPYRIGHT 23-2024 •
|
||||
by SincNetwork
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="modal fade" tabindex="-1" id="modal_search">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Faça uma Busca</h5>
|
||||
<div class="btn btn-icon btn-sm btn-active-light-primary ms-2" data-bs-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span class="svg-icon svg-icon-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<rect opacity="0.5" x="6" y="17.3137" width="16" height="2" rx="1"
|
||||
transform="rotate(-45 6 17.3137)" fill="black" />
|
||||
<rect x="7.41422" y="6" width="16" height="2" rx="1" transform="rotate(45 7.41422 6)"
|
||||
fill="black" />
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="container d-flex flex-row py-2">
|
||||
|
||||
<form action="https://www.guiadetv.com/resultado/" method="get" id="users-form"
|
||||
class="tm-search input-group mb-3">
|
||||
<input type="text" name="q" required class="form-control" placeholder="Buscar"
|
||||
aria-label="Buscar" aria-describedby="button-addon2">
|
||||
<button class="tm-execute btn btn-primary" type="submit" id="button-addon2">Buscar</button>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="modal fade" tabindex="-1" id="kt_modal_1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Configurações</h5>
|
||||
<div class="btn btn-icon btn-sm btn-active-light-primary ms-2" data-bs-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span class="svg-icon svg-icon-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
||||
<rect opacity="0.5" x="6" y="17.3137" width="16" height="2" rx="1"
|
||||
transform="rotate(-45 6 17.3137)" fill="black" />
|
||||
<rect x="7.41422" y="6" width="16" height="2" rx="1" transform="rotate(45 7.41422 6)"
|
||||
fill="black" />
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<hr>
|
||||
<div class="chip">
|
||||
<div class="form-check form-switch " id="dark-mode-button">
|
||||
<label>
|
||||
<input class="form-check-input" type="checkbox" id="chck">
|
||||
<label class="form-check-label {default:'350px', 'lg': '700px'}" for="chck"> Modo
|
||||
Dark</label>
|
||||
<br> Ative o modo Dark e deixe a tala escura.
|
||||
O modo escuro ajudará o seu dispositivo a economizar bateria e reduzir a tensão dos seus
|
||||
olhos.
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p>Versão do site <br> 1.2.2 </p>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Fechar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script id="_wauwewlzq" async src="//waust.at/p2.js?w=wewlzq"></script>
|
||||
<script src="https://www.guiadetv.com/assets/js/home.js?id=1f561bd3424e841754de" data-spa="auto"></script>
|
||||
<script src="https://www.guiadetv.com/vendor/livewire/livewire.min.js?id=38dc8241" data-csrf="SPMsLqHtrgXSCKIbSadEthRbLqfRprA3uV1Tx5uk" data-update-uri="/livewire/update" data-navigate-once="true"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue