mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Merge branch 'master' into pr/570
This commit is contained in:
commit
50483225e8
18 changed files with 1110 additions and 36 deletions
5
.github/workflows/_load.yml
vendored
5
.github/workflows/_load.yml
vendored
|
@ -15,10 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download data from API
|
||||
run: |
|
||||
mkdir -p scripts/data
|
||||
curl -L -o scripts/data/channels.json https://iptv-org.github.io/api/channels.json
|
||||
- run: npm run api:load
|
||||
- uses: FedericoCarboni/setup-ffmpeg@v1
|
||||
- uses: actions/setup-node@v2
|
||||
if: ${{ !env.ACT }}
|
||||
|
|
17
.github/workflows/proximusmwc.be.yml
vendored
Normal file
17
.github/workflows/proximusmwc.be.yml
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
name: proximusmwc.be
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: [_trigger]
|
||||
types:
|
||||
- completed
|
||||
jobs:
|
||||
load:
|
||||
uses: ./.github/workflows/_load.yml
|
||||
with:
|
||||
site: ${{github.workflow}}
|
||||
secrets:
|
||||
APP_ID: ${{ secrets.APP_ID }}
|
||||
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
|
2
.github/workflows/tvim.tv.yml
vendored
2
.github/workflows/tvim.tv.yml
vendored
|
@ -1,7 +1,7 @@
|
|||
name: tvim.tv
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
- cron: '5 0 * * *'
|
||||
workflow_dispatch:
|
||||
workflow_run:
|
||||
workflows: [_trigger]
|
||||
|
|
|
@ -198,8 +198,9 @@ To load a program guide, all you need to do is copy the link to one or more of t
|
|||
<tr><td valign="top">🇷🇪 Réunion</td><td align="right">119</td><td nowrap><code>https://iptv-org.github.io/epg/guides/re/canalplus-reunion.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/canalplus-reunion.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/canalplus-reunion.com.yml/badge.svg" alt="canalplus-reunion.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top">🇧🇱 Saint Barthélemy</td><td align="right">128</td><td nowrap><code>https://iptv-org.github.io/epg/guides/bl/canalplus-caraibes.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/canalplus-caraibes.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/canalplus-caraibes.com.yml/badge.svg" alt="canalplus-caraibes.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top">🇲🇫 Saint Martin</td><td align="right">128</td><td nowrap><code>https://iptv-org.github.io/epg/guides/mf/canalplus-caraibes.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/canalplus-caraibes.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/canalplus-caraibes.com.yml/badge.svg" alt="canalplus-caraibes.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="2">🇸🇦 Saudi Arabia</td><td align="right">98</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sa-ar/osn.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml/badge.svg" alt="osn.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="3">🇸🇦 Saudi Arabia</td><td align="right">98</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sa-ar/osn.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml/badge.svg" alt="osn.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">98</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sa-en/osn.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml/badge.svg" alt="osn.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">5</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sa/artonline.tv.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/artonline.tv.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/artonline.tv.yml/badge.svg" alt="artonline.tv" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="2">🇸🇳 Senegal</td><td align="right">242</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sn/canalplus-afrique.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/canalplus-afrique.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/canalplus-afrique.com.yml/badge.svg" alt="canalplus-afrique.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">125</td><td nowrap><code>https://iptv-org.github.io/epg/guides/sn/dstv.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/dstv.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/dstv.com.yml/badge.svg" alt="dstv.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="2">🇷🇸 Serbia</td><td align="right">357</td><td nowrap><code>https://iptv-org.github.io/epg/guides/rs/mts.rs.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/mts.rs.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/mts.rs.yml/badge.svg" alt="mts.rs" style="max-width: 100%;"></a></td></tr>
|
||||
|
@ -231,7 +232,7 @@ To load a program guide, all you need to do is copy the link to one or more of t
|
|||
<tr><td align="right">99</td><td nowrap><code>https://iptv-org.github.io/epg/guides/ae-en/osn.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/osn.com.yml/badge.svg" alt="osn.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="2">🇬🇧 United Kingdom</td><td align="right">258</td><td nowrap><code>https://iptv-org.github.io/epg/guides/uk/sky.com.epg.xml</code></td><td><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 align="right">97</td><td nowrap><code>https://iptv-org.github.io/epg/guides/uk/ontvtonight.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/ontvtonight.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/ontvtonight.com.yml/badge.svg" alt="ontvtonight.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="4">🇺🇸 United States</td><td align="right">1714</td><td nowrap><code>https://iptv-org.github.io/epg/guides/us/tvtv.us.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/tvtv.us.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/tvtv.us.yml/badge.svg" alt="tvtv.us" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td valign="top" rowspan="4">🇺🇸 United States</td><td align="right">1717</td><td nowrap><code>https://iptv-org.github.io/epg/guides/us/tvtv.us.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/tvtv.us.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/tvtv.us.yml/badge.svg" alt="tvtv.us" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">410</td><td nowrap><code>https://iptv-org.github.io/epg/guides/us/directv.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/directv.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/directv.com.yml/badge.svg" alt="directv.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">88</td><td nowrap><code>https://iptv-org.github.io/epg/guides/us/tvguide.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/tvguide.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/tvguide.com.yml/badge.svg" alt="tvguide.com" style="max-width: 100%;"></a></td></tr>
|
||||
<tr><td align="right">22</td><td nowrap><code>https://iptv-org.github.io/epg/guides/us/gatotv.com.epg.xml</code></td><td><a href="https://github.com/iptv-org/epg/actions/workflows/gatotv.com.yml"><img src="https://github.com/iptv-org/epg/actions/workflows/gatotv.com.yml/badge.svg" alt="gatotv.com" style="max-width: 100%;"></a></td></tr>
|
||||
|
|
524
package-lock.json
generated
524
package-lock.json
generated
|
@ -19,17 +19,20 @@
|
|||
"fs-extra": "^10.0.1",
|
||||
"glob": "^7.2.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"inquirer": "^8.2.0",
|
||||
"jest": "^27.3.1",
|
||||
"libxmljs": "^0.19.7",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-include": "^0.4.3",
|
||||
"mockdate": "^3.0.5",
|
||||
"nedb-promises": "^5.0.3",
|
||||
"node-cleanup": "^2.1.2",
|
||||
"parse-duration": "^1.0.0",
|
||||
"pdf-parse": "^1.1.1",
|
||||
"signale": "^1.4.0",
|
||||
"srcset": "^4.0.0",
|
||||
"tabletojson": "^2.0.7",
|
||||
"transliteration": "^2.2.0",
|
||||
"wildcard-match": "^5.1.2"
|
||||
}
|
||||
},
|
||||
|
@ -1397,11 +1400,40 @@
|
|||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/bindings": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz",
|
||||
"integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew=="
|
||||
},
|
||||
"node_modules/bl": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||
"dependencies": {
|
||||
"buffer": "^5.5.0",
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
|
@ -1462,6 +1494,29 @@
|
|||
"node-int64": "^0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
|
@ -1554,6 +1609,11 @@
|
|||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/chardet": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
|
||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
|
||||
},
|
||||
"node_modules/cheerio": {
|
||||
"version": "1.0.0-rc.10",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
|
||||
|
@ -1604,6 +1664,36 @@
|
|||
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
|
||||
"integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA=="
|
||||
},
|
||||
"node_modules/cli-cursor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
|
||||
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
|
||||
"dependencies": {
|
||||
"restore-cursor": "^3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-spinners": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
|
||||
"integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-width": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
|
||||
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
|
@ -1614,6 +1704,14 @@
|
|||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/clone": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/clone-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
||||
|
@ -1921,6 +2019,14 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/defaults": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
|
||||
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
|
||||
"dependencies": {
|
||||
"clone": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/defer-to-connect": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
|
||||
|
@ -2265,6 +2371,19 @@
|
|||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/external-editor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
|
||||
"dependencies": {
|
||||
"chardet": "^0.7.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"tmp": "^0.0.33"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
|
@ -2692,6 +2811,25 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/ignore-walk": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
|
||||
|
@ -2747,6 +2885,52 @@
|
|||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
|
||||
},
|
||||
"node_modules/inquirer": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz",
|
||||
"integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==",
|
||||
"dependencies": {
|
||||
"ansi-escapes": "^4.2.1",
|
||||
"chalk": "^4.1.1",
|
||||
"cli-cursor": "^3.1.0",
|
||||
"cli-width": "^3.0.0",
|
||||
"external-editor": "^3.0.3",
|
||||
"figures": "^3.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mute-stream": "0.0.8",
|
||||
"ora": "^5.4.1",
|
||||
"run-async": "^2.4.0",
|
||||
"rxjs": "^7.2.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"through": "^2.3.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/inquirer/node_modules/escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/inquirer/node_modules/figures": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
|
||||
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
|
||||
"dependencies": {
|
||||
"escape-string-regexp": "^1.0.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-arrayish": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
|
@ -2812,6 +2996,14 @@
|
|||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/is-interactive": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
|
||||
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
|
@ -2849,6 +3041,17 @@
|
|||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||
},
|
||||
"node_modules/is-unicode-supported": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
|
||||
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
|
@ -3766,6 +3969,21 @@
|
|||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"node_modules/log-symbols": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
|
||||
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
|
||||
"dependencies": {
|
||||
"chalk": "^4.1.0",
|
||||
"is-unicode-supported": "^0.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/logform": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz",
|
||||
|
@ -3948,6 +4166,11 @@
|
|||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/mute-stream": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
|
||||
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
|
||||
},
|
||||
"node_modules/nan": {
|
||||
"version": "2.14.2",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
|
||||
|
@ -3990,6 +4213,11 @@
|
|||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
|
||||
"integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw="
|
||||
},
|
||||
"node_modules/node-ensure": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
|
||||
|
@ -4207,6 +4435,28 @@
|
|||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ora": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
|
||||
"integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
|
||||
"dependencies": {
|
||||
"bl": "^4.1.0",
|
||||
"chalk": "^4.1.0",
|
||||
"cli-cursor": "^3.1.0",
|
||||
"cli-spinners": "^2.5.0",
|
||||
"is-interactive": "^1.0.0",
|
||||
"is-unicode-supported": "^0.1.0",
|
||||
"log-symbols": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wcwidth": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
|
@ -4658,6 +4908,18 @@
|
|||
"lowercase-keys": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/restore-cursor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
|
||||
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
|
||||
"dependencies": {
|
||||
"onetime": "^5.1.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
|
@ -4672,6 +4934,22 @@
|
|||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/run-async": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
|
||||
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
|
||||
"engines": {
|
||||
"node": ">=0.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/rxjs": {
|
||||
"version": "7.5.4",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
|
||||
"integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
|
@ -5096,6 +5374,22 @@
|
|||
"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
|
||||
"integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w=="
|
||||
},
|
||||
"node_modules/through": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.0.33",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
||||
"dependencies": {
|
||||
"os-tmpdir": "~1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tmpl": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
|
@ -5144,6 +5438,21 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/transliteration": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.2.0.tgz",
|
||||
"integrity": "sha512-o29GDWtecNoK4TNfnJQesGluFPiza+U8NoiKrErU8eTNlVgma6w1LV/tTiGo+waFLkhtL9WxrW0lXhZKmm7msQ==",
|
||||
"dependencies": {
|
||||
"yargs": "^16.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"slugify": "dist/bin/slugify",
|
||||
"transliterate": "dist/bin/transliterate"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
|
@ -5319,6 +5628,14 @@
|
|||
"makeerror": "1.0.12"
|
||||
}
|
||||
},
|
||||
"node_modules/wcwidth": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
|
||||
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
|
||||
"dependencies": {
|
||||
"defaults": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
|
||||
|
@ -6650,11 +6967,26 @@
|
|||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
||||
},
|
||||
"bindings": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz",
|
||||
"integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew=="
|
||||
},
|
||||
"bl": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||
"requires": {
|
||||
"buffer": "^5.5.0",
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
|
@ -6702,6 +7034,15 @@
|
|||
"node-int64": "^0.4.0"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
|
@ -6765,6 +7106,11 @@
|
|||
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
|
||||
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="
|
||||
},
|
||||
"chardet": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
|
||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
|
||||
},
|
||||
"cheerio": {
|
||||
"version": "1.0.0-rc.10",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
|
||||
|
@ -6806,6 +7152,24 @@
|
|||
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
|
||||
"integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA=="
|
||||
},
|
||||
"cli-cursor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
|
||||
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
|
||||
"requires": {
|
||||
"restore-cursor": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"cli-spinners": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
|
||||
"integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="
|
||||
},
|
||||
"cli-width": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
|
||||
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
|
||||
},
|
||||
"cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
|
@ -6816,6 +7180,11 @@
|
|||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"clone": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
|
||||
},
|
||||
"clone-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
||||
|
@ -7060,6 +7429,14 @@
|
|||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
|
||||
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
|
||||
},
|
||||
"defaults": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
|
||||
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
|
||||
"requires": {
|
||||
"clone": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"defer-to-connect": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
|
||||
|
@ -7303,6 +7680,16 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"external-editor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
|
||||
"requires": {
|
||||
"chardet": "^0.7.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"tmp": "^0.0.33"
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
|
@ -7621,6 +8008,11 @@
|
|||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
|
||||
},
|
||||
"ignore-walk": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
|
||||
|
@ -7667,6 +8059,42 @@
|
|||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
|
||||
},
|
||||
"inquirer": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz",
|
||||
"integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==",
|
||||
"requires": {
|
||||
"ansi-escapes": "^4.2.1",
|
||||
"chalk": "^4.1.1",
|
||||
"cli-cursor": "^3.1.0",
|
||||
"cli-width": "^3.0.0",
|
||||
"external-editor": "^3.0.3",
|
||||
"figures": "^3.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mute-stream": "0.0.8",
|
||||
"ora": "^5.4.1",
|
||||
"run-async": "^2.4.0",
|
||||
"rxjs": "^7.2.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"through": "^2.3.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"figures": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
|
||||
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
|
||||
"requires": {
|
||||
"escape-string-regexp": "^1.0.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
|
@ -7700,6 +8128,11 @@
|
|||
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
|
||||
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="
|
||||
},
|
||||
"is-interactive": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
|
||||
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
|
@ -7725,6 +8158,11 @@
|
|||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||
},
|
||||
"is-unicode-supported": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
|
||||
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
|
@ -8436,6 +8874,15 @@
|
|||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"log-symbols": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
|
||||
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"is-unicode-supported": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"logform": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz",
|
||||
|
@ -8584,6 +9031,11 @@
|
|||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"mute-stream": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
|
||||
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.14.2",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
|
||||
|
@ -8622,6 +9074,11 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
|
||||
"integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw="
|
||||
},
|
||||
"node-ensure": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
|
||||
|
@ -8795,6 +9252,22 @@
|
|||
"word-wrap": "~1.2.3"
|
||||
}
|
||||
},
|
||||
"ora": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
|
||||
"integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
|
||||
"requires": {
|
||||
"bl": "^4.1.0",
|
||||
"chalk": "^4.1.0",
|
||||
"cli-cursor": "^3.1.0",
|
||||
"cli-spinners": "^2.5.0",
|
||||
"is-interactive": "^1.0.0",
|
||||
"is-unicode-supported": "^0.1.0",
|
||||
"log-symbols": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wcwidth": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
|
@ -9128,6 +9601,15 @@
|
|||
"lowercase-keys": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"restore-cursor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
|
||||
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
|
||||
"requires": {
|
||||
"onetime": "^5.1.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
|
@ -9136,6 +9618,19 @@
|
|||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"run-async": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
|
||||
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
|
||||
},
|
||||
"rxjs": {
|
||||
"version": "7.5.4",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
|
||||
"integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
|
||||
"requires": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
|
@ -9451,6 +9946,19 @@
|
|||
"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
|
||||
"integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w=="
|
||||
},
|
||||
"through": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||
},
|
||||
"tmp": {
|
||||
"version": "0.0.33",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
||||
"requires": {
|
||||
"os-tmpdir": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"tmpl": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
|
@ -9487,6 +9995,14 @@
|
|||
"punycode": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"transliteration": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/transliteration/-/transliteration-2.2.0.tgz",
|
||||
"integrity": "sha512-o29GDWtecNoK4TNfnJQesGluFPiza+U8NoiKrErU8eTNlVgma6w1LV/tTiGo+waFLkhtL9WxrW0lXhZKmm7msQ==",
|
||||
"requires": {
|
||||
"yargs": "^16.1.0"
|
||||
}
|
||||
},
|
||||
"triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
|
@ -9611,6 +10127,14 @@
|
|||
"makeerror": "1.0.12"
|
||||
}
|
||||
},
|
||||
"wcwidth": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
|
||||
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
|
||||
"requires": {
|
||||
"defaults": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"webidl-conversions": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
|
||||
|
|
|
@ -4,11 +4,13 @@
|
|||
"channels:validate": "node scripts/commands/channels/validate.js",
|
||||
"channels:lint": "node scripts/commands/channels/lint.js",
|
||||
"channels:parse": "node scripts/commands/channels/parse.js",
|
||||
"channels:editor": "node scripts/commands/channels/editor.js",
|
||||
"queue:create": "node scripts/commands/queue/create.js",
|
||||
"cluster:load": "node scripts/commands/cluster/load.js",
|
||||
"programs:save": "node scripts/commands/programs/save.js",
|
||||
"guides:update": "node scripts/commands/guides/update.js",
|
||||
"api:update": "node scripts/commands/api/update.js",
|
||||
"api:load": "mkdir -p scripts/data && curl -L -o scripts/data/channels.json https://iptv-org.github.io/api/channels.json",
|
||||
"readme:update": "node scripts/commands/readme/update.js",
|
||||
"test": "npx jest --runInBand",
|
||||
"test:commands": "npx jest --runInBand -- commands",
|
||||
|
@ -36,17 +38,20 @@
|
|||
"fs-extra": "^10.0.1",
|
||||
"glob": "^7.2.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"inquirer": "^8.2.0",
|
||||
"jest": "^27.3.1",
|
||||
"libxmljs": "^0.19.7",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-include": "^0.4.3",
|
||||
"mockdate": "^3.0.5",
|
||||
"nedb-promises": "^5.0.3",
|
||||
"node-cleanup": "^2.1.2",
|
||||
"parse-duration": "^1.0.0",
|
||||
"pdf-parse": "^1.1.1",
|
||||
"signale": "^1.4.0",
|
||||
"srcset": "^4.0.0",
|
||||
"tabletojson": "^2.0.7",
|
||||
"transliteration": "^2.2.0",
|
||||
"wildcard-match": "^5.1.2"
|
||||
}
|
||||
}
|
||||
|
|
117
scripts/commands/channels/editor.js
Normal file
117
scripts/commands/channels/editor.js
Normal file
|
@ -0,0 +1,117 @@
|
|||
const { api, parser, xml, file, logger } = require('../../core')
|
||||
const { transliterate } = require('transliteration')
|
||||
const nodeCleanup = require('node-cleanup')
|
||||
const { program } = require('commander')
|
||||
const inquirer = require('inquirer')
|
||||
|
||||
program
|
||||
.requiredOption('-i, --input <file>', 'Load channels from the file')
|
||||
.option('-c, --country <name>', 'Source country', 'us')
|
||||
.parse(process.argv)
|
||||
|
||||
const options = program.opts()
|
||||
const defaultCountry = options.country
|
||||
const newLabel = ` [new]`
|
||||
|
||||
let site
|
||||
let channels = []
|
||||
|
||||
async function main() {
|
||||
await api.channels.load()
|
||||
let result = await parser.parseChannels(options.input)
|
||||
site = result.site
|
||||
channels = result.channels
|
||||
for (const channel of channels) {
|
||||
if (channel.xmltv_id) continue
|
||||
let choices = await getOptions(channel)
|
||||
const question = {
|
||||
name: 'option',
|
||||
message: `Choose an option:`,
|
||||
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 [name, xmltv_id] = selected.option
|
||||
.replace(/ \[.*\]/, '')
|
||||
.split('|')
|
||||
.map(i => i.trim().replace(newLabel, ''))
|
||||
channel.xmltv_id = xmltv_id
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
function save() {
|
||||
const output = xml.create(channels, site)
|
||||
|
||||
file.writeSync(options.input, output)
|
||||
|
||||
logger.info(`\nFile '${options.input}' successfully saved`)
|
||||
}
|
||||
|
||||
nodeCleanup(() => {
|
||||
save()
|
||||
})
|
||||
|
||||
async function getInput(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'] }
|
||||
}
|
||||
|
||||
async function getOptions(channel) {
|
||||
const channels = await api.channels.all()
|
||||
const similar = await getSimilar(channels, channel)
|
||||
let variants = []
|
||||
variants.push(`${channel.name.trim()} | ${generateCode(channel.name, defaultCountry)}${newLabel}`)
|
||||
similar.forEach(i => {
|
||||
variants.push(`${i.name} | ${i.id} [api]`)
|
||||
})
|
||||
variants.push(`Overwrite...`)
|
||||
variants.push(`Skip...`)
|
||||
|
||||
return variants
|
||||
}
|
||||
|
||||
async function getSimilar(list, channel) {
|
||||
return list.filter(i =>
|
||||
i.name
|
||||
.toLowerCase()
|
||||
.replace(/\s|-|:/gi, '')
|
||||
.startsWith(
|
||||
channel.name
|
||||
.replace(/(\s|-|:)/gi, '')
|
||||
.slice(0, 8)
|
||||
.toLowerCase()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
function generateCode(name, country) {
|
||||
const id = transliterate(name)
|
||||
.replace(/\+/gi, 'Plus')
|
||||
.replace(/[^a-z\d]+/gi, '')
|
||||
|
||||
return `${id}.${country}`
|
||||
}
|
|
@ -8,17 +8,19 @@ module.exports = {
|
|||
.add(1, 'd')
|
||||
.unix()}&includeDetails=true&channels=${channel.site_id}`
|
||||
},
|
||||
parser: function ({ content, channel }) {
|
||||
async parser({ content, channel }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel)
|
||||
items.forEach(item => {
|
||||
for (let item of items) {
|
||||
const details = await loadProgramDetails(item)
|
||||
programs.push({
|
||||
title: item.title,
|
||||
icon: item.images.thumbnail.url,
|
||||
description: details.description,
|
||||
start: parseStart(item).toJSON(),
|
||||
stop: parseStop(item).toJSON()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return programs
|
||||
},
|
||||
|
@ -40,6 +42,17 @@ module.exports = {
|
|||
}
|
||||
}
|
||||
|
||||
async function loadProgramDetails(item) {
|
||||
if (!item.ID) return {}
|
||||
const url = `https://clientapi.tv.delta.nl/guide/4/details/${item.ID}?X-Response-Version=4.5`
|
||||
const data = await axios
|
||||
.get(url)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
return data || {}
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return dayjs.unix(item.start)
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
// node ./scripts/channels.js --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl_nl.channels.xml
|
||||
// npx epg-grabber --config=sites/delta.nl/delta.nl.config.js --channels=sites/delta.nl/delta.nl_nl.channels.xml --output=.gh-pages/guides/nl/delta.nl.epg.xml --days=2
|
||||
// npm run channels:parse --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl_nl.channels.xml
|
||||
// npx epg-grabber --config=sites/delta.nl/delta.nl.config.js --channels=sites/delta.nl/delta.nl_nl.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url, request } = require('./delta.nl.config.js')
|
||||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
|
||||
jest.mock('axios')
|
||||
|
||||
const date = dayjs.utc('2021-11-12', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '1',
|
||||
|
@ -20,25 +23,47 @@ it('can generate valid url', () => {
|
|||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = `{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}`
|
||||
const result = parser({ date, channel, content })
|
||||
it('can parse response', done => {
|
||||
axios.get.mockImplementation(() =>
|
||||
Promise.resolve({
|
||||
data: JSON.parse(
|
||||
`{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}`
|
||||
)
|
||||
})
|
||||
)
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2021-11-11T23:56:00.000Z',
|
||||
stop: '2021-11-12T00:22:00.000Z',
|
||||
title: 'NOS Journaal',
|
||||
icon: 'https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg'
|
||||
}
|
||||
])
|
||||
const content = `{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}`
|
||||
|
||||
parser({ date, channel, content })
|
||||
.then(result => {
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2021-11-11T23:56:00.000Z',
|
||||
stop: '2021-11-12T00:22:00.000Z',
|
||||
title: 'NOS Journaal',
|
||||
description:
|
||||
'Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.',
|
||||
icon: 'https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg'
|
||||
}
|
||||
])
|
||||
done()
|
||||
})
|
||||
.catch(error => {
|
||||
done(error)
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
it('can handle empty guide', done => {
|
||||
parser({
|
||||
date,
|
||||
channel,
|
||||
content: `{"code":500,"message":"Error retrieving guide"}`
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
.then(result => {
|
||||
expect(result).toMatchObject([])
|
||||
done()
|
||||
})
|
||||
.catch(error => {
|
||||
done(error)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="delta.nl">
|
||||
<channels>
|
||||
<channel lang="nl" xmltv_id="3sat.de" site_id="3016">3sat</channel>
|
||||
<channel lang="nl" xmltv_id="24KitchenNederland.us" site_id="19">24 Kitchen Nederland</channel>
|
||||
<channel lang="nl" xmltv_id="100NLTV.nl" site_id="34">100% NL TV</channel>
|
||||
<channel lang="nl" xmltv_id="192TV.nl" site_id="98">192 TV</channel>
|
||||
<channel lang="nl" xmltv_id="24KitchenNederland.us" site_id="19">24 Kitchen Nederland</channel>
|
||||
<channel lang="nl" xmltv_id="3sat.de" site_id="3016">3sat</channel>
|
||||
<channel lang="nl" xmltv_id="AAVISIE.nl" site_id="10000">AAVISIE</channel>
|
||||
<channel lang="nl" xmltv_id="AlbrandswaardTV.nl" site_id="3052">Albrandswaard TV</channel>
|
||||
<channel lang="nl" xmltv_id="AlJazeeraEnglish.qa" site_id="3076">Aljazeera English</channel>
|
||||
|
@ -69,8 +69,8 @@
|
|||
<channel lang="nl" xmltv_id="FilmBoxNederland.us" site_id="10017">FilmBox Nederland</channel>
|
||||
<channel lang="nl" xmltv_id="FoxNL.us" site_id="12">Fox NL</channel>
|
||||
<channel lang="nl" xmltv_id="France2.fr" site_id="50">France 2</channel>
|
||||
<channel lang="nl" xmltv_id="France3.fr" site_id="3120">France 3</channel>
|
||||
<channel lang="nl" xmltv_id="France24Francais.fr" site_id="3021">France 24 Français</channel>
|
||||
<channel lang="nl" xmltv_id="France3.fr" site_id="3120">France 3</channel>
|
||||
<channel lang="nl" xmltv_id="GemeenteWestlandTV.nl" site_id="3145">Gemeente Westland TV</channel>
|
||||
<channel lang="nl" xmltv_id="GL8.nl" site_id="3056">GL8</channel>
|
||||
<channel lang="nl" xmltv_id="GOTV.nl" site_id="71">GO-TV</channel>
|
||||
|
@ -82,7 +82,7 @@
|
|||
<channel lang="nl" xmltv_id="HustlerTVEurope.us" site_id="3044">Hustler TV Europe</channel>
|
||||
<channel lang="nl" xmltv_id="IdeaalTV.nl" site_id="3174">Ideaal TV</channel>
|
||||
<channel lang="nl" xmltv_id="IjsselmondTV.nl" site_id="3161">Ijsselmond TV</channel>
|
||||
<channel lang="nl" xmltv_id="InsightHD.nl" site_id="3149">Insight HD</channel>
|
||||
<channel lang="nl" xmltv_id="InsightTV.nl" site_id="3149">Insight TV</channel>
|
||||
<channel lang="nl" xmltv_id="InvestigationDiscoveryEurope.us" site_id="16">Investigation Discovery Europe</channel>
|
||||
<channel lang="nl" xmltv_id="JenZ.nl" site_id="17">JenZ</channel>
|
||||
<channel lang="nl" xmltv_id="KabelEinsDeutschland.de" site_id="3018">Kabel Eins Deutschland</channel>
|
||||
|
@ -166,6 +166,7 @@
|
|||
<channel lang="nl" xmltv_id="RTVArnhemTV.nl" site_id="3183">RTV Arnhem TV</channel>
|
||||
<channel lang="nl" xmltv_id="RTVFocusTV.nl" site_id="3186">RTV Focus TV</channel>
|
||||
<channel lang="nl" xmltv_id="RTVHorizon.nl" site_id="10012">RTV Horizon</channel>
|
||||
<channel lang="nl" xmltv_id="RTVOost.nl" site_id="3097">RTV Oost</channel>
|
||||
<channel lang="nl" xmltv_id="RTVPurmerend.nl" site_id="10018">RTV Purmerend</channel>
|
||||
<channel lang="nl" xmltv_id="RTVRijnstreekTV.nl" site_id="3181">RTV Rijnstreek TV</channel>
|
||||
<channel lang="nl" xmltv_id="RTVScheldemond.nl" site_id="68">RTV Scheldemond</channel>
|
||||
|
@ -199,8 +200,8 @@
|
|||
<channel lang="nl" xmltv_id="TraceSportStars.fr" site_id="3047">Trace Sport Stars</channel>
|
||||
<channel lang="nl" xmltv_id="TraceUrban.fr" site_id="3048">Trace Urban</channel>
|
||||
<channel lang="nl" xmltv_id="TRTTurk.tr" site_id="3023">TRT Türk</channel>
|
||||
<channel lang="nl" xmltv_id="TV5MondeEurope.fr" site_id="57">TV5Monde Europe</channel>
|
||||
<channel lang="nl" xmltv_id="TV538.nl" site_id="63">TV 538</channel>
|
||||
<channel lang="nl" xmltv_id="TV5MondeEurope.fr" site_id="57">TV5Monde Europe</channel>
|
||||
<channel lang="nl" xmltv_id="TVBerghem.nl" site_id="3081">TV Berghem</channel>
|
||||
<channel lang="nl" xmltv_id="TVDrenthe.nl" site_id="3099">TV Drenthe</channel>
|
||||
<channel lang="nl" xmltv_id="TVEInternacionalEuropa.es" site_id="3022">TVE Internacional Europa</channel>
|
||||
|
@ -208,7 +209,6 @@
|
|||
<channel lang="nl" xmltv_id="TVKrimpenerwaard.nl" site_id="3079">TV Krimpenerwaard</channel>
|
||||
<channel lang="nl" xmltv_id="TVNoord.nl" site_id="3098">TV Noord</channel>
|
||||
<channel lang="nl" xmltv_id="TVNunspeet.nl" site_id="3085">TV Nunspeet</channel>
|
||||
<channel lang="nl" xmltv_id="TVOost.nl" site_id="3097">TV Oost</channel>
|
||||
<channel lang="nl" xmltv_id="TVOranje.nl" site_id="99">TV Oranje</channel>
|
||||
<channel lang="nl" xmltv_id="TVRijnmond.nl" site_id="72">TV Rijnmond</channel>
|
||||
<channel lang="nl" xmltv_id="TVStichtseVecht.nl" site_id="3071">TV Stichtse Vecht</channel>
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
<channel lang="tr" xmltv_id="HaberGlobal.tr" site_id="5bac7dedcfef0b02fac035fd">Haber Global</channel>
|
||||
<channel lang="tr" xmltv_id="Haberturk.tr" site_id="58d29bb0eefad3db9c60629d">Habertürk</channel>
|
||||
<channel lang="tr" xmltv_id="HalkTV.tr" site_id="58d29bb0eefad3db9c606288">Halk TV</channel>
|
||||
<channel lang="tr" xmltv_id="InsightHD.nl" site_id="5dfc6dc2cfef0b201d222aa0">Insight HD</channel>
|
||||
<channel lang="tr" xmltv_id="InsightTV.nl" site_id="5dfc6dc2cfef0b201d222aa0">Insight HD</channel>
|
||||
<channel lang="tr" xmltv_id="Kanal7.tr" site_id="58d29bb0eefad3db9c60629c">Kanal 7</channel>
|
||||
<channel lang="tr" xmltv_id="KanalD.tr" site_id="58d29bb0eefad3db9c606258">Kanal D</channel>
|
||||
<channel lang="tr" xmltv_id="LiderTV.tr" site_id="61517908cfef0b1593cd5f9e">Lider TV</channel>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<channel lang="el" xmltv_id="Eurosport2.fr" site_id="638">Eurosport 2</channel>
|
||||
<channel lang="el" xmltv_id="FoxGreece.us" site_id="609">Fox Greece</channel>
|
||||
<channel lang="el" xmltv_id="FoxLifeGreece.us" site_id="570">Fox Life Greece</channel>
|
||||
<channel lang="el" xmltv_id="InsightHD.nl" site_id="81">Insight HD</channel>
|
||||
<channel lang="el" xmltv_id="InsightTV.nl" site_id="81">Insight HD</channel>
|
||||
<channel lang="el" xmltv_id="MadGreekz.gr" site_id="582">Mad Greekz</channel>
|
||||
<channel lang="el" xmltv_id="MadTV.gr" site_id="227">Mad TV</channel>
|
||||
<channel lang="el" xmltv_id="MTVLive.us" site_id="673">MTV Live</channel>
|
||||
|
|
79
sites/proximusmwc.be/proximusmwc.be.config.js
Normal file
79
sites/proximusmwc.be/proximusmwc.be.config.js
Normal file
|
@ -0,0 +1,79 @@
|
|||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
|
||||
module.exports = {
|
||||
site: 'proximusmwc.be',
|
||||
url: 'https://api.proximusmwc.be/v2/graphql',
|
||||
request: {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
data({ channel, date }) {
|
||||
return {
|
||||
query:
|
||||
'query ($language: String!, $startTime: Int!, $endTime: Int!, $options: SchedulesByIntervalOptions) { schedulesByInterval(language: $language, startTime: $startTime, endTime: $endTime, options: $options) { trailId programReferenceNumber channelId title category startTime endTime image { key url __typename } parentalRating detailUrl grouped description shortDescription category categoryId subCategory links { episodeNumber id seasonId seasonName seriesId seriesTitle title type __typename } seriesId __typename }}',
|
||||
variables: {
|
||||
startTime: date.unix(),
|
||||
endTime: date.add(1, 'd').unix(),
|
||||
language: 'fr',
|
||||
options: { channelIds: [channel.site_id] }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
parser: function ({ content, date, channel }) {
|
||||
const programs = []
|
||||
const items = parseItems(content)
|
||||
items.forEach(item => {
|
||||
programs.push({
|
||||
title: item.title,
|
||||
description: item.description,
|
||||
icon: parseIcon(item),
|
||||
category: parseCategory(item),
|
||||
start: dayjs.unix(item.startTime),
|
||||
stop: dayjs.unix(item.endTime)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const query = {
|
||||
operationName: 'getPlayableChannels',
|
||||
variables: { language: 'fr', id: '0' },
|
||||
query:
|
||||
'query getPlayableChannels($language: String!, $queryParams: ChannelQueryParams, $id: String) { playableChannels(language: $language, queryParams: $queryParams, id: $id) { id name language radio }}'
|
||||
}
|
||||
const data = await axios
|
||||
.post(`https://api.proximusmwc.be/v2/graphql`, query)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
const channels = []
|
||||
for (let item of data.data.playableChannels) {
|
||||
if (item.radio) continue
|
||||
channels.push({
|
||||
lang: item.language,
|
||||
site_id: item.id,
|
||||
name: item.name
|
||||
})
|
||||
}
|
||||
|
||||
return channels
|
||||
}
|
||||
}
|
||||
|
||||
function parseCategory(item) {
|
||||
return item.category ? item.category.replace(/^C\./, '') : null
|
||||
}
|
||||
|
||||
function parseIcon(item) {
|
||||
return item.image[0] ? item.image[0].url : null
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
const data = JSON.parse(content)
|
||||
if (!data || !data.data || !Array.isArray(data.data.schedulesByInterval)) return []
|
||||
|
||||
return data.data.schedulesByInterval
|
||||
}
|
68
sites/proximusmwc.be/proximusmwc.be.test.js
Normal file
68
sites/proximusmwc.be/proximusmwc.be.test.js
Normal file
|
@ -0,0 +1,68 @@
|
|||
// npm run channels:parse -- --config=./sites/proximusmwc.be/proximusmwc.be.config.js --output=./sites/proximusmwc.be/proximusmwc.be_be.channels.xml
|
||||
// npx epg-grabber --config=sites/proximusmwc.be/proximusmwc.be.config.js --channels=sites/proximusmwc.be/proximusmwc.be_be.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url, request } = require('./proximusmwc.be.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-03-04', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'UID0024',
|
||||
xmltv_id: 'DasErste.de'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url).toBe('https://api.proximusmwc.be/v2/graphql')
|
||||
})
|
||||
|
||||
it('can generate valid request headers', () => {
|
||||
expect(request.headers).toMatchObject({
|
||||
'Content-Type': 'application/json'
|
||||
})
|
||||
})
|
||||
|
||||
it('can generate valid request data', () => {
|
||||
expect(request.data({ channel, date })).toMatchObject({
|
||||
query:
|
||||
'query ($language: String!, $startTime: Int!, $endTime: Int!, $options: SchedulesByIntervalOptions) { schedulesByInterval(language: $language, startTime: $startTime, endTime: $endTime, options: $options) { trailId programReferenceNumber channelId title category startTime endTime image { key url __typename } parentalRating detailUrl grouped description shortDescription category categoryId subCategory links { episodeNumber id seasonId seasonName seriesId seriesTitle title type __typename } seriesId __typename }}',
|
||||
variables: {
|
||||
endTime: 1646438400,
|
||||
language: 'fr',
|
||||
options: { channelIds: ['UID0024'] },
|
||||
startTime: 1646352000
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = `{"data":{"schedulesByInterval":[{"trailId":"UID0024_202202225537","programReferenceNumber":"107504040014","channelId":"UID0024","title":"Der Bozen-Krimi","category":"C.Magazine","startTime":1646350800,"endTime":1646356200,"description":"Chiara Schoras alias \\"Capo\\" Sonja Schwarz muss im 14. Bozen-Krimi nicht nur einen widersprüchlichen Mordfall aufklären, sondern auch ein Geheimnis ans Licht bringen, das zwei Familien auf schmerzhafte Weise untrennbar verbindet.","image":[{"key":"source","url":"https://experience-cache.proximustv.be:443/posterserver/poster/EPG/250_250_BF6BF77FC28F72FA23EAEA6CAAE98B60.jpg","__typename":"Image"},{"key":"custom","url":"https://experience-cache.proximustv.be:443/posterserver/poster/EPG/w-%width%_h-%height%/250_250_BF6BF77FC28F72FA23EAEA6CAAE98B60.jpg","__typename":"Image"}]}]}}`
|
||||
const result = parser({ content, channel, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
start: '2022-03-03T23:40:00.000Z',
|
||||
stop: '2022-03-04T01:10:00.000Z',
|
||||
title: `Der Bozen-Krimi`,
|
||||
description:
|
||||
'Chiara Schoras alias "Capo" Sonja Schwarz muss im 14. Bozen-Krimi nicht nur einen widersprüchlichen Mordfall aufklären, sondern auch ein Geheimnis ans Licht bringen, das zwei Familien auf schmerzhafte Weise untrennbar verbindet.',
|
||||
category: 'Magazine',
|
||||
icon: 'https://experience-cache.proximustv.be:443/posterserver/poster/EPG/250_250_BF6BF77FC28F72FA23EAEA6CAAE98B60.jpg'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
date,
|
||||
channel,
|
||||
content: `{"data":{"schedulesByInterval":[]}}`
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
219
sites/proximusmwc.be/proximusmwc.be_be.channels.xml
Normal file
219
sites/proximusmwc.be/proximusmwc.be_be.channels.xml
Normal file
|
@ -0,0 +1,219 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="proximusmwc.be">
|
||||
<channels>
|
||||
<channel lang="de" xmltv_id="BRFernsehenNord.de" site_id="UID2348">BRF TV HD</channel>
|
||||
<channel lang="de" xmltv_id="DasErste.de" site_id="UID0024">Das Erste</channel>
|
||||
<channel lang="de" xmltv_id="RTLDeutschland.de" site_id="UID2210">RTL</channel>
|
||||
<channel lang="de" xmltv_id="ZDF.de" site_id="UID0030">ZDF</channel>
|
||||
<channel lang="en" xmltv_id="BBCEntertainmentEurope.uk" site_id="UID50316">BBC Ent</channel>
|
||||
<channel lang="en" xmltv_id="BBCFirstNederland.uk" site_id="UID0132">BBC First</channel>
|
||||
<channel lang="en" xmltv_id="BBCOne.uk" site_id="UID50071">BBC One</channel>
|
||||
<channel lang="en" xmltv_id="BBCTwo.uk" site_id="UID50295">BBC Two</channel>
|
||||
<channel lang="en" xmltv_id="BBCWorldNewsEurope.uk" site_id="UID50069">BBC World</channel>
|
||||
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="UID50032">CNN</channel>
|
||||
<channel lang="en" xmltv_id="ESportsOne.de" site_id="UID0689">eSportsONE</channel>
|
||||
<channel lang="en" xmltv_id="EuroNewsEnglish.fr" site_id="UID50085">Euronews E</channel>
|
||||
<channel lang="en" xmltv_id="ExtremeSportsChannel.nl" site_id="UID0100">Extreme</channel>
|
||||
<channel lang="en" xmltv_id="FashionTVEurope.fr" site_id="UID50031">FashionTV</channel>
|
||||
<channel lang="en" xmltv_id="MotorvisionTV.de" site_id="UID2063">MVTV</channel>
|
||||
<channel lang="en" xmltv_id="MTVLiveHD.us" site_id="UID50315">MTV Live HD</channel>
|
||||
<channel lang="en" xmltv_id="PenthouseGold.us" site_id="UID0461">Penthouse Gold</channel>
|
||||
<channel lang="es" xmltv_id="TVEInternacionalEuropa.es" site_id="UID50027">TVE Int</channel>
|
||||
<channel lang="fr" xmltv_id="13emeRue.us" site_id="UID2054">13è Rue HD</channel>
|
||||
<channel lang="fr" xmltv_id="2MMonde.ma" site_id="UID2045">2M Monde</channel>
|
||||
<channel lang="fr" xmltv_id="AB3.fr" site_id="UID50058">AB3</channel>
|
||||
<channel lang="fr" xmltv_id="ABXplore.be" site_id="UID0231">ABXPLO HD</channel>
|
||||
<channel lang="fr" xmltv_id="Action.fr" site_id="UID50019">Action</channel>
|
||||
<channel lang="fr" xmltv_id="AlAoulaEurope.ma" site_id="UID50141">Al Aoula</channel>
|
||||
<channel lang="fr" xmltv_id="AlJazeeraEnglish.qa" site_id="UID50162">Al Jazeera</channel>
|
||||
<channel lang="fr" xmltv_id="Animaux.fr" site_id="UID50053">Animaux</channel>
|
||||
<channel lang="fr" xmltv_id="AntenneCentreTelevision.be" site_id="UID2321">Antenne Centre HD</channel>
|
||||
<channel lang="fr" xmltv_id="ARTEFrancais.fr" site_id="UID50018">Arte</channel>
|
||||
<channel lang="fr" xmltv_id="Automotolachaine.fr" site_id="UID50111">AUTOMOTO</channel>
|
||||
<channel lang="fr" xmltv_id="Be1.be" site_id="UID0300">Be1</channel>
|
||||
<channel lang="fr" xmltv_id="BeCine.be" site_id="UID0301">Be Ciné</channel>
|
||||
<channel lang="fr" xmltv_id="BelRTL.be" site_id="UID0194">Bel RTL</channel>
|
||||
<channel lang="fr" xmltv_id="BeSeries.be" site_id="UID0302">Be Séries</channel>
|
||||
<channel lang="fr" xmltv_id="BoomerangFrance.us" site_id="UID50103">Boomerang F</channel>
|
||||
<channel lang="fr" xmltv_id="Bouke.be" site_id="UID2328">Bouké HD</channel>
|
||||
<channel lang="fr" xmltv_id="BX1.be" site_id="UID50075">bx1</channel>
|
||||
<channel lang="fr" xmltv_id="C8.fr" site_id="UID0312">C8</channel>
|
||||
<channel lang="fr" xmltv_id="CanalJ.fr" site_id="UID50057">Canal J</channel>
|
||||
<channel lang="fr" xmltv_id="CanalZoom.be" site_id="UID50146">Canal Zoom</channel>
|
||||
<channel lang="fr" xmltv_id="CartoonNetworkFrance.us" site_id="UID50021">Cartoon F</channel>
|
||||
<channel lang="fr" xmltv_id="CinePlusClassic.be" site_id="UID0305">Ciné+Classic</channel>
|
||||
<channel lang="fr" xmltv_id="CinePlusFrisson.be" site_id="UID0304">Ciné+Frisson</channel>
|
||||
<channel lang="fr" xmltv_id="CinePlusPremier.be" site_id="UID0303">Ciné+Premier</channel>
|
||||
<channel lang="fr" xmltv_id="ClubRTL.be" site_id="UID50070">ClubRTL</channel>
|
||||
<channel lang="fr" xmltv_id="ComedyCentralFrance.us" site_id="UID2068">Comedy Central F</channel>
|
||||
<channel lang="fr" xmltv_id="CrimeDistrict.fr" site_id="UID0189">Crime District</channel>
|
||||
<channel lang="fr" xmltv_id="DiscoveryChannelFrance.us" site_id="UID0090">Discovery F</channel>
|
||||
<channel lang="fr" xmltv_id="DisneyChannelFrance.us" site_id="UID2042">Disn Ch HD F</channel>
|
||||
<channel lang="fr" xmltv_id="DisneyJuniorFrance.us" site_id="UID50137">Disn Jr F</channel>
|
||||
<channel lang="fr" xmltv_id="DisneyPlusFrance.us" site_id="UID0131">Disney+</channel>
|
||||
<channel lang="fr" xmltv_id="DobbitTVFR.be" site_id="UID0043">Dobbit TV F</channel>
|
||||
<channel lang="fr" xmltv_id="DorcelXXX.nl" site_id="UID50099">Dorcel XXX</channel>
|
||||
<channel lang="fr" xmltv_id="EFrance.us" site_id="UID50109">E! F</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenProLeague1FR.uk" site_id="UID2131">Eleven Pro League 1 (FR)</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenProLeague2FR.uk" site_id="UID2183">Eleven Pro League 2 (FR)</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenProLeague3FR.uk" site_id="UID2187">Eleven Pro League 3 (FR)</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenSports1FR.uk" site_id="UID0640">ES1 F</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenSports2FR.uk" site_id="UID0642">ES2 F</channel>
|
||||
<channel lang="fr" xmltv_id="ElevenSports3FR.uk" site_id="UID0648">ES3 F</channel>
|
||||
<channel lang="fr" xmltv_id="EuroNewsFrancais.fr" site_id="UID0154">Euronews F</channel>
|
||||
<channel lang="fr" xmltv_id="Eurosport1France.fr" site_id="UID50077">Eurosp F</channel>
|
||||
<channel lang="fr" xmltv_id="Eurosport2France.fr" site_id="UID50090">Eurosp2 F</channel>
|
||||
<channel lang="fr" xmltv_id="France2.fr" site_id="UID50088">France 2</channel>
|
||||
<channel lang="fr" xmltv_id="France24Francais.fr" site_id="UID50073">France 24 F</channel>
|
||||
<channel lang="fr" xmltv_id="France3.fr" site_id="UID50089">France 3</channel>
|
||||
<channel lang="fr" xmltv_id="France4.fr" site_id="UID50081">France 4</channel>
|
||||
<channel lang="fr" xmltv_id="France5.fr" site_id="UID50038">France 5</channel>
|
||||
<channel lang="fr" xmltv_id="GameOne.fr" site_id="UID2066">Game One</channel>
|
||||
<channel lang="fr" xmltv_id="Gulli.fr" site_id="UID2060">Gulli HD</channel>
|
||||
<channel lang="fr" xmltv_id="HistoireTV.fr" site_id="UID50013">Histoire</channel>
|
||||
<channel lang="fr" xmltv_id="KTO.fr" site_id="UID50164">KTO</channel>
|
||||
<channel lang="fr" xmltv_id="LCI.fr" site_id="UID50067">LCI</channel>
|
||||
<channel lang="fr" xmltv_id="LN24.be" site_id="UID0311">LN24</channel>
|
||||
<channel lang="fr" xmltv_id="MaghrebTV.be" site_id="DTV29670499">Maghreb TV</channel>
|
||||
<channel lang="fr" xmltv_id="Mangas.fr" site_id="UID50045">Mangas</channel>
|
||||
<channel lang="fr" xmltv_id="Matele.be" site_id="UID0121">MaTélé</channel>
|
||||
<channel lang="fr" xmltv_id="Melody.fr" site_id="UID50157">Melody.tv</channel>
|
||||
<channel lang="fr" xmltv_id="MezzoLiveHD.fr" site_id="UID0092">MezzoLive</channel>
|
||||
<channel lang="fr" xmltv_id="MTVFrance.us" site_id="UID50142">MTV F</channel>
|
||||
<channel lang="fr" xmltv_id="MTVHitsFrance.us" site_id="UID50331">MTV Hits</channel>
|
||||
<channel lang="fr" xmltv_id="MuseumTV.be" site_id="UID2320">Museum TV</channel>
|
||||
<channel lang="fr" xmltv_id="MyZenTV.fr" site_id="UID2317">MyZen.tv</channel>
|
||||
<channel lang="fr" xmltv_id="NationalGeographicFrance.us" site_id="UID50065">NGC F</channel>
|
||||
<channel lang="fr" xmltv_id="NationalGeographicWildFrance.us" site_id="UID0022">NGC Wild F</channel>
|
||||
<channel lang="fr" xmltv_id="NickelodeonFrance.us" site_id="UID50314">nick F</channel>
|
||||
<channel lang="fr" xmltv_id="NickelodeonJuniorFrance.us" site_id="UID2070">nick jr F</channel>
|
||||
<channel lang="fr" xmltv_id="Notele.be" site_id="UID2332">No Télé HD</channel>
|
||||
<channel lang="fr" xmltv_id="ParamountChannelFrance.us" site_id="UID2069">Paramount Channel</channel>
|
||||
<channel lang="fr" xmltv_id="PickxLiveFR.be" site_id="UID0679">PickxLive F HD</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusFR.be" site_id="UID0041">Pickx+ F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports10FR.be" site_id="UID0674">Pickx+ Sports 10 F HD</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports2FR.be" site_id="UID0651">Pickx+ Sports 1 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports3FR.be" site_id="UID0653">Pickx+ Sports 3 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports4FR.be" site_id="UID0654">Pickx+ Sports 4 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports5FR.be" site_id="UID0655">Pickx+ Sports 5 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports6FR.be" site_id="UID0656">Pickx+ Sports 6 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports7FR.be" site_id="UID50257">Pickx+ Sports 7 F</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports8FR.be" site_id="UID0671">Pickx+ Sports 8 F HD</channel>
|
||||
<channel lang="fr" xmltv_id="PickxPlusSports9FR.be" site_id="UID0672">Pickx+ Sports 9 F HD</channel>
|
||||
<channel lang="fr" xmltv_id="PinkX.fr" site_id="UID50192">Pink</channel>
|
||||
<channel lang="fr" xmltv_id="PlugRTL.be" site_id="UID50026">PlugRTL</channel>
|
||||
<channel lang="fr" xmltv_id="RadioContact.be" site_id="UID50014">ContactV</channel>
|
||||
<channel lang="fr" xmltv_id="RFMTV.fr" site_id="UID50043">RFM TV</channel>
|
||||
<channel lang="fr" xmltv_id="RTBFLaTrois.be" site_id="UID50302">La Trois</channel>
|
||||
<channel lang="fr" xmltv_id="RTBFLaUne.be" site_id="UID50060">La Une</channel>
|
||||
<channel lang="fr" xmltv_id="RTCTeleLiege.be" site_id="UID2335">RTC Liège HD</channel>
|
||||
<channel lang="fr" xmltv_id="RTLTVI.be" site_id="UID50072">RTL-TVI</channel>
|
||||
<channel lang="fr" xmltv_id="ScienceVieTV.fr" site_id="UID50102">Sc et Vie TV</channel>
|
||||
<channel lang="fr" xmltv_id="Studio100TVFR.be" site_id="UID0108">ST100TV F</channel>
|
||||
<channel lang="fr" xmltv_id="SyfyFrance.us" site_id="UID50064">SyFy F</channel>
|
||||
<channel lang="fr" xmltv_id="TCMCinema.us" site_id="UID50097">TCM cinéma</channel>
|
||||
<channel lang="fr" xmltv_id="TeleMB.be" site_id="UID2340">Télé MB HD</channel>
|
||||
<channel lang="fr" xmltv_id="Telesambre.be" site_id="UID0117">Télé Sambre</channel>
|
||||
<channel lang="fr" xmltv_id="TF1.fr" site_id="UID50068">TF1</channel>
|
||||
<channel lang="fr" xmltv_id="Tiji.fr" site_id="UID50095">Tiji</channel>
|
||||
<channel lang="fr" xmltv_id="Tipik.be" site_id="UID50059">TIPIK</channel>
|
||||
<channel lang="fr" xmltv_id="TipikVision.be" site_id="UID0025">TIPIK vision</channel>
|
||||
<channel lang="fr" xmltv_id="TMC.fr" site_id="UID2276">TMC HD</channel>
|
||||
<channel lang="fr" xmltv_id="TraceUrban.fr" site_id="UID50028">TraceUrban</channel>
|
||||
<channel lang="fr" xmltv_id="Trek.fr" site_id="UID50023">TREK</channel>
|
||||
<channel lang="fr" xmltv_id="TV5MondeFranceBelgiqueSuisse.fr" site_id="UID50030">TV5 Monde</channel>
|
||||
<channel lang="fr" xmltv_id="TVBreizh.fr" site_id="UID50012">TV Breizh</channel>
|
||||
<channel lang="fr" xmltv_id="TVCom.be" site_id="UID0119">TV Com</channel>
|
||||
<channel lang="fr" xmltv_id="TVLux.be" site_id="UID0120">TV Lux</channel>
|
||||
<channel lang="fr" xmltv_id="UshuaiaTV.fr" site_id="UID50025">Ushuaïa</channel>
|
||||
<channel lang="fr" xmltv_id="Vedia.be" site_id="UID0118">Vedia</channel>
|
||||
<channel lang="it" xmltv_id="MediasetItalia.it" site_id="UID0133">Mediaset</channel>
|
||||
<channel lang="it" xmltv_id="Rai1.it" site_id="UID50048">RAI Uno</channel>
|
||||
<channel lang="it" xmltv_id="Rai2.it" site_id="UID50015">RAI Due</channel>
|
||||
<channel lang="it" xmltv_id="Rai3.it" site_id="UID50020">RAI Tre</channel>
|
||||
<channel lang="nl" xmltv_id="AnimalPlanetEurope.us" site_id="UID50092">Animal Pl</channel>
|
||||
<channel lang="nl" xmltv_id="ATV.be" site_id="UID50116">ATV</channel>
|
||||
<channel lang="nl" xmltv_id="AVS.be" site_id="UID2323">AVS HD</channel>
|
||||
<channel lang="nl" xmltv_id="AVSGent.be" site_id="UID50117">AVS Gent</channel>
|
||||
<channel lang="nl" xmltv_id="BabyTVEurope.uk" site_id="UID50052">Baby TV N</channel>
|
||||
<channel lang="nl" xmltv_id="BoomerangNederland.us" site_id="UID50305">Boomerang N</channel>
|
||||
<channel lang="nl" xmltv_id="Bruzz.be" site_id="UID2326">BRUZZ HD</channel>
|
||||
<channel lang="nl" xmltv_id="Canvas.be" site_id="UID50084">Canvas</channel>
|
||||
<channel lang="nl" xmltv_id="CartoonNetworkNederland.us" site_id="UID50022">Cartoon N</channel>
|
||||
<channel lang="nl" xmltv_id="ComedyCentralNederland.us" site_id="UID50144">Comedy Central N</channel>
|
||||
<channel lang="nl" xmltv_id="DiscoveryChannelNederland.us" site_id="UID50017">Discovery N</channel>
|
||||
<channel lang="nl" xmltv_id="DiscoveryScienceUK.us" site_id="UID50029">Disc Science</channel>
|
||||
<channel lang="nl" xmltv_id="DisneyChannelNederland.us" site_id="UID50329">Disn Ch N</channel>
|
||||
<channel lang="nl" xmltv_id="DisneyJuniorNederland.us" site_id="UID0080">DisnJr N</channel>
|
||||
<channel lang="nl" xmltv_id="DobbitTVNL.be" site_id="UID0037">Dobbit TV N</channel>
|
||||
<channel lang="nl" xmltv_id="Dusk.nl" site_id="UID0628">Dusk</channel>
|
||||
<channel lang="nl" xmltv_id="EclipsTV.be" site_id="UID0211">Eclips</channel>
|
||||
<channel lang="nl" xmltv_id="Een.be" site_id="UID50037">één</channel>
|
||||
<channel lang="nl" xmltv_id="EEurope.us" site_id="UID50128">E! N</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenProLeague1NL.uk" site_id="UID2181">Eleven Pro League 1 (NL)</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenProLeague2NL.uk" site_id="UID2185">Eleven Pro League 2 (NL)</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenProLeague3NL.uk" site_id="UID2189">Eleven Pro League 3 (NL)</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenSports1NL.uk" site_id="UID0641">ES1 N</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenSports2NL.uk" site_id="UID0643">ES2 N</channel>
|
||||
<channel lang="nl" xmltv_id="ElevenSports3NL.uk" site_id="UID0649">ES3 N</channel>
|
||||
<channel lang="nl" xmltv_id="Eurosport1.fr" site_id="UID50094">Eurosp N</channel>
|
||||
<channel lang="nl" xmltv_id="Eurosport2.fr" site_id="UID50269">Eurosp2 N</channel>
|
||||
<channel lang="nl" xmltv_id="FocusWTV.be" site_id="UID2330">Focus TV HD</channel>
|
||||
<channel lang="nl" xmltv_id="FoxNL.us" site_id="UID0142">FOX</channel>
|
||||
<channel lang="nl" xmltv_id="HistoryHDEurope.us" site_id="UID50154">History</channel>
|
||||
<channel lang="nl" xmltv_id="InsightTV.nl" site_id="UID2350">Insight TV</channel>
|
||||
<channel lang="nl" xmltv_id="InvestigationDiscoveryNederland.us" site_id="UID50223">Inv Disc</channel>
|
||||
<channel lang="nl" xmltv_id="KanaalZ.be" site_id="UID50034">Kanaal Z</channel>
|
||||
<channel lang="nl" xmltv_id="Ketnet.be" site_id="UID50310">Ketnet</channel>
|
||||
<channel lang="nl" xmltv_id="MentTV.be" site_id="UID50319">Ment TV</channel>
|
||||
<channel lang="nl" xmltv_id="MTV80s.us" site_id="UID50168">MTV 80s</channel>
|
||||
<channel lang="nl" xmltv_id="MTVNL.us" site_id="UID50143">MTV N</channel>
|
||||
<channel lang="nl" xmltv_id="NationalGeographicNederland.us" site_id="UID50087">NGC N</channel>
|
||||
<channel lang="nl" xmltv_id="NationalGeographicWildEurope.us" site_id="UID0023">NGC Wild N</channel>
|
||||
<channel lang="nl" xmltv_id="NickelodeonNederlandBelgie.us" site_id="UID50039">nick N</channel>
|
||||
<channel lang="nl" xmltv_id="NickJrNetherland.us" site_id="UID50153">nick jr N</channel>
|
||||
<channel lang="nl" xmltv_id="NicktoonsNetherland.us" site_id="UID50165">nick Toons</channel>
|
||||
<channel lang="nl" xmltv_id="Njam.be" site_id="UID0232">Njam! HD</channel>
|
||||
<channel lang="nl" xmltv_id="NPO1.nl" site_id="UID50047">NPO 1</channel>
|
||||
<channel lang="nl" xmltv_id="NPO2.nl" site_id="UID50080">NPO 2</channel>
|
||||
<channel lang="nl" xmltv_id="NPO3.nl" site_id="UID50079">NPO 3</channel>
|
||||
<channel lang="nl" xmltv_id="OutTV.nl" site_id="UID0307">OUT tv</channel>
|
||||
<channel lang="nl" xmltv_id="PassieXXX.nl" site_id="UID50151">Passie XXX</channel>
|
||||
<channel lang="nl" xmltv_id="PebbleTV.nl" site_id="UID0019">Pebble TV</channel>
|
||||
<channel lang="nl" xmltv_id="PickxLiveNL.be" site_id="UID0629">PickxLive N HD</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusNL.be" site_id="UID0042">Pickx+ N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports10NL.be" site_id="UID50225">Pickx+ Sports 10 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports1NL.be" site_id="UID0601">Pickx+ Sports 1 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports2NL.be" site_id="UID0602">Pickx+ Sports 2 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports3NL.be" site_id="UID0603">Pickx+ Sports 3 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports4NL.be" site_id="UID0604">Pickx+ Sports 4 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports5NL.be" site_id="UID0605">Pickx+ Sports 5 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports6NL.be" site_id="UID0606">Pickx+ Sports 6 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports7NL.be" site_id="UID50219">Pickx+ Sports 7 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports8NL.be" site_id="UID50230">Pickx+ Sports 8 N</channel>
|
||||
<channel lang="nl" xmltv_id="PickxPlusSports9NL.be" site_id="UID50224">Pickx+ Sports 9 N</channel>
|
||||
<channel lang="nl" xmltv_id="PlattelandsTV.be" site_id="UID0062">Plattelands</channel>
|
||||
<channel lang="nl" xmltv_id="Play4.be" site_id="UID50083">Play4</channel>
|
||||
<channel lang="nl" xmltv_id="Play5.be" site_id="UID50066">Play5</channel>
|
||||
<channel lang="nl" xmltv_id="Play6.be" site_id="UID0146">Play6</channel>
|
||||
<channel lang="nl" xmltv_id="Play7.be" site_id="UID2293">Play7 HD</channel>
|
||||
<channel lang="nl" xmltv_id="RingTV.be" site_id="UID2333">Ring TV HD</channel>
|
||||
<channel lang="nl" xmltv_id="ROBTV.be" site_id="UID50121">ROB TV</channel>
|
||||
<channel lang="nl" xmltv_id="RTVKempen.be" site_id="UID2336">RTV Kempen HD</channel>
|
||||
<channel lang="nl" xmltv_id="RTVMech.be" site_id="UID2339">RTV Mech HD</channel>
|
||||
<channel lang="nl" xmltv_id="Sport10.be" site_id="UID2059">Sport 10</channel>
|
||||
<channel lang="nl" xmltv_id="StingrayClassica.ca" site_id="UID50198">Classica</channel>
|
||||
<channel lang="nl" xmltv_id="Studio100Hits.be" site_id="UID2032">ST100 Hits</channel>
|
||||
<channel lang="nl" xmltv_id="Studio100NL.be" site_id="UID2034">ST100TV N</channel>
|
||||
<channel lang="nl" xmltv_id="TLCNederland.us" site_id="UID2173">TLC</channel>
|
||||
<channel lang="nl" xmltv_id="TVLimburg.be" site_id="UID50120">TVLimbC</channel>
|
||||
<channel lang="nl" xmltv_id="TVOost.be" site_id="UID50129">TV Oost</channel>
|
||||
<channel lang="nl" xmltv_id="VlaamsParlementTV.be" site_id="UID1102">Vlaamsparlement.tv</channel>
|
||||
<channel lang="nl" xmltv_id="VTM.be" site_id="UID50040">VTM</channel>
|
||||
<channel lang="nl" xmltv_id="VTM2.be" site_id="UID50044">VTM 2</channel>
|
||||
<channel lang="nl" xmltv_id="VTM3.be" site_id="UID50082">VTM 3</channel>
|
||||
<channel lang="nl" xmltv_id="VTM4.be" site_id="UID50301">VTM 4</channel>
|
||||
<channel lang="nl" xmltv_id="VTMGold.be" site_id="UID0313">VTM Gold</channel>
|
||||
<channel lang="nl" xmltv_id="VTMKids.be" site_id="UID2175">VTM Kids</channel>
|
||||
</channels>
|
||||
</site>
|
|
@ -244,7 +244,7 @@
|
|||
<channel lang="en" xmltv_id="GreatMoviesAction.uk" site_id="1810">Great! Movies Action</channel>
|
||||
<channel lang="en" xmltv_id="GreatMoviesClassic.uk" site_id="1805">Great! Movies Classic</channel>
|
||||
<channel lang="en" xmltv_id="I24NewsEnglish.il" site_id="208">I24 News English</channel>
|
||||
<channel lang="en" xmltv_id="InsightHD.nl" site_id="1029">Insight HD</channel>
|
||||
<channel lang="en" xmltv_id="InsightTV.nl" site_id="1029">Insight HD</channel>
|
||||
<channel lang="en" xmltv_id="InsightUHD.nl" site_id="667">Insight UHD</channel>
|
||||
<channel lang="en" xmltv_id="ITV2.uk" site_id="219">ITV 2</channel>
|
||||
<channel lang="en" xmltv_id="ITV3.uk" site_id="220">ITV 3</channel>
|
||||
|
|
|
@ -1718,5 +1718,14 @@
|
|||
<channel lang="en" xmltv_id="UnivisionEste.us" site_id="68049">Univision East (National Feed)</channel>
|
||||
<channel lang="en" xmltv_id="UnivisionOeste.us" site_id="14762">Univision West (National Feed)</channel>
|
||||
<channel lang="en" xmltv_id="UniMasOeste.us" site_id="31541">Unimas West (National Feed)</channel>
|
||||
<channel lang="en" xmltv_id="Dust.us" site_id="112881">Dust</channel>
|
||||
<channel lang="en" xmltv_id="ETLive.us" site_id="110291">Entertainment Tonight Live</channel>
|
||||
<channel lang="en" xmltv_id="GameShowCentralEast.us" site_id="116474">Game Show Central </channel>
|
||||
<channel lang="en" xmltv_id="PlutoTVGameShowCentral.us" site_id="116474">Game Show Central (Pluto)</channel>
|
||||
<channel lang="en" xmltv_id="IFCFilmsPicks.us" site_id="115677">IFC Film Picks</channel>
|
||||
<channel lang="en" xmltv_id="WorldPokerTour.us" site_id="115677">World Poker Tour </channel>
|
||||
<channel lang="en" xmltv_id="PlutoTVWorldPokerTour.us" site_id="113372">World Poker Tour (Pluto)</channel>
|
||||
<channel lang="en" xmltv_id="PlutoTVTotallyTurtles.us" site_id="121107">Totally Turtles</channel>
|
||||
<channel lang="en" xmltv_id="FoxNewsNow.us" site_id="119219">LiveNow From FOX</channel>
|
||||
</channels>
|
||||
</site>
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<channel lang="id" xmltv_id="DWEnglish.de" site_id="5075">DW English</channel>
|
||||
<channel lang="id" xmltv_id="EuroNewsEnglish.fr" site_id="6412">EuroNews English</channel>
|
||||
<channel lang="id" xmltv_id="FashionTVAsia.fr" site_id="6511">Fashion TV Asia</channel>
|
||||
<channel lang="id" xmltv_id="FasionTVLOriginal.fr" site_id="6507">Fashion TV L'Original</channel>
|
||||
<channel lang="id" xmltv_id="FashionTVLOriginal.fr" site_id="6507">Fashion TV L'Original</channel>
|
||||
<channel lang="id" xmltv_id="FashionTVMidniteSecrets.fr" site_id="6504">Fashion TV Midnite Secret</channel>
|
||||
<channel lang="id" xmltv_id="HipHipHoree.id" site_id="7052">Hip Hip Horee!</channel>
|
||||
<channel lang="id" xmltv_id="Horee.id" site_id="6397">Horee!</channel>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue