Initial Commit

This commit is contained in:
2023-09-10 21:48:48 +02:00
commit 227cca7d31
791 changed files with 165200 additions and 0 deletions

2
tests/__data__/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
output/
temp/

View File

@@ -0,0 +1,108 @@
# EPG
[![_update](https://github.com/iptv-org/epg/actions/workflows/_update.yml/badge.svg)](https://github.com/iptv-org/epg/actions/workflows/_update.yml)
EPG (Electronic Program Guide) for thousands of TV channels collected from different sources.
## Table of contents
- 🚀 [How to use?](#how-to-use)
- 🗓 [Guides](#guides)
- 📺 [Playlists](#playlists)
- 🗄 [Database](#database)
- 👨‍💻 [API](#api)
- 📚 [Resources](#resources)
- 💬 [Discussions](#discussions)
- 🛠 [Contribution](#contribution)
- © [License](#license)
## How to use?
To load a program guide, all you need to do is copy the link to one or more of the guides from the list below and paste it into your favorite player.
You can also find the link to the guide by the name of the channel via https://iptv-org.github.io.
## Guides
<details>
<summary>Expand</summary>
<!-- prettier-ignore -->
### Danish
<table>
<thead>
<tr><th align="left">Site&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Channels</th><th align="left">EPG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th></tr>
</thead>
<tbody>
<tr><td valign="top" rowspan="1"><a href="https://allente.se">allente.se</a></td><td align="right" nowrap>1</td><td nowrap><code>https://iptv-org.github.io/epg/guides/da/allente.se.xml</code></td><td nowrap><a href="https://github.com/iptv-org/epg/actions/workflows/allente.se.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/allente.se.yml/badge.svg" alt="allente.se" style="max-width: 100%;"></a></td></tr>
</tbody>
</table>
### English
<table>
<thead>
<tr><th align="left">Site&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Channels</th><th align="left">EPG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th></tr>
</thead>
<tbody>
<tr><td valign="top" rowspan="1"><a href="https://sky.com">sky.com</a></td><td align="right" nowrap>1</td><td nowrap><code>https://iptv-org.github.io/epg/guides/en/sky.com.xml</code></td><td nowrap><a href="https://github.com/iptv-org/epg/actions/workflows/sky.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/sky.com.yml/badge.svg" alt="sky.com" style="max-width: 100%;"></a></td></tr>
<tr><td valign="top" rowspan="1"><a href="https://virginmedia.com">virginmedia.com</a></td><td align="right" nowrap>1</td><td nowrap><code>https://iptv-org.github.io/epg/guides/en/virginmedia.com.xml</code></td><td nowrap><a href="https://github.com/iptv-org/epg/actions/workflows/virginmedia.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/virginmedia.com.yml/badge.svg" alt="virginmedia.com" style="max-width: 100%;"></a></td></tr>
</tbody>
</table>
### French
<table>
<thead>
<tr><th align="left">Site&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Channels</th><th align="left">EPG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th><th align="left">Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th></tr>
</thead>
<tbody>
<tr><td valign="top" rowspan="1"><a href="https://sky.com">sky.com</a></td><td align="right" nowrap>2</td><td nowrap><code>https://iptv-org.github.io/epg/guides/fr/sky.com.xml</code></td><td nowrap><a href="https://github.com/iptv-org/epg/actions/workflows/sky.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/sky.com.yml/badge.svg" alt="sky.com" style="max-width: 100%;"></a></td></tr>
</tbody>
</table>
</details>
<br>
To load the compressed version of the guide, just change the extension from `.xml` to `.xml.gz`.
## Playlists
Playlists with already linked guides can be found in the [iptv-org/iptv](https://github.com/iptv-org/iptv) repository.
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
## API
The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
## Resources
Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
## Discussions
If you have a question or an idea, you can post it in the [Discussions](https://github.com/orgs/iptv-org/discussions) tab.
## Contribution
Please make sure to read the [Contributing Guide](https://github.com/iptv-org/epg/blob/master/CONTRIBUTING.md) before sending [issue](https://github.com/iptv-org/epg/issues) or a [pull request](https://github.com/iptv-org/epg/pulls).
And thank you to everyone who has already contributed!
### Backers
<a href="https://opencollective.com/iptv-org"><img src="https://opencollective.com/iptv-org/backers.svg?width=890" /></a>
### Contributors
<a href="https://github.com/iptv-org/epg/graphs/contributors"><img src="https://opencollective.com/iptv-org/contributors.svg?width=890" /></a>
## License
[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE)

View File

@@ -0,0 +1 @@
[{"channel":"6eren.dk","site":"allente.se","lang":"da","days":2,"url":"https://iptv-org.github.io/epg/guides/da/allente.se.xml"},{"channel":"BBCNews.uk","site":"virginmedia.com","lang":"en","days":2,"url":"https://iptv-org.github.io/epg/guides/en/virginmedia.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"fr","days":2,"url":"https://iptv-org.github.io/epg/guides/fr/sky.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"en","days":2,"url":"https://iptv-org.github.io/epg/guides/en/sky.com.xml"},{"channel":"CNN.us","site":"sky.com","lang":"fr","days":2,"url":"https://iptv-org.github.io/epg/guides/fr/sky.com.xml"}]

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
{"channel":{"id":"CNNInternationalEurope.us","name":"CNN International","site":"example.com","site_id":"140","lang":"en","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://example.com"},"date":"2022-12-29T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"z8NuUrwLzFmvwVaN"}
{"channel":{"id":"CNNInternationalEurope.us","name":"CNN International","site":"example.com","site_id":"140","lang":"en","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://example.com"},"date":"2022-12-30T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"VbOAfybHJmi9fVhI"}
{"channel":{"id":"CNNInternationalEurope.us","name":"CNN International","site":"example.com","site_id":"140","lang":"ru","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://example.com"},"date":"2022-12-29T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"Gv8kvgVzGQH345DI"}
{"channel":{"id":"CNNInternationalEurope.us","name":"CNN International","site":"example.com","site_id":"140","lang":"ru","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://example.com"},"date":"2022-12-30T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"qk1kIFkVtbBXLsIp"}

View File

@@ -0,0 +1 @@
{"titles":[{"lang":"en","value":"InfoNeu "}],"actors":[],"adapters":[],"commentators":[],"composers":[],"date":null,"directors":[],"editors":[],"guests":[],"presenters":[],"producers":[],"sub_titles":[],"urls":[],"writers":[],"descriptions":[],"categories":[],"episodeNumbers":[],"icon":{"src":""},"ratings":[],"channel":"CNNInternationalEurope.us","start":1641711600000,"stop":1641715200000,"site": "chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"6AzYe7lqcSN05ZUq"}

View File

@@ -0,0 +1,5 @@
{"channel":{"lang":"en","id":"BravoEast.us","name":"Bravo East","site_id":"237","logo":"","site":"directv.com","url":"https://directv.com"},"configPath":"sites/directv.com/directv.com.config.js","cluster_id":84,"date": "2022-01-21T00:00:00Z","error":"Invalid header value char","_id":"00AluKCrCnfgrl8W"}
{"channel":{"lang":"fr","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"53","logo":"","site":"chaines-tv.orange.fr","url":"https://chaines-tv.orange.fr"},"configPath":"tests/__data__/input/sites/example.com.config.js","cluster_id":1,"date": "2022-01-21T00:00:00Z","error":null,"_id":"0Wefq0oMR3feCcuY"}
{"channel":{"lang":"ru","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"140","logo":"","site":"magticom.ge","url":"https://magticom.ge"},"configPath":"tests/__data__/input/sites/example.com.config.js","cluster_id":1,"date": "2022-01-21T00:00:00Z","error":"Invalid header value char","_id":"1XzrxNkSF2AQNBrT"}
{"channel":{"lang":"ru","id":"Perviykanal.ru","name":"Perviy kanal","site_id":"1","logo":"","site":"yandex.ru","url":"https://yandex.ru"},"configPath":"sites/yandex.ru/yandex.ru.config.js","error":"Some error","cluster_id":4,"date":"2022-01-21T00:00:00Z","_id":"1lnhXpN7g0ER5Xw5"}
{"channel":{"lang":"en","id":"MNetMovies2.za","name":"M-Net Movies 2","site_id":"404a052b-3dea-4cac-a19c-de9a7d6f191d#MAP","logo":"","site":"dstv.com","url":"https://dstv.com"},"configPath":"sites/dstv.com/dstv.com.config.js","cluster_id":120,"date": "2022-01-21T00:00:00Z","error":null,"_id":"1lnhXpN7g0ER5XwN"}

View File

@@ -0,0 +1,2 @@
{"channel":{"lang":"ru","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"140","site":"example.com","logo":"","url":"https://example.com"},"date":"2022-02-03T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"vOpwztzvJ5pFSVws"}
{"channel":{"lang":"ru","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"140","site":"example.com","logo":"","url":"https://example.com"},"date":"2022-02-04T00:00:00.000Z","configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"_id":"sP2A0zQSOoVg0BS1"}

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?><tv date="20221020">
<channel id="6eren.dk"><display-name>6&apos;eren</display-name><icon src="https://upload.wikimedia.org/wikipedia/commons/6/64/6%27eren_2015.png"/><url>https://allente.se</url></channel>
<programme start="20221024040000 +0000" stop="20221024042500 +0000" channel="6eren.dk"><title lang="da">Diners, Drive-Ins and Dives</title><desc lang="da">Underholdning</desc><category lang="da">series</category><icon src="https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"/><episode-num system="xmltv_ns">23.5.0/1</episode-num><episode-num system="onscreen">S24E06</episode-num></programme>
</tv>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" ?><tv date="20221020">
<channel id="BravoEast.us"><display-name>Bravo East</display-name><icon src="https://www.directv.com/images/logos/channels/dark/large/579.png"/><url>https://directv.com</url></channel>
</tv>

Binary file not shown.

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?><tv date="20221020">
<channel id="BBCNews.uk"><display-name>BBC News</display-name><icon src="https://i.imgur.com/rPzH88J.png"/><url>https://sky.com</url></channel>
<programme start="20221027120000 +0000" stop="20221027123000 +0000" channel="BBCNews.uk"><title lang="en">BBC News at One</title><desc lang="en">The latest national and international news from the BBC. [S,SL]</desc><icon src="http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"/></programme>
</tv>

Binary file not shown.

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?><tv date="20221020">
<channel id="BBCNews.uk"><display-name>BBC News</display-name><icon src="https://i.imgur.com/rPzH88J.png"/><url>https://virginmedia.com</url></channel>
<programme start="20221027120000 +0000" stop="20221027123000 +0000" channel="BBCNews.uk"><title lang="en">BBC News at One</title><desc lang="en">The latest national and international news, followed by weather.</desc><category lang="en">News</category><episode-num system="xmltv_ns">96839999.145799123.0/1</episode-num><episode-num system="onscreen">S96840000E145799124</episode-num></programme>
</tv>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?><tv date="20221020">
<channel id="BBCNews.uk"><display-name>BBC News</display-name><icon src="https://i.imgur.com/rPzH88J.png"/><url>https://sky.com</url></channel>
<channel id="CNN.us"><display-name>CNN</display-name><icon src="https://www.directv.com/images/logos/channels/dark/large/579.png"/><url>https://sky.com</url></channel>
<programme start="20221027120000 +0000" stop="20221027123000 +0000" channel="BBCNews.uk"><title lang="fr">BBC News at One</title><desc lang="fr">Les dernières nouvelles nationales et internationales de la BBC. [S,SL]</desc><icon src="http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"/></programme>
<programme start="20221027120000 +0000" stop="20221027123000 +0000" channel="CNN.us"><title lang="fr">French title</title></programme>
</tv>

Binary file not shown.

View File

@@ -0,0 +1,2 @@
{"_qid":"0Wefq0oMR3feCcuY","programs":[],"error":null}
{"_qid":"1XzrxNkSF2AQNBrT","programs":[],"error":null}

View File

@@ -0,0 +1,6 @@
{"site":"allente.se","lang":"da","days":2,"channel":"6eren.dk","filename":"da/allente.se"}
{"site":"directv.com","lang":"en","days":2,"channel":"BravoEast.us","filename":"en/directv.com"}
{"site":"sky.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/sky.com"}
{"site":"virginmedia.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/virginmedia.com"}
{"site":"sky.com","lang":"fr","days":2,"channel":"BBCNews.uk","filename":"fr/sky.com"}
{"site":"sky.com","lang":"fr","days":2,"channel":"CNN.us","filename":"fr/sky.com"}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="parse-channels.com">
<channels>
<channel lang="en" xmltv_id="CNNInternational.us" site_id="140">CNN International</channel>
</channels>
</site>

View File

@@ -0,0 +1,74 @@
[
{
"id": "BravoEast.us",
"name": "Bravo East",
"network": null,
"country": "US",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/US"
],
"languages": [
"eng"
],
"categories": [],
"is_nsfw": false,
"logo": "https://www.directv.com/images/logos/channels/dark/large/579.png"
},
{
"id": "CNNInternationalEurope.us",
"name": "CNN International Europe",
"network": null,
"country": "US",
"subdivision": null,
"city": null,
"broadcast_area": [
"r/EUR"
],
"languages": [
"eng"
],
"categories": [
"news"
],
"is_nsfw": false,
"logo": "https://i.imgur.com/2BXCg0x.jpg"
},
{
"id": "MNetMovies2.za",
"name": "M-Net Movies 2",
"network": null,
"country": "ZA",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/ZA"
],
"languages": [
"afr"
],
"categories": [],
"is_nsfw": false,
"logo": "https://rndcdn.dstv.com/dstvcms/2020/08/31/M-Net_Movies_2_Logo_4-3_lightbackground_xlrg.png"
},
{"id":"6eren.dk","name":"6'eren","alt_names":[],"network":null,"owners":["Warner Bros. Discovery EMEA"],"country":"DK","subdivision":null,"city":null,"broadcast_area":["c/DK"],"languages":["dan"],"categories":[],"is_nsfw":false,"launched":"2009-01-01","closed":null,"replaced_by":null,"website":"http://www.6-eren.dk/","logo":"https://upload.wikimedia.org/wikipedia/commons/6/64/6%27eren_2015.png"},
{"id":"BBCNews.uk","name":"BBC News","alt_names":[],"network":null,"owners":[],"country":"UK","subdivision":null,"city":null,"broadcast_area":["c/UK"],"languages":["eng"],"categories":["news"],"is_nsfw":false,"launched":null,"closed":null,"replaced_by":null,"website":"http://news.bbc.co.uk/","logo":"https://i.imgur.com/rPzH88J.png"},
{
"id": "CNN.us",
"name": "CNN",
"network": null,
"country": "US",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/US"
],
"languages": [
"eng"
],
"categories": [],
"is_nsfw": false,
"logo": "https://www.directv.com/images/logos/channels/dark/large/579.png"
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,352 @@
[
{
"country": "CA",
"name": "Alberta",
"code": "CA-AB"
},
{
"country": "CA",
"name": "British Columbia",
"code": "CA-BC"
},
{
"country": "CA",
"name": "Manitoba",
"code": "CA-MB"
},
{
"country": "CA",
"name": "New Brunswick",
"code": "CA-NB"
},
{
"country": "CA",
"name": "Newfoundland and Labrador",
"code": "CA-NL"
},
{
"country": "CA",
"name": "Northwest Territories",
"code": "CA-NT"
},
{
"country": "CA",
"name": "Nova Scotia",
"code": "CA-NS"
},
{
"country": "CA",
"name": "Nunavut",
"code": "CA-NU"
},
{
"country": "CA",
"name": "Ontario",
"code": "CA-ON"
},
{
"country": "CA",
"name": "Prince Edward Island",
"code": "CA-PE"
},
{
"country": "CA",
"name": "Quebec",
"code": "CA-QC"
},
{
"country": "CA",
"name": "Saskatchewan",
"code": "CA-SK"
},
{
"country": "CA",
"name": "Yukon",
"code": "CA-YT"
},
{
"country": "US",
"name": "Alabama",
"code": "US-AL"
},
{
"country": "US",
"name": "Alaska",
"code": "US-AK"
},
{
"country": "US",
"name": "American Samoa",
"code": "US-AS"
},
{
"country": "US",
"name": "Arizona",
"code": "US-AZ"
},
{
"country": "US",
"name": "Arkansas",
"code": "US-AR"
},
{
"country": "US",
"name": "California",
"code": "US-CA"
},
{
"country": "US",
"name": "Colorado",
"code": "US-CO"
},
{
"country": "US",
"name": "Connecticut",
"code": "US-CT"
},
{
"country": "US",
"name": "Delaware",
"code": "US-DE"
},
{
"country": "US",
"name": "District of Columbia",
"code": "US-DC"
},
{
"country": "US",
"name": "Florida",
"code": "US-FL"
},
{
"country": "US",
"name": "Georgia",
"code": "US-GA"
},
{
"country": "US",
"name": "Guam",
"code": "US-GU"
},
{
"country": "US",
"name": "Hawaii",
"code": "US-HI"
},
{
"country": "US",
"name": "Idaho",
"code": "US-ID"
},
{
"country": "US",
"name": "Illinois",
"code": "US-IL"
},
{
"country": "US",
"name": "Indiana",
"code": "US-IN"
},
{
"country": "US",
"name": "Iowa",
"code": "US-IA"
},
{
"country": "US",
"name": "Kansas",
"code": "US-KS"
},
{
"country": "US",
"name": "Kentucky",
"code": "US-KY"
},
{
"country": "US",
"name": "Louisiana",
"code": "US-LA"
},
{
"country": "US",
"name": "Maine",
"code": "US-ME"
},
{
"country": "US",
"name": "Maryland",
"code": "US-MD"
},
{
"country": "US",
"name": "Massachusetts",
"code": "US-MA"
},
{
"country": "US",
"name": "Michigan",
"code": "US-MI"
},
{
"country": "US",
"name": "Minnesota",
"code": "US-MN"
},
{
"country": "US",
"name": "Mississippi",
"code": "US-MS"
},
{
"country": "US",
"name": "Missouri",
"code": "US-MO"
},
{
"country": "US",
"name": "Montana",
"code": "US-MT"
},
{
"country": "US",
"name": "Nebraska",
"code": "US-NE"
},
{
"country": "US",
"name": "Nevada",
"code": "US-NV"
},
{
"country": "US",
"name": "New Hampshire",
"code": "US-NH"
},
{
"country": "US",
"name": "New Jersey",
"code": "US-NJ"
},
{
"country": "US",
"name": "New Mexico",
"code": "US-NM"
},
{
"country": "US",
"name": "New York",
"code": "US-NY"
},
{
"country": "US",
"name": "North Carolina",
"code": "US-NC"
},
{
"country": "US",
"name": "North Dakota",
"code": "US-ND"
},
{
"country": "US",
"name": "Northern Mariana Islands",
"code": "US-MP"
},
{
"country": "US",
"name": "Ohio",
"code": "US-OH"
},
{
"country": "US",
"name": "Oklahoma",
"code": "US-OK"
},
{
"country": "US",
"name": "Oregon",
"code": "US-OR"
},
{
"country": "US",
"name": "Pennsylvania",
"code": "US-PA"
},
{
"country": "US",
"name": "Puerto Rico",
"code": "US-PR"
},
{
"country": "US",
"name": "Rhode Island",
"code": "US-RI"
},
{
"country": "US",
"name": "South Carolina",
"code": "US-SC"
},
{
"country": "US",
"name": "South Dakota",
"code": "US-SD"
},
{
"country": "US",
"name": "Tennessee",
"code": "US-TN"
},
{
"country": "US",
"name": "Texas",
"code": "US-TX"
},
{
"country": "US",
"name": "U.S. Virgin Islands",
"code": "US-VI"
},
{
"country": "US",
"name": "United States Minor Outlying Islands",
"code": "US-UM"
},
{
"country": "US",
"name": "Utah",
"code": "US-UT"
},
{
"country": "US",
"name": "Vermont",
"code": "US-VT"
},
{
"country": "US",
"name": "Virginia",
"code": "US-VA"
},
{
"country": "US",
"name": "Washington",
"code": "US-WA"
},
{
"country": "US",
"name": "West Virginia",
"code": "US-WV"
},
{
"country": "US",
"name": "Wisconsin",
"code": "US-WI"
},
{
"country": "US",
"name": "Wyoming",
"code": "US-WY"
}
]

View File

@@ -0,0 +1,46 @@
{"title":"World Sport","description":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641825900000,"stop":1641826800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"12AJc0GeEJE9p4c3"}
{"title":"Connecting Africa. 114-я серия","description":"114-я серия. Проект, рассказывающий о людях и компаниях, которые совершают революцию в африканском бизнесе, и о тех, кто объединяет континент, выступая за свободную торговлю в Африке.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641843900000,"stop":1641844800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"1dxcT34nyxzOlxBL"}
{"title":"Connect the World","description":"Актуальная мировая информация с разных континентов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641826800000,"stop":1641830400000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"2uJe4w2lgvjNOXo0"}
{"title":"The Lead with Jake Tapper","description":"Оперативная сводка новостей страны и мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641844800000,"stop":1641848400000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"6As6GzEVhb3OWM0M"}
{"title":"World Sport","description":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641817800000,"stop":1641819600000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"6DXKlITWehX1Jx4F"}
{"title":"CNN Newsroom with Michael Holmes","description":"Обзор самых важных и актуальных новостей и событий из жизни страны и мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641790800000,"stop":1641794400000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"AadPdMZ3s72y8NMk"}
{"title":"The Situation Room with Wolf Blitzer","description":"Командный центр новостей, политики и неординарных репортажей со всего мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641852000000,"stop":1641855600000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"Az3ABKy3HnE7sJZk"}
{"title":"One World with Zain Asher","description":"Освещаются важные новости с каждого континента, от политики и текущих дел до социальных вопросов и многого другого.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641830400000,"stop":1641833100000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"DMurxgt5OD0E9OIE"}
{"title":"TBD","description":"Информационно-познавательный проект CNN.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641783600000,"stop":1641785400000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"HQJqM2kIa77llWbC"}
{"title":"Marketplace Africa. 548-я серия","description":"548-я серия. Информационная передача об экономических событиях африканского региона. Анализируются проблемы, даются экономические прогнозы.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641782700000,"stop":1641783600000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"Jn3khh5n9Brkxq4U"}
{"title":"CNN Newsroom with Michael Holmes","description":"Обзор самых важных и актуальных новостей и событий из жизни страны и мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641787200000,"stop":1641789900000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"KcrIoQTXtUdw74sO"}
{"title":"The Global Brief with Bianca Nobilo","description":"Global Brief с Бьянкой Нобило проницательно исследует меняющийся мир для меняющейся аудитории, обеспечивая непревзойденную глубину и качество для занятых зрителей в быстро меняющемся мире.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641848400000,"stop":1641850200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"LGD7WmQogDRxZn01"}
{"title":"CNN Newsroom with Rosemary Church","description":"Свежая мировая информационная сводка от CNN. О политике, экономике, общественной жизни, культуре, спорте.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641798000000,"stop":1641805200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"LyCBivUTdZFW9X53"}
{"title":"Marketplace Africa. 549-я серия","description":"549-я серия. Информационная передача об экономических событиях африканского региона. Анализируются проблемы, даются экономические прогнозы.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641833100000,"stop":1641834000000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"PbrZinuZKgBHqDVj"}
{"title":"African Voices Changemakers. 114-я серия","description":"114-я серия. Африка сегодня - люди, новости, события.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641780000000,"stop":1641781800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"SvrCK31v78V5y7EA"}
{"title":"Anderson Cooper 360","description":"Уникальный взгляд Андерсона Купера на главные события мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641859200000,"stop":1641862800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"TFGrOFJGkaOs9pU7"}
{"title":"World Sport","description":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641850200000,"stop":1641852000000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"UynlLeT41MsjFElg"}
{"title":"New Day","description":"Свежий обзор событий в стране и мире.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641808800000,"stop":1641817800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"UyvhQ4wRNq5d5XRd"}
{"title":"Amanpour","description":"Сводка новостей от знаменитой ведущей канала CNN.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641834000000,"stop":1641837600000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"WbsOCkmPH5gjmo4M"}
{"title":"Early Start","description":"Новости дня с Кристиной Романс и Дейвом Бриггсом.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641805200000,"stop":1641808800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"YB96P2mMO4TA0pID"}
{"title":"World Sport","description":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641789900000,"stop":1641790800000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"aDdCAlgqLG2yxM1m"}
{"title":"CNN Newsroom Sunday","description":"Свежая мировая информационная сводка от CNN. О политике, экономике, общественной жизни, культуре, спорте.","category":["Category1","Category2"],"season":null,"episode":null,"icon":null,"channel":"CNNInternationalEurope.us","lang":"ru","start":1641772800000,"stop":1641776400000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"aYCk87dUOAkCJE9x"}
{"title":"Fareed Zakaria GPS","description":"Интервью с главными игроками мировой политики.","category":"Category1","season":null,"episode":null,"icon":null,"channel":"CNNInternationalEurope.us","lang":"ru","start":1641776400000,"stop":1641780000000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"c1nCoWVetBZ3mn5q"}
{"title":"Inside Africa. 586-я серия","description":"586-я серия. Своеобразное \"путешествие\" по Африке - почувствуйте все разнообразие культур различных стран и регионов континента.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641785400000,"stop":1641787200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"goaDr7BsGGm3LCfz"}
{"title":"CNN Newsroom with Robyn Curnow","description":"Обзор самых важных и актуальных новостей и событий из жизни страны и мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641794400000,"stop":1641797100000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"nixd3gRF1S1K0ZOs"}
{"title":"Marketplace Africa. 549-я серия","description":"549-я серия. Информационная передача об экономических событиях африканского региона. Анализируются проблемы, даются экономические прогнозы.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641781800000,"stop":1641782700000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"r1b8EvZc0tYs88ga"}
{"title":"Erin Burnett OutFront","description":"Обсуждение самых важных мировых тем в эфире канала CNN.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641855600000,"stop":1641859200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"sIQtUtowtATc7dLj"}
{"title":"Connect the World","description":"Актуальная мировая информация с разных континентов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641823200000,"stop":1641825900000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"tXBIZ2BZBIkhnoTZ"}
{"title":"Quest Means Business","description":"Ричард Квест возглавляет группу экспертов и корреспондентов, чтобы предоставить актуальные факты, цифры и анализ из делового мира.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641841200000,"stop":1641843900000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"xlE5epkjzdfUQpXO"}
{"title":"First Move with Julia Chatterley","description":"Несколько больших историй, связанных с открытием рынков в США.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641819600000,"stop":1641823200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"yEVXucyUomVmktMF"}
{"title":"Hala Gorani Tonight","description":"Используя свой 25-летний журналистский опыт, Хала Горани будет освещать ключевые события в картине дня посредством диалога с гостями и экспертами-аналитиками.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641837600000,"stop":1641841200000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"yPgmYrWwfxHW3WUA"}
{"title":"World Sport","description":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"CNNInternationalEurope.us","lang":"ru","start":1641797100000,"stop":1641798000000,"site":"chaines-tv.orange.fr","_qid":"0Wefq0oMR3feCcuY","_id":"zX70wOz5drExRTJX"}
{"title":"Robin Hood","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641822300000,"stop":1641829200000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"1AoKArQw6MxP6pVU"}
{"title":"The Water Diviner","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641776100000,"stop":1641782700000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"6v7w0SB4IlnfEEu3"}
{"title":"Bad Boys For Life","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641847200000,"stop":1641850800000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"83VRYvggmyfCzkOm"}
{"title":"12 Strong","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641814500000,"stop":1641822300000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"DbjwscjIuVDY8TPx"}
{"title":"Backdraft","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641801300000,"stop":1641809400000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"IwuwkjCKqWvio7ba"}
{"title":"Force Of Nature","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641841200000,"stop":1641847200000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"LP56HczEup0ed3Xx"}
{"title":"Mafia","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641809400000,"stop":1641814500000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"MM9DPxERAgGGak39"}
{"title":"The Last Witch Hunter","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641834780000,"stop":1641841200000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"MciJOpN3YCodj6Na"}
{"title":"Beyond The Line","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641796500000,"stop":1641801300000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"ZKA2s6QrM0xRrfGz"}
{"title":"Paranoia","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641790200000,"stop":1641796500000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"ZpdIZeSRhPycDX9D"}
{"title":"The Scorpion King","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641829200000,"stop":1641834780000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"doO4Lh1pAt6L6wHa"}
{"title":"Fatman","description":null,"category":null,"season":9,"episode":257,"icon":null,"channel":"MNetMovies2.za","lang":"en","start":1641761700000,"stop":1641767700000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"fHahGuzHnU7xVEJX"}
{"title":"Outbreak","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641782700000,"stop":1641790200000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"mkvcMP4FMwL2a5ax"}
{"title":"Motherless Brooklyn","description":null,"sub_title":"","urls":[],"categories":[],"icon":{},"episodeNumbers":[],"date":null,"ratings":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"channel":"MNetMovies2.za","lang":"en","start":1641767700000,"stop":1641776100000,"site":"dstv.com","_qid":"1lnhXpN7g0ER5XwN","_id":"nxTIAJsBwyXztRun"}

View File

@@ -0,0 +1,5 @@
{"channel":{"lang":"en","id":"BravoEast.us","name":"Bravo East","site_id":"237","logo":"","site":"directv.com","url":"https://directv.com"},"configPath":"sites/directv.com/directv.com.config.js","error":"Invalid header value char","cluster_id":84,"date":"2022-01-21T00:00:00Z","_id":"00AluKCrCnfgrl8W"}
{"channel":{"lang":"fr","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"53","logo":"","site":"chaines-tv.orange.fr","url":"https://chaines-tv.orange.fr"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"0Wefq0oMR3feCcuY"}
{"channel":{"lang":"ru","id":"CNNInternationalEurope.us","name":"CNN International","site_id":"140","logo":"","site":"magticom.ge","url":"https://magticom.ge"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"1XzrxNkSF2AQNBrT"}
{"channel":{"lang":"en","id":"MNetMovies2.za","name":"M-Net Movies 2","site_id":"404a052b-3dea-4cac-a19c-de9a7d6f191d#MAP","logo":"","site":"dstv.com","url":"https://dstv.com"},"configPath":"sites/dstv.com/dstv.com.config.js","error":null,"cluster_id":120,"date":"2022-01-21T00:00:00Z","_id":"1lnhXpN7g0ER5XwN"}
{"channel":{"lang":"ru","id":"Perviykanal.ru","name":"Perviy kanal","site_id":"1","logo":"","site":"yandex.ru","url":"https://yandex.ru"},"configPath":"sites/yandex.ru/yandex.ru.config.js","error":"Some error","cluster_id":4,"date":"2022-01-21T00:00:00Z","_id":"1lnhXpN7g0ER5Xw5"}

View File

@@ -0,0 +1,6 @@
{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"f6cxSM73LfZ8TdYz","_id":"HxsrTRTFj1z05TAK"}
{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"f6cxTM73LfZ8TdYz","_id":"HxsrBRTFj1z05TAK"}
{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"lNXh3lBnb4n1DBzs","_id":"quKCInjZV98xFUAf"}
{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"36duI92slofEXlSa","_id":"ryzed0Bqda1QtE7i"}
{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Les dernières nouvelles nationales et internationales de la BBC. [S,SL]","lang":"fr"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"32duI92slofEXlSa","_id":"r5zed0Bqda1QtE7i"}
{"site":"sky.com","channel":"CNN.us","titles":[{"value":"French title","lang":"fr"}],"sub_titles":[],"descriptions":[],"icon":{},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"37duI92slofEXlSa","_id":"rxzed0Bqda1QtE7i"}

View File

@@ -0,0 +1,8 @@
{"channel":{"lang":"da","id":"6eren.dk","name":"6eren","site_id":"237","logo":"","site":"allente.se","url":"https://directv.com"},"configPath":"sites/directv.com/directv.com.config.js","error":"Invalid header value char","cluster_id":84,"date":"2022-01-21T00:00:00Z","_id":"00AluKCrCnfgrl8W"}
{"channel":{"lang":"en","id":"BBCNews.uk","name":"BBC News","site_id":"53","logo":"","site":"virginmedia.com","url":"https://chaines-tv.orange.fr"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"0Wefq0oMR3feCcuY"}
{"channel":{"lang":"fr","id":"BBCNews.uk","name":"BBC News","site_id":"53","logo":"","site":"sky.com","url":"https://chaines-tv.orange.fr"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"0Zefq0oMR3feCcuY"}
{"channel":{"lang":"en","id":"BBCNews.uk","name":"BBC News","site_id":"53","logo":"","site":"sky.com","url":"https://chaines-tv.orange.fr"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"0Qefq0oMR3feCcuY"}
{"channel":{"lang":"fr","id":"CNN.us","name":"CNN","site_id":"140","logo":"","site":"sky.com","url":"https://magticom.ge"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-21T00:00:00Z","_id":"1XzrxNkSF2AQNBrT"}
{"channel":{"lang":"fr","id":"CNN.us","name":"CNN","site_id":"140","logo":"","site":"sky.com","url":"https://magticom.ge"},"configPath":"tests/__data__/input/sites/example.com.config.js","error":null,"cluster_id":1,"date":"2022-01-22T00:00:00Z","_id":"2XzrxNkSF2AQNBrT"}
{"channel":{"lang":"en","id":"BravoEast.us","name":"Bravo East","site_id":"237","logo":"","site":"directv.com","url":"https://directv.com"},"configPath":"sites/directv.com/directv.com.config.js","error":"Invalid header value char","cluster_id":84,"date":"2022-01-21T00:00:00Z","_id":"01AluKCrCnfgrl8W"}
{"channel":{"lang":"en","id":"BravoEast.us","name":"Bravo East","site_id":"237","logo":"","site":"directv.com","url":"https://directv.com"},"configPath":"sites/directv.com/directv.com.config.js","error":"Invalid header value char","cluster_id":84,"date":"2022-01-22T00:00:00Z","_id":"02AluKCrCnfgrl8W"}

View File

@@ -0,0 +1,2 @@
{"_qid":"0Wefq0oMR3feCcuY","programs":[{"titles":[{"lang":"en","value":"InfoNeu "}],"descriptions":[],"categories":[],"icon":null,"channel":"CNNInternationalEurope.us","site": "chaines-tv.orange.fr","start":1641711600000,"stop":1641715200000}],"error":null}
{"_qid":"1XzrxNkSF2AQNBrT","programs":[],"error":"Invalid header value char"}

View File

@@ -0,0 +1,5 @@
{"site":"allente.se","lang":"da","days":2,"channel":"6eren.dk","filename":"da/allente.se"}
{"site":"virginmedia.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/virginmedia.com"}
{"site":"sky.com","lang":"fr","days":2,"channel":"BBCNews.uk","filename":"fr/sky.com"}
{"site":"sky.com","lang":"fr","days":2,"channel":"CNN.us","filename":"fr/sky.com"}
{"site":"sky.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/sky.com"}

View File

@@ -0,0 +1,4 @@
{
"build" : "tests/__data__/output/readme.md",
"files" : ["./.readme/readme.md"]
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="duplicate.com">
<channels>
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="150">CNN International</channel>
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="140">CNN International</channel>
</channels>
</site>

View File

@@ -0,0 +1,10 @@
module.exports = {
site: 'example.com',
days: 2,
url() {
return `https://example.com`
},
parser() {
return []
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="example.com">
<channels>
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="140">CNN International</channel>
<channel lang="en" xmltv_id="CNNInternationalEurope2.us" site_id="141">CNN International Europe 2</channel>
</channels>
</site>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="example.com">
<channels>
<channel lang="ru" xmltv_id="CNNInternationalEurope.us" site_id="140">CNN International</channel>
</channels>
</site>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="ignore.com">
<channels>
<channel lang="en" xmltv_id="1Plus2.lv" site_id="1341">1+2</channel>
</channels>
</site>

View File

@@ -0,0 +1,10 @@
module.exports = {
site: 'ignore.com',
ignore: true,
url() {
return `https://ignore.com`
},
parser() {
return []
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="lint.com">
<channels>
<channel xmltv_id="CNNInternationalEurope.us" site_id="140">CNN International</channel>
</channels>
</site>

View File

@@ -0,0 +1,19 @@
module.exports = {
site: 'parse-channels.com',
url() {
return `https://parse-channels.com`
},
parser() {
return []
},
channels() {
return [
{
lang: 'en',
xmltv_id: 'CNNInternational.us',
site_id: 140,
name: 'CNN International'
}
]
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="wrong_xmltv_id.com">
<channels>
<channel lang="en" xmltv_id="CNNInternational" site_id="140">CNN International</channel>
</channels>
</site>

View File

@@ -0,0 +1,4 @@
{
"build" : "tests/__data__/output/status.md",
"files" : ["./.readme/status.md"]
}

View File

@@ -0,0 +1,26 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
const stdout = execSync(
'LOGS_DIR=tests/__data__/input/logs OUTPUT_DIR=tests/__data__/output/api npm run api:update',
{ encoding: 'utf8' }
)
})
it('can generate guides.json', () => {
expect(content('tests/__data__/output/api/guides.json')).toBe(
content('tests/__data__/expected/api/guides.json')
)
})
function content(filepath) {
const data = fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
return JSON.stringify(data)
}

View File

@@ -0,0 +1,19 @@
const { execSync } = require('child_process')
it('will show a message if the file contains a syntax error', () => {
try {
const stdout = execSync(
'npm run channels:lint -- tests/__data__/input/sites/lint.channels.xml',
{
encoding: 'utf8'
}
)
console.log(stdout)
process.exit(1)
} catch (err) {
expect(err.status).toBe(1)
expect(err.stdout).toBe(
`\n> channels:lint\n> node scripts/commands/channels/lint.js\n\n\ntests/__data__/input/sites/lint.channels.xml\n 4:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n`
)
}
})

View File

@@ -0,0 +1,24 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
const stdout = execSync(
'npm run channels:parse -- --config=tests/__data__/input/sites/parse-channels.config.js --output=tests/__data__/output/channels.xml',
{ encoding: 'utf8' }
)
})
it('can parse channels', () => {
expect(content('tests/__data__/output/channels.xml')).toEqual(
content('tests/__data__/expected/sites/parse-channels.channels.xml')
)
})
function content(filepath) {
return fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
}

View File

@@ -0,0 +1,49 @@
const { execSync } = require('child_process')
it('will show a message if the file contains a duplicate', () => {
try {
const stdout = execSync(
'DATA_DIR=tests/__data__/input/data npm run channels:validate -- tests/__data__/input/sites/duplicate.channels.xml',
{
encoding: 'utf8'
}
)
console.log(stdout)
process.exit(1)
} catch (err) {
expect(err.status).toBe(1)
expect(err.stdout).toBe(
`\n> channels:validate\n> node scripts/commands/channels/validate.js\n\ntests/__data__/input/sites/duplicate.channels.xml
┌─────────┬─────────────┬──────┬─────────────────────────────┬─────────┬─────────────────────┐
│ (index) │ type │ lang │ xmltv_id │ site_id │ name │
├─────────┼─────────────┼──────┼─────────────────────────────┼─────────┼─────────────────────┤
│ 0 │ 'duplicate' │ 'en' │ 'CNNInternationalEurope.us' │ '140' │ 'CNN International' │
└─────────┴─────────────┴──────┴─────────────────────────────┴─────────┴─────────────────────┘
\n1 error(s) in 1 file(s)\n`
)
}
})
it('will show a message if the file contains a channel with wrong xmltv_id', () => {
try {
const stdout = execSync(
'DATA_DIR=tests/__data__/input/data npm run channels:validate -- tests/__data__/input/sites/wrong_xmltv_id.channels.xml',
{
encoding: 'utf8'
}
)
console.log(stdout)
process.exit(1)
} catch (err) {
expect(err.status).toBe(1)
expect(err.stdout).toBe(
`\n> channels:validate\n> node scripts/commands/channels/validate.js\n\ntests/__data__/input/sites/wrong_xmltv_id.channels.xml
┌─────────┬──────────────────┬──────┬────────────────────┬─────────┬─────────────────────┐
│ (index) │ type │ lang │ xmltv_id │ site_id │ name │
├─────────┼──────────────────┼──────┼────────────────────┼─────────┼─────────────────────┤
│ 0 │ 'wrong_xmltv_id' │ 'en' │ 'CNNInternational' │ '140' │ 'CNN International' │
└─────────┴──────────────────┴──────┴────────────────────┴─────────┴─────────────────────┘
\n1 error(s) in 1 file(s)\n`
)
}
})

View File

@@ -0,0 +1,37 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db')
})
it('can load cluster and will terminate process if programs not found', () => {
try {
execSync(
'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs npm run cluster:load -- --cluster-id=1 --timeout=10000',
{ encoding: 'utf8' }
)
process.exit(1)
} catch (err) {
expect(err.status).toBe(1)
expect(err.stdout.includes('Error: No programs found')).toBe(true)
expect(content('tests/__data__/output/logs/cluster/load/cluster_1.log')).toEqual(
content('tests/__data__/expected/logs/cluster/load/cluster_1.log')
)
}
})
function content(filepath) {
const data = fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
return data
.split('\n')
.filter(l => l)
.map(l => {
return JSON.parse(l)
})
}

View File

@@ -0,0 +1,49 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
const glob = require('glob')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
fs.copyFileSync(
'tests/__data__/input/database/update-guides/programs.db',
'tests/__data__/output/programs.db'
)
fs.copyFileSync(
'tests/__data__/input/database/update-guides/queue.db',
'tests/__data__/output/queue.db'
)
})
it('can generate /guides', () => {
const stdout = execSync(
'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/output/logs DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output CURR_DATE=2022-10-20 npm run guides:update',
{ encoding: 'utf8' }
)
const uncompressed = glob
.sync('tests/__data__/expected/guides/**/*.xml')
.map(f => f.replace('tests/__data__/expected/', ''))
uncompressed.forEach(filepath => {
expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`))
})
const compressed = glob
.sync('tests/__data__/expected/guides/**/*.xml.gz')
.map(f => f.replace('tests/__data__/expected/', ''))
compressed.forEach(filepath => {
expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`))
})
expect(content('output/logs/guides/update.log')).toEqual(
content('expected/logs/guides/update.log')
)
})
function content(filepath) {
return fs.readFileSync(`tests/__data__/${filepath}`, {
encoding: 'utf8'
})
}

View File

@@ -0,0 +1,48 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
fs.copyFileSync('tests/__data__/input/database/queue.db', 'tests/__data__/output/queue.db')
const stdout = execSync(
'DB_DIR=tests/__data__/output LOGS_DIR=tests/__data__/input/logs npm run programs:save',
{ encoding: 'utf8' }
)
})
it('can save programs to database', () => {
let output = content('tests/__data__/output/programs.db')
let expected = content('tests/__data__/expected/database/programs.db')
output = output.map(i => {
i._id = null
return i
})
expected = expected.map(i => {
i._id = null
return i
})
expect(output).toEqual(expected)
})
it('can update queue', () => {
expect(content('tests/__data__/output/queue.db')).toEqual(
content('tests/__data__/expected/database/queue-with-errors.db')
)
})
function content(filepath) {
const data = fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
return data
.split('\n')
.filter(l => l)
.map(l => {
return JSON.parse(l)
})
}

View File

@@ -0,0 +1,48 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
const stdout = execSync(
'DB_DIR=tests/__data__/output/database CHANNELS_PATH=tests/__data__/input/sites/example.com_*.channels.xml DATA_DIR=tests/__data__/input/data CURR_DATE=2022-12-29 npm run queue:create -- --max-clusters=1',
{ encoding: 'utf8' }
)
})
it('can create queue', () => {
let output = content('tests/__data__/output/database/queue.db')
let expected = content('tests/__data__/expected/database/create-queue/queue.db')
output = output.map(i => {
i._id = null
return i
})
expected = expected.map(i => {
i._id = null
return i
})
expect(output).toEqual(
expect.arrayContaining([
expect.objectContaining(expected[0]),
expect.objectContaining(expected[1]),
expect.objectContaining(expected[2]),
expect.objectContaining(expected[3])
])
)
})
function content(filepath) {
const data = fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
return data
.split('\n')
.filter(l => l)
.map(l => {
return JSON.parse(l)
})
}

View File

@@ -0,0 +1,26 @@
const { execSync } = require('child_process')
const fs = require('fs-extra')
const path = require('path')
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
const stdout = execSync(
'LOGS_DIR=tests/__data__/input/logs DATA_DIR=tests/__data__/input/data npm run readme:update -- --config=tests/__data__/input/readme.json',
{ encoding: 'utf8' }
)
})
it('can update readme.md', () => {
expect(content('tests/__data__/output/readme.md')).toBe(
content('tests/__data__/expected/_readme.md')
)
})
function content(filepath) {
const data = fs.readFileSync(path.resolve(filepath), {
encoding: 'utf8'
})
return JSON.stringify(data)
}