diff --git a/.github/ISSUE_TEMPLATE/------channel-request.yml b/.github/ISSUE_TEMPLATE/------channel-request.yml
index 7e383a4748..0452b452d1 100644
--- a/.github/ISSUE_TEMPLATE/------channel-request.yml
+++ b/.github/ISSUE_TEMPLATE/------channel-request.yml
@@ -1,5 +1,6 @@
-name: \U0001F4FA Channel Request
+name: 📺 Channel Request
description: Request to add a channel into the playlist
+title: "Add: "
labels: [ "channel request" ]
body:
diff --git a/.github/ISSUE_TEMPLATE/-----broken-stream.yml b/.github/ISSUE_TEMPLATE/-----broken-stream.yml
new file mode 100644
index 0000000000..a532733d85
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/-----broken-stream.yml
@@ -0,0 +1,76 @@
+name: 🛠 Broken Stream
+description: Report a broken stream
+title: "Replace: "
+labels: [ "broken stream" ]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please fill out the issue template as much as you can so we could efficiently process your request
+ **IMPORTANT**: An issue may contain a request for only one channel, otherwise it will be closed
+
+ Channels present in this repository come from variety of sources, some may have overbalanced load at times, temporal issues or just be far away from your location to play smoothly.
+ Please wait for a few hours at least before filling this form.
+
+ - type: checkboxes
+ id: preliminary
+ attributes:
+ label: I have verified that
+ options:
+ - label: I use the GitHub playlist link and not a downloaded/cached version of the file
+ required: true
+ - label: My TV player has updated this playlist after 0:00 GMT and is set to update it daily
+ required: true
+ - label: I am aware that the channel source may have temporal outages. It is broken/absent from the playlist for couple of hours or days
+ required: true
+
+ - type: input
+ id: name
+ attributes:
+ label: Channel Name
+ description: Full name of the channel. Please use the exact name, as in how it appears in the playlist.
+ placeholder: 'Fox Life Russia'
+ validations:
+ required: true
+
+ - type: dropdown
+ id: reason
+ attributes:
+ label: What happened to the stream?
+ options:
+ - It is now offline (disappeared from the playlist)
+ - It is stuck at a single frame/the same segment
+ - I see visual artifacts
+ - It is buffering to unplayable point
+ validations:
+ required: true
+
+ - type: input
+ id: playlist
+ attributes:
+ label: Playlist
+ description: What playlist was used to get the channel from?
+ placeholder: 'ex. https://iptv-org.github.io/iptv/countries/au.m3u'
+ validations:
+ required: true
+
+ - type: input
+ id: link
+ attributes:
+ label: Broken Link
+ description: Please specify the broken link from a playlist if you can
+ placeholder: 'ex. https://lnc-kdfw-fox-aws.tubi.video/index.m3u8'
+
+ - type: input
+ id: alt
+ attributes:
+ label: Possible Replacement
+ description: If you know an alternate non-protected source or the way to fix current stream please let us know
+ placeholder: 'ex. https://lnc-kdfw-fox-aws.tubi.video/index.m3u8'
+
+ - type: input
+ id: notes
+ attributes:
+ label: Notes
+ placeholder: 'Anything else we should know?'
diff --git a/.github/ISSUE_TEMPLATE/-----bug-report.md b/.github/ISSUE_TEMPLATE/-----bug-report.md
deleted file mode 100644
index cb7b32fcd0..0000000000
--- a/.github/ISSUE_TEMPLATE/-----bug-report.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: '🐞 Bug Report'
-about: Report an error in this repository
-title: 'Fix: xxx'
-labels: bug
-assignees: ''
----
-
-
diff --git a/.github/ISSUE_TEMPLATE/----broken-stream.md b/.github/ISSUE_TEMPLATE/----broken-stream.md
deleted file mode 100644
index 3f4b0cff09..0000000000
--- a/.github/ISSUE_TEMPLATE/----broken-stream.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-name: '🛠 Broken Stream'
-about: Report a broken stream
-title: ''
-labels: broken stream
-assignees: ''
----
-
-
-
-
-
-**_Channel Name:_** xxx
-**_Country:_** xxx
-**_Broken Link (from playlist):_** xxx
-**_Possible Replacement (optional):_** xxx
-**_Notes (optional):_** xxx
diff --git a/.github/ISSUE_TEMPLATE/----bug-report.yml b/.github/ISSUE_TEMPLATE/----bug-report.yml
new file mode 100644
index 0000000000..accafd41fe
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/----bug-report.yml
@@ -0,0 +1,22 @@
+name: 🐞 Bug Report
+description: Report an error in this repository
+title: "Fix: "
+labels: [ "bug" ]
+assignees:
+ - freearhey
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ This form is **ONLY** intended for auto-update, channel sorting and other automation scripts related issues.
+ If you're experiencing problems viewing a channel, **this is not the right form**. Please fill a [Broken stream](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&template=-----broken-stream.yml&title=Fix%3A+) form instead.
+
+ Please describe the error in as much detail as possible so that we can fix it quickly.
+
+ - type: textarea
+ id: bug
+ attributes:
+ label: Describe your issue
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/--remove-channel.md b/.github/ISSUE_TEMPLATE/--remove-channel.md
deleted file mode 100644
index 6cc3a0a2b8..0000000000
--- a/.github/ISSUE_TEMPLATE/--remove-channel.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-name: "\U0001F6A8 Remove Channel"
-about: Request to remove a channel
-title: 'Remove: xxx'
-labels: DMCA
-assignees: ''
----
-
-
-
-**_Channel Name:_** xxx
-**_DMCA Notice (link):_** xxx
diff --git a/.github/ISSUE_TEMPLATE/--remove-channel.yml b/.github/ISSUE_TEMPLATE/--remove-channel.yml
new file mode 100644
index 0000000000..3495957012
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--remove-channel.yml
@@ -0,0 +1,34 @@
+name: 🚨 Remove Channel
+description: Request to remove a channel
+title: "Remove: "
+labels: [ "DMCA" ]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please fill out the issue template as much as you can so we could efficiently process your request
+
+ - type: input
+ id: name
+ attributes:
+ label: Channel Names
+ description: Full name of every channel to be removed
+ placeholder: 'Fox Life Russia'
+ validations:
+ required: true
+
+ - type: input
+ id: link
+ attributes:
+ label: DMCA Notice
+ description: A link to your published complaint form that must be filled here https://github.com/contact/dmca
+ placeholder: 'https://github.com/github/dmca/blob/3ce1c9402c6b7e46dcbbea6ff866d6a44e75c72a/2021/03/2021-03-26-sky-italia.md'
+ validations:
+ required: true
+
+ - type: input
+ id: notes
+ attributes:
+ label: Notes
+ placeholder: 'Anything else we should know?'
diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml
index dec1f3be64..49a504d1bf 100644
--- a/.github/workflows/auto-update.yml
+++ b/.github/workflows/auto-update.yml
@@ -4,279 +4,120 @@ on:
schedule:
- cron: '0 0,12 * * *'
jobs:
- create-branch:
+ setup:
runs-on: ubuntu-latest
- outputs:
- branch_name: ${{ steps.set-branch-name.outputs.branch_name }}
steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ github.ref }}
- - name: Set Branch Name
- id: set-branch-name
- run: echo "::set-output name=branch_name::$(date +'bot/auto-update-%Y%m%d%H%M00')"
- - name: Create Branch
- uses: peterjgrainger/action-create-branch@v2.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- branch: ${{ steps.set-branch-name.outputs.branch_name }}
- create-matrix:
- runs-on: ubuntu-latest
- needs: create-branch
- outputs:
- matrix: ${{ steps.set-matrix.outputs.matrix }}
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Create Matrix
- id: set-matrix
- run: node scripts/create-matrix.js
- format:
+ - run: npm install
+ - run: node scripts/commands/create-database.js
+ - run: node scripts/commands/create-matrix.js
+ id: create-matrix
+ - uses: actions/upload-artifact@v2
+ with:
+ name: database
+ path: scripts/channels.db
+ outputs:
+ matrix: ${{ steps.create-matrix.outputs.matrix }}
+ load:
runs-on: ubuntu-latest
- needs: [create-matrix, create-branch]
+ needs: setup
continue-on-error: true
strategy:
fail-fast: false
- matrix: ${{fromJSON(needs.create-matrix.outputs.matrix)}}
+ matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- - name: Checkout
- uses: actions/checkout@v2
+ - uses: actions/checkout@v2
+ - uses: actions/download-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup FFmpeg
- uses: FedericoCarboni/setup-ffmpeg@v1
- - name: Setup Node
- uses: actions/setup-node@v2
+ name: database
+ path: scripts
+ - uses: FedericoCarboni/setup-ffmpeg@v1
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Format Playlists
- run: node scripts/format.js --country=${{ matrix.country }} --debug
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
+ - run: npm install
+ - run: node scripts/commands/check-streams.js --cluster-id=${{ matrix.cluster_id }}
+ - uses: actions/upload-artifact@v2
with:
- name: channels
- path: channels/${{ matrix.country }}.m3u
- commit-changes:
+ name: logs
+ path: scripts/logs
+ update:
runs-on: ubuntu-latest
- needs: [format, create-branch]
+ needs: load
steps:
- - name: Checkout
- uses: actions/checkout@v2
+ - uses: actions/checkout@v2
+ - run: echo "::set-output name=branch_name::$(date +'bot/auto-update-%s')"
+ id: create-branch-name
+ - run: git config user.name 'iptv-bot[bot]'
+ - run: git config user.email '84861620+iptv-bot[bot]@users.noreply.github.com'
+ - run: git checkout -b ${{ steps.create-branch-name.outputs.branch_name }}
+ - run: curl -L -o scripts/data/codes.json https://iptv-org.github.io/epg/codes.json
+ - uses: actions/download-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Download Artifacts
- uses: actions/download-artifact@v2
+ name: database
+ path: scripts
+ - uses: actions/download-artifact@v2
with:
- name: channels
- path: channels
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Format playlists'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- remove-duplicates:
- runs-on: ubuntu-latest
- needs: [commit-changes, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
+ name: logs
+ path: scripts/logs
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
with:
node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Remove Duplicates
- run: node scripts/remove-duplicates.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
+ - run: npm install
+ - run: node scripts/commands/update-database.js
+ - uses: actions/upload-artifact@v2
with:
- commit_message: '[Bot] Remove duplicates'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- sort:
- runs-on: ubuntu-latest
- needs: [remove-duplicates, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
+ name: database
+ path: scripts/channels.db
+ - run: node scripts/commands/update-playlists.js
+ - run: git add channels/*
+ - run: git commit -m "[Bot] Update playlists"
+ - run: node scripts/commands/generate-playlists.js
+ - uses: actions/upload-artifact@v2
with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Sort Channels
- run: node scripts/sort.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Sort channels'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- filter:
- runs-on: ubuntu-latest
- needs: [sort, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Filter Playlists
- run: node scripts/filter.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Filter channels'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: channels/*
- generate:
- runs-on: ubuntu-latest
- needs: [filter, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Generate Playlists
- run: node scripts/generate.js
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: gh-pages
- path: .gh-pages/
- deploy:
- runs-on: ubuntu-latest
- needs: [generate, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Download Artifacts
- uses: actions/download-artifact@v2
- with:
- name: gh-pages
- path: .gh-pages
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
+ name: logs
+ path: scripts/logs
+ - run: node scripts/commands/update-readme.js
+ - run: git add README.md
+ - run: git commit -m "[Bot] Update README.md"
+ - run: git push -u origin ${{ steps.create-branch-name.outputs.branch_name }}
+ - uses: tibdex/github-app-token@v1
+ if: ${{ !env.ACT }}
+ id: create-app-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Deploy to GitHub Pages
- if: ${{ github.ref == 'refs/heads/master' }}
- uses: JamesIves/github-pages-deploy-action@4.1.1
+ - uses: repo-sync/pull-request@v2
+ if: ${{ !env.ACT }}
+ id: pull-request
with:
- branch: gh-pages
- folder: .gh-pages
- token: ${{ steps.generate-token.outputs.token }}
- git-config-name: iptv-bot
- git-config-email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit-message: '[Bot] Deploy to GitHub Pages'
- update-readme:
- runs-on: ubuntu-latest
- needs: [generate, create-branch]
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Setup Node
- uses: actions/setup-node@v2
- with:
- node-version: '14'
- cache: 'npm'
- - name: Install Dependencies
- run: npm install
- - name: Update README.md
- run: node scripts/update-readme.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Update README.md'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: ${{ needs.create-branch.outputs.branch_name }}
- file_pattern: README.md
- pull-request:
- if: ${{ github.ref == 'refs/heads/master' }}
- needs: [update-readme, create-branch]
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ needs.create-branch.outputs.branch_name }}
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
- with:
- app_id: ${{ secrets.APP_ID }}
- private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Create Pull Request
- id: pr
- uses: repo-sync/pull-request@v2
- with:
- source_branch: ${{ needs.create-branch.outputs.branch_name }}
+ github_token: ${{ steps.create-app-token.outputs.token }}
+ source_branch: ${{ steps.create-branch-name.outputs.branch_name }}
destination_branch: 'master'
- pr_title: '[Bot] Update playlists'
+ pr_title: '[Bot] Daily update'
pr_body: |
This pull request is created by [auto-update][1] workflow.
[1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}
- github_token: ${{ steps.generate-token.outputs.token }}
- - name: Merge Pull Request
- uses: juliangruber/merge-pull-request-action@v1
+ - uses: juliangruber/merge-pull-request-action@v1
+ if: ${{ github.ref == 'refs/heads/master' }}
with:
github-token: ${{ secrets.PAT }}
- number: ${{ steps.pr.outputs.pr_number }}
+ number: ${{ steps.pull-request.outputs.pr_number }}
method: squash
+ - uses: JamesIves/github-pages-deploy-action@4.1.1
+ if: ${{ github.ref == 'refs/heads/master' }}
+ with:
+ branch: gh-pages
+ folder: .gh-pages
+ token: ${{ steps.create-app-token.outputs.token }}
+ git-config-name: iptv-bot[bot]
+ git-config-email: 84861620+iptv-bot[bot]@users.noreply.github.com
+ commit-message: '[Bot] Generate playlists'
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index a557daedf1..6792edc057 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -4,12 +4,15 @@ on:
pull_request:
types: [opened, synchronize, reopened, edited]
jobs:
- lint:
+ check:
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v2
- - name: Install Dependencies
- run: npm install
- - name: Check Playlists
- run: npm run lint
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ if: ${{ !env.ACT }}
+ with:
+ node-version: '14'
+ cache: 'npm'
+ - run: npm install
+ - run: npm run lint
+ - run: npm run validate
diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml
index a030d6bc67..ff86dc62ad 100644
--- a/.github/workflows/cleanup.yml
+++ b/.github/workflows/cleanup.yml
@@ -2,65 +2,38 @@ name: cleanup
on:
workflow_dispatch:
jobs:
- create-branch:
+ cleanup:
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: ${{ github.ref }}
- - name: Create Branch
- uses: peterjgrainger/action-create-branch@v2.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- branch: 'bot/cleanup'
- remove-broken-links:
- runs-on: ubuntu-latest
- needs: create-branch
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: bot/cleanup
- - name: Install Dependencies
- run: npm install
- - name: Remove Broken Links
- run: node scripts/remove-broken-links.js
- - name: Commit Changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: '[Bot] Remove broken links'
- commit_user_name: iptv-bot
- commit_user_email: 84861620+iptv-bot[bot]@users.noreply.github.com
- commit_author: 'iptv-bot[bot] <84861620+iptv-bot[bot]@users.noreply.github.com>'
- branch: bot/cleanup
- file_pattern: channels/*
- pull-request:
- if: ${{ github.ref == 'refs/heads/master' }}
- runs-on: ubuntu-latest
- needs: remove-broken-links
- steps:
- - name: Checkout
- uses: actions/checkout@v2
- with:
- ref: bot/cleanup
- - name: Generate Token
- uses: tibdex/github-app-token@v1
- id: generate-token
+ - uses: actions/checkout@v2
+ - run: echo "::set-output name=branch_name::$(date +'bot/cleanup-%s')"
+ id: create-branch-name
+ - run: |
+ git config user.name 'iptv-bot[bot]'
+ git config user.email '84861620+iptv-bot[bot]@users.noreply.github.com'
+ - run: git checkout -b ${{ steps.create-branch-name.outputs.branch_name }}
+ - run: npm install
+ - run: node scripts/commands/create-database.js
+ - run: node scripts/commands/cleanup-database.js
+ - run: node scripts/commands/update-playlists.js
+ - run: |
+ git add channels/*
+ git commit -m "[Bot] Update playlists"
+ - uses: tibdex/github-app-token@v1
+ if: ${{ !env.ACT }}
+ id: create-app-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- - name: Create Pull Request
- id: pr
- uses: repo-sync/pull-request@v2
+ - uses: repo-sync/pull-request@v2
+ if: ${{ github.ref == 'refs/heads/master' }}
+ id: pull-request
with:
- source_branch: 'bot/cleanup'
+ github_token: ${{ steps.create-app-token.outputs.token }}
+ source_branch: ${{ steps.create-branch-name.outputs.branch_name }}
destination_branch: 'master'
- pr_title: '[Bot] Cleaning playlists'
+ pr_title: '[Bot] Remove broken links'
pr_body: |
This pull request is created by [cleanup][1] workflow.
[1]: https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}
- pr_draft: true
- github_token: ${{ steps.generate-token.outputs.token }}
diff --git a/.gitignore b/.gitignore
index b512c09d47..91905e1feb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,6 @@
-node_modules
\ No newline at end of file
+node_modules
+database
+.artifacts
+.secrets
+.actrc
+.DS_Store
\ No newline at end of file
diff --git a/.readme/.gitignore b/.readme/.gitignore
index 778ddef3ca..a2ac441348 100644
--- a/.readme/.gitignore
+++ b/.readme/.gitignore
@@ -1,3 +1,4 @@
_categories.md
_countries.md
-_languages.md
\ No newline at end of file
+_languages.md
+_regions.md
\ No newline at end of file
diff --git a/.readme/supported-region-codes.md b/.readme/supported-regions.md
similarity index 92%
rename from .readme/supported-region-codes.md
rename to .readme/supported-regions.md
index a575740c6d..0b0a9656c6 100644
--- a/.readme/supported-region-codes.md
+++ b/.readme/supported-regions.md
@@ -1,4 +1,4 @@
-## Supported Region Codes
+## Supported Regions
| Code | Description |
| ------------------------------------------------------------------------ | ---------------------------------- |
@@ -10,11 +10,11 @@
| [CARIB](https://en.wikipedia.org/wiki/Caribbean) | Caribbean |
| [CAS](https://en.wikipedia.org/wiki/Central_Asia) | Central Asia |
| [CIS](https://en.wikipedia.org/wiki/Commonwealth_of_Independent_States) | Commonwealth of Independent States |
-| [EMEA](https://en.wikipedia.org/wiki/Europe,_the_Middle_East_and_Africa) | Europe, Middle East and Africa |
+| [EMEA](https://en.wikipedia.org/wiki/Europe,_the_Middle_East_and_Africa) | Europe, the Middle East and Africa |
| [EUR](https://en.wikipedia.org/wiki/Europe) | Europe |
| [HISPAM](https://en.wikipedia.org/wiki/Hispanic_America) | Hispanic America |
| [LATAM](https://en.wikipedia.org/wiki/Latin_America) | Latin America |
-| [MAGHRIB](https://en.wikipedia.org/wiki/Maghreb) | Maghrib |
+| [MAGHREB](https://en.wikipedia.org/wiki/Maghreb) | Maghreb |
| [MENA](https://en.wikipedia.org/wiki/MENA) | Middle East and North Africa |
| [MIDEAST](https://en.wikipedia.org/wiki/Middle_East) | Middle East |
| [NORAM](https://en.wikipedia.org/wiki/North_America) | North America |
diff --git a/.readme/supported-statuses.md b/.readme/supported-statuses.md
new file mode 100644
index 0000000000..ec5f076065
--- /dev/null
+++ b/.readme/supported-statuses.md
@@ -0,0 +1,8 @@
+## Supported Statuses
+
+| Label | Description |
+| ----------- | ------------------------------------------------- |
+| Geo-blocked | Channel is only available in selected countries. |
+| Not 24/7 | Broadcast is not available 24 hours a day. |
+| Timeout | Server does not respond for more than 60 seconds. |
+| Offline | The broadcast does not work for any other reason. |
diff --git a/.readme/template.md b/.readme/template.md
index 43dce5682d..ba3185499e 100644
--- a/.readme/template.md
+++ b/.readme/template.md
@@ -14,9 +14,10 @@ To watch IPTV you just need to paste this link `https://iptv-org.github.io/iptv/
Also you can instead use one of these playlists:
-- `https://iptv-org.github.io/iptv/index.country.m3u` (grouped by country)
- `https://iptv-org.github.io/iptv/index.category.m3u` (grouped by category)
- `https://iptv-org.github.io/iptv/index.language.m3u` (grouped by language)
+- `https://iptv-org.github.io/iptv/index.country.m3u` (grouped by country)
+- `https://iptv-org.github.io/iptv/index.region.m3u` (grouped by region)
- `https://iptv-org.github.io/iptv/index.nsfw.m3u` (includes adult channels)
Or select one of the playlists from the list below.
@@ -43,6 +44,17 @@ Or select one of the playlists from the list below.
+### Playlists by region
+
+Expand
+
+
+
+#include "./.readme/_regions.md"
+
+
-
-
-
-
- Category Channels Playlist
- Auto 15 https://iptv-org.github.io/iptv/categories/auto.m3u
- Animation 30 https://iptv-org.github.io/iptv/categories/animation.m3u
- Business 42 https://iptv-org.github.io/iptv/categories/business.m3u
- Classic 64 https://iptv-org.github.io/iptv/categories/classic.m3u
- Comedy 54 https://iptv-org.github.io/iptv/categories/comedy.m3u
- Cooking 35 https://iptv-org.github.io/iptv/categories/cooking.m3u
- Culture 16 https://iptv-org.github.io/iptv/categories/culture.m3u
- Documentary 46 https://iptv-org.github.io/iptv/categories/documentary.m3u
- Education 25 https://iptv-org.github.io/iptv/categories/education.m3u
- Entertainment 209 https://iptv-org.github.io/iptv/categories/entertainment.m3u
- Family 31 https://iptv-org.github.io/iptv/categories/family.m3u
- General 365 https://iptv-org.github.io/iptv/categories/general.m3u
- Kids 185 https://iptv-org.github.io/iptv/categories/kids.m3u
- Legislative 64 https://iptv-org.github.io/iptv/categories/legislative.m3u
- Lifestyle 82 https://iptv-org.github.io/iptv/categories/lifestyle.m3u
- Local 807 https://iptv-org.github.io/iptv/categories/local.m3u
- Movies 263 https://iptv-org.github.io/iptv/categories/movies.m3u
- Music 397 https://iptv-org.github.io/iptv/categories/music.m3u
- News 431 https://iptv-org.github.io/iptv/categories/news.m3u
- Outdoor 31 https://iptv-org.github.io/iptv/categories/outdoor.m3u
- Relax 19 https://iptv-org.github.io/iptv/categories/relax.m3u
- Religious 304 https://iptv-org.github.io/iptv/categories/religious.m3u
- Series 219 https://iptv-org.github.io/iptv/categories/series.m3u
- Science 10 https://iptv-org.github.io/iptv/categories/science.m3u
- Shop 51 https://iptv-org.github.io/iptv/categories/shop.m3u
- Sports 212 https://iptv-org.github.io/iptv/categories/sports.m3u
- Travel 17 https://iptv-org.github.io/iptv/categories/travel.m3u
- Weather 8 https://iptv-org.github.io/iptv/categories/weather.m3u
- XXX 40 https://iptv-org.github.io/iptv/categories/xxx.m3u
-
+
+ Other 3738 https://iptv-org.github.io/iptv/categories/other.m3u
+
+
+ Category Channels Playlist
+ Animation 26 https://iptv-org.github.io/iptv/categories/animation.m3u
+ Auto 15 https://iptv-org.github.io/iptv/categories/auto.m3u
+ Business 38 https://iptv-org.github.io/iptv/categories/business.m3u
+ Classic 59 https://iptv-org.github.io/iptv/categories/classic.m3u
+ Comedy 52 https://iptv-org.github.io/iptv/categories/comedy.m3u
+ Cooking 33 https://iptv-org.github.io/iptv/categories/cooking.m3u
+ Culture 18 https://iptv-org.github.io/iptv/categories/culture.m3u
+ Documentary 44 https://iptv-org.github.io/iptv/categories/documentary.m3u
+ Education 23 https://iptv-org.github.io/iptv/categories/education.m3u
+ Entertainment 204 https://iptv-org.github.io/iptv/categories/entertainment.m3u
+ Family 31 https://iptv-org.github.io/iptv/categories/family.m3u
+ General 366 https://iptv-org.github.io/iptv/categories/general.m3u
+ Kids 162 https://iptv-org.github.io/iptv/categories/kids.m3u
+ Legislative 61 https://iptv-org.github.io/iptv/categories/legislative.m3u
+ Lifestyle 80 https://iptv-org.github.io/iptv/categories/lifestyle.m3u
+ Local 845 https://iptv-org.github.io/iptv/categories/local.m3u
+ Movies 242 https://iptv-org.github.io/iptv/categories/movies.m3u
+ Music 351 https://iptv-org.github.io/iptv/categories/music.m3u
+ News 449 https://iptv-org.github.io/iptv/categories/news.m3u
+ Outdoor 31 https://iptv-org.github.io/iptv/categories/outdoor.m3u
+ Relax 18 https://iptv-org.github.io/iptv/categories/relax.m3u
+ Religious 298 https://iptv-org.github.io/iptv/categories/religious.m3u
+ Science 11 https://iptv-org.github.io/iptv/categories/science.m3u
+ Series 197 https://iptv-org.github.io/iptv/categories/series.m3u
+ Shop 46 https://iptv-org.github.io/iptv/categories/shop.m3u
+ Sports 194 https://iptv-org.github.io/iptv/categories/sports.m3u
+ Travel 19 https://iptv-org.github.io/iptv/categories/travel.m3u
+ Weather 11 https://iptv-org.github.io/iptv/categories/weather.m3u
+ XXX 41 https://iptv-org.github.io/iptv/categories/xxx.m3u
+
Other 3650 https://iptv-org.github.io/iptv/categories/other.m3u
Language | Channels | Playlist |
---|---|---|
Akan | 2 | https://iptv-org.github.io/iptv/languages/aka.m3u |
Albanian | 39 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
Amharic | 1 | https://iptv-org.github.io/iptv/languages/amh.m3u |
Arabic | 406 | https://iptv-org.github.io/iptv/languages/ara.m3u |
Armenian | 28 | https://iptv-org.github.io/iptv/languages/hye.m3u |
Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
Azerbaijani | 26 | https://iptv-org.github.io/iptv/languages/aze.m3u |
Bashkir | 3 | https://iptv-org.github.io/iptv/languages/bak.m3u |
Belarusian | 1 | https://iptv-org.github.io/iptv/languages/bel.m3u |
Bengali | 40 | https://iptv-org.github.io/iptv/languages/ben.m3u |
Bhojpuri | 4 | https://iptv-org.github.io/iptv/languages/bho.m3u |
Bosnian | 11 | https://iptv-org.github.io/iptv/languages/bos.m3u |
Bulgarian | 10 | https://iptv-org.github.io/iptv/languages/bul.m3u |
Burmese | 0 | https://iptv-org.github.io/iptv/languages/mya.m3u |
Catalan | 9 | https://iptv-org.github.io/iptv/languages/cat.m3u |
Chinese | 813 | https://iptv-org.github.io/iptv/languages/zho.m3u |
Croatian | 12 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
Czech | 22 | https://iptv-org.github.io/iptv/languages/ces.m3u |
Danish | 8 | https://iptv-org.github.io/iptv/languages/dan.m3u |
Dhivehi | 1 | https://iptv-org.github.io/iptv/languages/div.m3u |
Dutch | 104 | https://iptv-org.github.io/iptv/languages/nld.m3u |
English | 2160 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 6 | https://iptv-org.github.io/iptv/languages/est.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
Finnish | 8 | https://iptv-org.github.io/iptv/languages/fin.m3u |
French | 229 | https://iptv-org.github.io/iptv/languages/fra.m3u |
Galician | 7 | https://iptv-org.github.io/iptv/languages/glg.m3u |
Georgian | 9 | https://iptv-org.github.io/iptv/languages/kat.m3u |
German | 230 | https://iptv-org.github.io/iptv/languages/deu.m3u |
Greek | 106 | https://iptv-org.github.io/iptv/languages/ell.m3u |
Greenlandic | 2 | https://iptv-org.github.io/iptv/languages/kal.m3u |
Hebrew | 17 | https://iptv-org.github.io/iptv/languages/heb.m3u |
Hindi | 178 | https://iptv-org.github.io/iptv/languages/hin.m3u |
Hungarian | 30 | https://iptv-org.github.io/iptv/languages/hun.m3u |
Icelandic | 1 | https://iptv-org.github.io/iptv/languages/isl.m3u |
Indonesian | 70 | https://iptv-org.github.io/iptv/languages/ind.m3u |
Inuktitut | 1 | https://iptv-org.github.io/iptv/languages/iku.m3u |
Italian | 211 | https://iptv-org.github.io/iptv/languages/ita.m3u |
Japanese | 51 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
Javanese | 4 | https://iptv-org.github.io/iptv/languages/jav.m3u |
Kannada | 8 | https://iptv-org.github.io/iptv/languages/kan.m3u |
Kazakh | 16 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
Khmer | 8 | https://iptv-org.github.io/iptv/languages/khm.m3u |
Kinyarwanda | 2 | https://iptv-org.github.io/iptv/languages/kin.m3u |
Korean | 60 | https://iptv-org.github.io/iptv/languages/kor.m3u |
Kurdish | 26 | https://iptv-org.github.io/iptv/languages/kur.m3u |
Kyrgyz | 1 | https://iptv-org.github.io/iptv/languages/kir.m3u |
Lao | 3 | https://iptv-org.github.io/iptv/languages/lao.m3u |
Latvian | 4 | https://iptv-org.github.io/iptv/languages/lav.m3u |
Lithuanian | 4 | https://iptv-org.github.io/iptv/languages/lit.m3u |
Luxembourgish | 2 | https://iptv-org.github.io/iptv/languages/ltz.m3u |
Macedonian | 2 | https://iptv-org.github.io/iptv/languages/mkd.m3u |
Malay | 21 | https://iptv-org.github.io/iptv/languages/msa.m3u |
Malayalam | 54 | https://iptv-org.github.io/iptv/languages/mal.m3u |
Maltese | 3 | https://iptv-org.github.io/iptv/languages/mlt.m3u |
Mandarin Chinese | 52 | https://iptv-org.github.io/iptv/languages/cmn.m3u |
Mandinka | 1 | https://iptv-org.github.io/iptv/languages/mnk.m3u |
Maori | 2 | https://iptv-org.github.io/iptv/languages/mri.m3u |
Marathi | 4 | https://iptv-org.github.io/iptv/languages/mar.m3u |
Min Nan Chinese | 3 | https://iptv-org.github.io/iptv/languages/nan.m3u |
Mongolian | 0 | https://iptv-org.github.io/iptv/languages/mon.m3u |
Montenegrin | 1 | https://iptv-org.github.io/iptv/languages/cnr.m3u |
Nepali | 1 | https://iptv-org.github.io/iptv/languages/nep.m3u |
Norwegian | 6 | https://iptv-org.github.io/iptv/languages/nor.m3u |
Norwegian Bokmål | 4 | https://iptv-org.github.io/iptv/languages/nob.m3u |
Papiamento | 2 | https://iptv-org.github.io/iptv/languages/pap.m3u |
Pashto | 23 | https://iptv-org.github.io/iptv/languages/pus.m3u |
Persian | 174 | https://iptv-org.github.io/iptv/languages/fas.m3u |
Polish | 38 | https://iptv-org.github.io/iptv/languages/pol.m3u |
Portuguese | 231 | https://iptv-org.github.io/iptv/languages/por.m3u |
Punjabi | 8 | https://iptv-org.github.io/iptv/languages/pan.m3u |
Romanian | 55 | https://iptv-org.github.io/iptv/languages/ron.m3u |
Russian | 362 | https://iptv-org.github.io/iptv/languages/rus.m3u |
Serbian | 30 | https://iptv-org.github.io/iptv/languages/srp.m3u |
Sinhala | 8 | https://iptv-org.github.io/iptv/languages/sin.m3u |
Slovak | 24 | https://iptv-org.github.io/iptv/languages/slk.m3u |
Slovenian | 9 | https://iptv-org.github.io/iptv/languages/slv.m3u |
Somali | 5 | https://iptv-org.github.io/iptv/languages/som.m3u |
Spanish | 1060 | https://iptv-org.github.io/iptv/languages/spa.m3u |
Sundanese | 1 | https://iptv-org.github.io/iptv/languages/sun.m3u |
Swahili | 1 | https://iptv-org.github.io/iptv/languages/swa.m3u |
Swedish | 13 | https://iptv-org.github.io/iptv/languages/swe.m3u |
Tagalog | 7 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
Tamil | 43 | https://iptv-org.github.io/iptv/languages/tam.m3u |
Telugu | 4 | https://iptv-org.github.io/iptv/languages/tel.m3u |
Thai | 48 | https://iptv-org.github.io/iptv/languages/tha.m3u |
Turkish | 165 | https://iptv-org.github.io/iptv/languages/tur.m3u |
Turkmen | 7 | https://iptv-org.github.io/iptv/languages/tuk.m3u |
Ukrainian | 89 | https://iptv-org.github.io/iptv/languages/ukr.m3u |
Urdu | 21 | https://iptv-org.github.io/iptv/languages/urd.m3u |
Uzbek | 1 | https://iptv-org.github.io/iptv/languages/uzb.m3u |
Vietnamese | 99 | https://iptv-org.github.io/iptv/languages/vie.m3u |
Western Frisian | 1 | https://iptv-org.github.io/iptv/languages/fry.m3u |
Wolof | 15 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yue Chinese | 5 | https://iptv-org.github.io/iptv/languages/yue.m3u |
Undefined | 218 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
Language | Channels | Playlist |
Akan | 2 | https://iptv-org.github.io/iptv/languages/aka.m3u |
Albanian | 126 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
Amharic | 1 | https://iptv-org.github.io/iptv/languages/amh.m3u |
Arabic | 386 | https://iptv-org.github.io/iptv/languages/ara.m3u |
Armenian | 26 | https://iptv-org.github.io/iptv/languages/hye.m3u |
Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
Azerbaijani | 24 | https://iptv-org.github.io/iptv/languages/aze.m3u |
Bashkir | 3 | https://iptv-org.github.io/iptv/languages/bak.m3u |
Belarusian | 1 | https://iptv-org.github.io/iptv/languages/bel.m3u |
Bengali | 38 | https://iptv-org.github.io/iptv/languages/ben.m3u |
Bhojpuri | 4 | https://iptv-org.github.io/iptv/languages/bho.m3u |
Bosnian | 13 | https://iptv-org.github.io/iptv/languages/bos.m3u |
Bulgarian | 9 | https://iptv-org.github.io/iptv/languages/bul.m3u |
Burmese | 0 | https://iptv-org.github.io/iptv/languages/mya.m3u |
Catalan | 8 | https://iptv-org.github.io/iptv/languages/cat.m3u |
Chinese | 761 | https://iptv-org.github.io/iptv/languages/zho.m3u |
Croatian | 12 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
Czech | 19 | https://iptv-org.github.io/iptv/languages/ces.m3u |
Danish | 8 | https://iptv-org.github.io/iptv/languages/dan.m3u |
Dhivehi | 1 | https://iptv-org.github.io/iptv/languages/div.m3u |
Dutch | 103 | https://iptv-org.github.io/iptv/languages/nld.m3u |
English | 2136 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 6 | https://iptv-org.github.io/iptv/languages/est.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
Finnish | 6 | https://iptv-org.github.io/iptv/languages/fin.m3u |
French | 215 | https://iptv-org.github.io/iptv/languages/fra.m3u |
Galician | 7 | https://iptv-org.github.io/iptv/languages/glg.m3u |
Georgian | 8 | https://iptv-org.github.io/iptv/languages/kat.m3u |
German | 225 | https://iptv-org.github.io/iptv/languages/deu.m3u |
Greek | 100 | https://iptv-org.github.io/iptv/languages/ell.m3u |
Greenlandic | 2 | https://iptv-org.github.io/iptv/languages/kal.m3u |
Hebrew | 16 | https://iptv-org.github.io/iptv/languages/heb.m3u |
Hindi | 180 | https://iptv-org.github.io/iptv/languages/hin.m3u |
Hungarian | 30 | https://iptv-org.github.io/iptv/languages/hun.m3u |
Icelandic | 1 | https://iptv-org.github.io/iptv/languages/isl.m3u |
Indonesian | 73 | https://iptv-org.github.io/iptv/languages/ind.m3u |
Inuktitut | 1 | https://iptv-org.github.io/iptv/languages/iku.m3u |
Italian | 191 | https://iptv-org.github.io/iptv/languages/ita.m3u |
Japanese | 50 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
Javanese | 4 | https://iptv-org.github.io/iptv/languages/jav.m3u |
Kannada | 8 | https://iptv-org.github.io/iptv/languages/kan.m3u |
Kazakh | 15 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
Khmer | 8 | https://iptv-org.github.io/iptv/languages/khm.m3u |
Kinyarwanda | 2 | https://iptv-org.github.io/iptv/languages/kin.m3u |
Korean | 52 | https://iptv-org.github.io/iptv/languages/kor.m3u |
Kurdish | 25 | https://iptv-org.github.io/iptv/languages/kur.m3u |
Kyrgyz | 1 | https://iptv-org.github.io/iptv/languages/kir.m3u |
Lao | 3 | https://iptv-org.github.io/iptv/languages/lao.m3u |
Latvian | 4 | https://iptv-org.github.io/iptv/languages/lav.m3u |
Lithuanian | 4 | https://iptv-org.github.io/iptv/languages/lit.m3u |
Luxembourgish | 2 | https://iptv-org.github.io/iptv/languages/ltz.m3u |
Macedonian | 1 | https://iptv-org.github.io/iptv/languages/mkd.m3u |
Malay | 20 | https://iptv-org.github.io/iptv/languages/msa.m3u |
Malayalam | 55 | https://iptv-org.github.io/iptv/languages/mal.m3u |
Maltese | 3 | https://iptv-org.github.io/iptv/languages/mlt.m3u |
Mandarin Chinese | 54 | https://iptv-org.github.io/iptv/languages/cmn.m3u |
Mandinka | 1 | https://iptv-org.github.io/iptv/languages/mnk.m3u |
Maori | 2 | https://iptv-org.github.io/iptv/languages/mri.m3u |
Marathi | 4 | https://iptv-org.github.io/iptv/languages/mar.m3u |
Min Nan Chinese | 3 | https://iptv-org.github.io/iptv/languages/nan.m3u |
Mongolian | 0 | https://iptv-org.github.io/iptv/languages/mon.m3u |
Montenegrin | 1 | https://iptv-org.github.io/iptv/languages/cnr.m3u |
Nepali | 1 | https://iptv-org.github.io/iptv/languages/nep.m3u |
Norwegian | 6 | https://iptv-org.github.io/iptv/languages/nor.m3u |
Norwegian Bokmål | 4 | https://iptv-org.github.io/iptv/languages/nob.m3u |
Papiamento | 2 | https://iptv-org.github.io/iptv/languages/pap.m3u |
Pashto | 22 | https://iptv-org.github.io/iptv/languages/pus.m3u |
Persian | 165 | https://iptv-org.github.io/iptv/languages/fas.m3u |
Polish | 34 | https://iptv-org.github.io/iptv/languages/pol.m3u |
Portuguese | 224 | https://iptv-org.github.io/iptv/languages/por.m3u |
Punjabi | 5 | https://iptv-org.github.io/iptv/languages/pan.m3u |
Romanian | 57 | https://iptv-org.github.io/iptv/languages/ron.m3u |
Russian | 346 | https://iptv-org.github.io/iptv/languages/rus.m3u |
Serbian | 27 | https://iptv-org.github.io/iptv/languages/srp.m3u |
Sinhala | 9 | https://iptv-org.github.io/iptv/languages/sin.m3u |
Slovak | 20 | https://iptv-org.github.io/iptv/languages/slk.m3u |
Slovenian | 9 | https://iptv-org.github.io/iptv/languages/slv.m3u |
Somali | 4 | https://iptv-org.github.io/iptv/languages/som.m3u |
Spanish | 1099 | https://iptv-org.github.io/iptv/languages/spa.m3u |
Sundanese | 1 | https://iptv-org.github.io/iptv/languages/sun.m3u |
Swahili | 1 | https://iptv-org.github.io/iptv/languages/swa.m3u |
Swedish | 11 | https://iptv-org.github.io/iptv/languages/swe.m3u |
Tagalog | 7 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
Tamil | 43 | https://iptv-org.github.io/iptv/languages/tam.m3u |
Telugu | 4 | https://iptv-org.github.io/iptv/languages/tel.m3u |
Thai | 46 | https://iptv-org.github.io/iptv/languages/tha.m3u |
Turkish | 158 | https://iptv-org.github.io/iptv/languages/tur.m3u |
Turkmen | 7 | https://iptv-org.github.io/iptv/languages/tuk.m3u |
Ukrainian | 88 | https://iptv-org.github.io/iptv/languages/ukr.m3u |
Urdu | 21 | https://iptv-org.github.io/iptv/languages/urd.m3u |
Uzbek | 1 | https://iptv-org.github.io/iptv/languages/uzb.m3u |
Vietnamese | 80 | https://iptv-org.github.io/iptv/languages/vie.m3u |
Western Frisian | 1 | https://iptv-org.github.io/iptv/languages/fry.m3u |
Wolof | 15 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yue Chinese | 6 | https://iptv-org.github.io/iptv/languages/yue.m3u |
Undefined | 207 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
Region | Channels | Playlist |
---|---|---|
Africa | 202 | https://iptv-org.github.io/iptv/regions/afr.m3u |
Americas | 2954 | https://iptv-org.github.io/iptv/regions/amer.m3u |
Arab world | 384 | https://iptv-org.github.io/iptv/regions/arab.m3u |
Asia | 2502 | https://iptv-org.github.io/iptv/regions/asia.m3u |
Asia-Pacific | 1549 | https://iptv-org.github.io/iptv/regions/apac.m3u |
Caribbean | 134 | https://iptv-org.github.io/iptv/regions/carib.m3u |
Central Asia | 37 | https://iptv-org.github.io/iptv/regions/cas.m3u |
Commonwealth of Independent States | 405 | https://iptv-org.github.io/iptv/regions/cis.m3u |
Europe | 2226 | https://iptv-org.github.io/iptv/regions/eur.m3u |
Europe, the Middle East and Africa | 2841 | https://iptv-org.github.io/iptv/regions/emea.m3u |
Hispanic America | 758 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
Latin America | 960 | https://iptv-org.github.io/iptv/regions/latam.m3u |
Maghreb | 93 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
Middle East | 689 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
Middle East and North Africa | 548 | https://iptv-org.github.io/iptv/regions/mena.m3u |
Nordics | 44 | https://iptv-org.github.io/iptv/regions/nord.m3u |
North America | 2277 | https://iptv-org.github.io/iptv/regions/noram.m3u |
Oceania | 77 | https://iptv-org.github.io/iptv/regions/oce.m3u |
South Asia | 380 | https://iptv-org.github.io/iptv/regions/sas.m3u |
Sub-Saharan Africa | 115 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
West Africa | 71 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
Undefined | 272 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
Country | Channels | Playlist |
---|---|---|
🇦🇫 Afghanistan | 28 | https://iptv-org.github.io/iptv/countries/af.m3u |
🇦🇱 Albania | 41 | https://iptv-org.github.io/iptv/countries/al.m3u |
🇩🇿 Algeria | 66 | https://iptv-org.github.io/iptv/countries/dz.m3u |
🇦🇸 American Samoa | 2 | https://iptv-org.github.io/iptv/countries/as.m3u |
🇦🇩 Andorra | 11 | https://iptv-org.github.io/iptv/countries/ad.m3u |
🇦🇴 Angola | 3 | https://iptv-org.github.io/iptv/countries/ao.m3u |
🇦🇬 Antigua & Barbuda | 1 | https://iptv-org.github.io/iptv/countries/ag.m3u |
🇦🇷 Argentina | 102 | https://iptv-org.github.io/iptv/countries/ar.m3u |
🇦🇲 Armenia | 37 | https://iptv-org.github.io/iptv/countries/am.m3u |
🇦🇼 Aruba | 3 | https://iptv-org.github.io/iptv/countries/aw.m3u |
🇦🇺 Australia | 71 | https://iptv-org.github.io/iptv/countries/au.m3u |
🇦🇹 Austria | 28 | https://iptv-org.github.io/iptv/countries/at.m3u |
🇦🇿 Azerbaijan | 36 | https://iptv-org.github.io/iptv/countries/az.m3u |
🇧🇸 Bahamas | 3 | https://iptv-org.github.io/iptv/countries/bs.m3u |
🇧🇭 Bahrain | 49 | https://iptv-org.github.io/iptv/countries/bh.m3u |
🇧🇩 Bangladesh | 38 | https://iptv-org.github.io/iptv/countries/bd.m3u |
🇧🇧 Barbados | 1 | https://iptv-org.github.io/iptv/countries/bb.m3u |
🇧🇾 Belarus | 29 | https://iptv-org.github.io/iptv/countries/by.m3u |
🇧🇪 Belgium | 31 | https://iptv-org.github.io/iptv/countries/be.m3u |
🇧🇯 Benin | 5 | https://iptv-org.github.io/iptv/countries/bj.m3u |
🇧🇹 Bhutan | 10 | https://iptv-org.github.io/iptv/countries/bt.m3u |
🇧🇴 Bolivia | 56 | https://iptv-org.github.io/iptv/countries/bo.m3u |
🇧🇦 Bosnia | 17 | https://iptv-org.github.io/iptv/countries/ba.m3u |
🇧🇼 Botswana | 1 | https://iptv-org.github.io/iptv/countries/bw.m3u |
🇧🇷 Brazil | 192 | https://iptv-org.github.io/iptv/countries/br.m3u |
🇧🇳 Brunei | 7 | https://iptv-org.github.io/iptv/countries/bn.m3u |
🇧🇬 Bulgaria | 16 | https://iptv-org.github.io/iptv/countries/bg.m3u |
🇧🇫 Burkina Faso | 5 | https://iptv-org.github.io/iptv/countries/bf.m3u |
🇧🇮 Burundi | 1 | https://iptv-org.github.io/iptv/countries/bi.m3u |
🇰🇭 Cambodia | 14 | https://iptv-org.github.io/iptv/countries/kh.m3u |
🇨🇲 Cameroon | 5 | https://iptv-org.github.io/iptv/countries/cm.m3u |
🇨🇦 Canada | 142 | https://iptv-org.github.io/iptv/countries/ca.m3u |
🇨🇻 Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
🇨🇫 Central African Republic | 1 | https://iptv-org.github.io/iptv/countries/cf.m3u |
🇹🇩 Chad | 1 | https://iptv-org.github.io/iptv/countries/td.m3u |
🇨🇱 Chile | 105 | https://iptv-org.github.io/iptv/countries/cl.m3u |
🇨🇳 China | 735 | https://iptv-org.github.io/iptv/countries/cn.m3u |
🇨🇴 Colombia | 77 | https://iptv-org.github.io/iptv/countries/co.m3u |
🇰🇲 Comoros | 40 | https://iptv-org.github.io/iptv/countries/km.m3u |
🇨🇬 Congo - Brazzaville | 3 | https://iptv-org.github.io/iptv/countries/cg.m3u |
🇨🇩 Congo - Kinshasa | 4 | https://iptv-org.github.io/iptv/countries/cd.m3u |
🇨🇰 Cook Islands | 2 | https://iptv-org.github.io/iptv/countries/ck.m3u |
🇨🇷 Costa Rica | 70 | https://iptv-org.github.io/iptv/countries/cr.m3u |
🇨🇮 Côte d’Ivoire | 2 | https://iptv-org.github.io/iptv/countries/ci.m3u |
🇭🇷 Croatia | 19 | https://iptv-org.github.io/iptv/countries/hr.m3u |
🇨🇺 Cuba | 40 | https://iptv-org.github.io/iptv/countries/cu.m3u |
🇨🇼 Curaçao | 5 | https://iptv-org.github.io/iptv/countries/cw.m3u |
🇨🇾 Cyprus | 26 | https://iptv-org.github.io/iptv/countries/cy.m3u |
🇨🇿 Czechia | 29 | https://iptv-org.github.io/iptv/countries/cz.m3u |
🇩🇰 Denmark | 13 | https://iptv-org.github.io/iptv/countries/dk.m3u |
🇩🇯 Djibouti | 42 | https://iptv-org.github.io/iptv/countries/dj.m3u |
🇩🇴 Dominican Republic | 100 | https://iptv-org.github.io/iptv/countries/do.m3u |
🇪🇨 Ecuador | 63 | https://iptv-org.github.io/iptv/countries/ec.m3u |
🇪🇬 Egypt | 82 | https://iptv-org.github.io/iptv/countries/eg.m3u |
🇸🇻 El Salvador | 51 | https://iptv-org.github.io/iptv/countries/sv.m3u |
🇬🇶 Equatorial Guinea | 2 | https://iptv-org.github.io/iptv/countries/gq.m3u |
🇪🇷 Eritrea | 1 | https://iptv-org.github.io/iptv/countries/er.m3u |
🇪🇪 Estonia | 12 | https://iptv-org.github.io/iptv/countries/ee.m3u |
🇸🇿 Eswatini | 1 | https://iptv-org.github.io/iptv/countries/sz.m3u |
🇪🇹 Ethiopia | 2 | https://iptv-org.github.io/iptv/countries/et.m3u |
🇫🇴 Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
🇫🇯 Fiji | 3 | https://iptv-org.github.io/iptv/countries/fj.m3u |
🇫🇮 Finland | 13 | https://iptv-org.github.io/iptv/countries/fi.m3u |
🇫🇷 France | 158 | https://iptv-org.github.io/iptv/countries/fr.m3u |
🇵🇫 French Polynesia | 3 | https://iptv-org.github.io/iptv/countries/pf.m3u |
🇹🇫 French Southern Territories | 1 | https://iptv-org.github.io/iptv/countries/tf.m3u |
🇬🇦 Gabon | 1 | https://iptv-org.github.io/iptv/countries/ga.m3u |
🇬🇲 Gambia | 2 | https://iptv-org.github.io/iptv/countries/gm.m3u |
🇬🇪 Georgia | 20 | https://iptv-org.github.io/iptv/countries/ge.m3u |
🇩🇪 Germany | 192 | https://iptv-org.github.io/iptv/countries/de.m3u |
🇬🇭 Ghana | 3 | https://iptv-org.github.io/iptv/countries/gh.m3u |
🇬🇷 Greece | 98 | https://iptv-org.github.io/iptv/countries/gr.m3u |
🇬🇱 Greenland | 2 | https://iptv-org.github.io/iptv/countries/gl.m3u |
🇬🇵 Guadeloupe | 1 | https://iptv-org.github.io/iptv/countries/gp.m3u |
🇬🇺 Guam | 2 | https://iptv-org.github.io/iptv/countries/gu.m3u |
🇬🇹 Guatemala | 44 | https://iptv-org.github.io/iptv/countries/gt.m3u |
🇬🇳 Guinea | 2 | https://iptv-org.github.io/iptv/countries/gn.m3u |
🇬🇼 Guinea-Bissau | 1 | https://iptv-org.github.io/iptv/countries/gw.m3u |
🇭🇹 Haiti | 14 | https://iptv-org.github.io/iptv/countries/ht.m3u |
🇭🇳 Honduras | 57 | https://iptv-org.github.io/iptv/countries/hn.m3u |
🇭🇰 Hong Kong | 13 | https://iptv-org.github.io/iptv/countries/hk.m3u |
🇭🇺 Hungary | 35 | https://iptv-org.github.io/iptv/countries/hu.m3u |
🇮🇸 Iceland | 7 | https://iptv-org.github.io/iptv/countries/is.m3u |
🇮🇳 India | 316 | https://iptv-org.github.io/iptv/countries/in.m3u |
🇮🇩 Indonesia | 78 | https://iptv-org.github.io/iptv/countries/id.m3u |
🌍 International | 36 | https://iptv-org.github.io/iptv/countries/int.m3u |
🇮🇷 Iran | 185 | https://iptv-org.github.io/iptv/countries/ir.m3u |
🇮🇶 Iraq | 96 | https://iptv-org.github.io/iptv/countries/iq.m3u |
🇮🇪 Ireland | 16 | https://iptv-org.github.io/iptv/countries/ie.m3u |
🇮🇱 Israel | 24 | https://iptv-org.github.io/iptv/countries/il.m3u |
🇮🇹 Italy | 217 | https://iptv-org.github.io/iptv/countries/it.m3u |
🇯🇲 Jamaica | 1 | https://iptv-org.github.io/iptv/countries/jm.m3u |
🇯🇵 Japan | 59 | https://iptv-org.github.io/iptv/countries/jp.m3u |
🇯🇴 Jordan | 66 | https://iptv-org.github.io/iptv/countries/jo.m3u |
🇰🇿 Kazakhstan | 26 | https://iptv-org.github.io/iptv/countries/kz.m3u |
🇰🇪 Kenya | 14 | https://iptv-org.github.io/iptv/countries/ke.m3u |
🇰🇮 Kiribati | 2 | https://iptv-org.github.io/iptv/countries/ki.m3u |
🇽🇰 Kosovo | 4 | https://iptv-org.github.io/iptv/countries/xk.m3u |
🇰🇼 Kuwait | 66 | https://iptv-org.github.io/iptv/countries/kw.m3u |
🇰🇬 Kyrgyzstan | 7 | https://iptv-org.github.io/iptv/countries/kg.m3u |
🇱🇦 Laos | 37 | https://iptv-org.github.io/iptv/countries/la.m3u |
🇱🇻 Latvia | 10 | https://iptv-org.github.io/iptv/countries/lv.m3u |
🇱🇧 Lebanon | 69 | https://iptv-org.github.io/iptv/countries/lb.m3u |
🇱🇸 Lesotho | 1 | https://iptv-org.github.io/iptv/countries/ls.m3u |
🇱🇷 Liberia | 1 | https://iptv-org.github.io/iptv/countries/lr.m3u |
🇱🇾 Libya | 50 | https://iptv-org.github.io/iptv/countries/ly.m3u |
🇱🇮 Liechtenstein | 8 | https://iptv-org.github.io/iptv/countries/li.m3u |
🇱🇹 Lithuania | 10 | https://iptv-org.github.io/iptv/countries/lt.m3u |
🇱🇺 Luxembourg | 16 | https://iptv-org.github.io/iptv/countries/lu.m3u |
🇲🇴 Macao | 11 | https://iptv-org.github.io/iptv/countries/mo.m3u |
🇲🇬 Madagascar | 1 | https://iptv-org.github.io/iptv/countries/mg.m3u |
🇲🇼 Malawi | 1 | https://iptv-org.github.io/iptv/countries/mw.m3u |
🇲🇾 Malaysia | 29 | https://iptv-org.github.io/iptv/countries/my.m3u |
🇲🇻 Maldives | 11 | https://iptv-org.github.io/iptv/countries/mv.m3u |
🇲🇱 Mali | 2 | https://iptv-org.github.io/iptv/countries/ml.m3u |
🇲🇹 Malta | 9 | https://iptv-org.github.io/iptv/countries/mt.m3u |
🇲🇭 Marshall Islands | 2 | https://iptv-org.github.io/iptv/countries/mh.m3u |
🇲🇶 Martinique | 2 | https://iptv-org.github.io/iptv/countries/mq.m3u |
🇲🇷 Mauritania | 40 | https://iptv-org.github.io/iptv/countries/mr.m3u |
🇲🇺 Mauritius | 2 | https://iptv-org.github.io/iptv/countries/mu.m3u |
🇾🇹 Mayotte | 1 | https://iptv-org.github.io/iptv/countries/yt.m3u |
🇲🇽 Mexico | 121 | https://iptv-org.github.io/iptv/countries/mx.m3u |
🇫🇲 Micronesia | 2 | https://iptv-org.github.io/iptv/countries/fm.m3u |
🇲🇩 Moldova | 17 | https://iptv-org.github.io/iptv/countries/md.m3u |
🇲🇨 Monaco | 9 | https://iptv-org.github.io/iptv/countries/mc.m3u |
🇲🇳 Mongolia | 6 | https://iptv-org.github.io/iptv/countries/mn.m3u |
🇲🇪 Montenegro | 12 | https://iptv-org.github.io/iptv/countries/me.m3u |
🇲🇦 Morocco | 57 | https://iptv-org.github.io/iptv/countries/ma.m3u |
🇲🇿 Mozambique | 3 | https://iptv-org.github.io/iptv/countries/mz.m3u |
🇲🇲 Myanmar | 6 | https://iptv-org.github.io/iptv/countries/mm.m3u |
🇳🇦 Namibia | 1 | https://iptv-org.github.io/iptv/countries/na.m3u |
🇳🇷 Nauru | 2 | https://iptv-org.github.io/iptv/countries/nr.m3u |
🇳🇵 Nepal | 11 | https://iptv-org.github.io/iptv/countries/np.m3u |
🇳🇱 Netherlands | 98 | https://iptv-org.github.io/iptv/countries/nl.m3u |
🇳🇨 New Caledonia | 2 | https://iptv-org.github.io/iptv/countries/nc.m3u |
🇳🇿 New Zealand | 20 | https://iptv-org.github.io/iptv/countries/nz.m3u |
🇳🇮 Nicaragua | 45 | https://iptv-org.github.io/iptv/countries/ni.m3u |
🇳🇪 Niger | 2 | https://iptv-org.github.io/iptv/countries/ne.m3u |
🇳🇬 Nigeria | 7 | https://iptv-org.github.io/iptv/countries/ng.m3u |
🇳🇺 Niue | 2 | https://iptv-org.github.io/iptv/countries/nu.m3u |
🇳🇫 Norfolk Island | 2 | https://iptv-org.github.io/iptv/countries/nf.m3u |
🇰🇵 North Korea | 7 | https://iptv-org.github.io/iptv/countries/kp.m3u |
🇲🇰 North Macedonia | 9 | https://iptv-org.github.io/iptv/countries/mk.m3u |
🇲🇵 Northern Mariana Islands | 2 | https://iptv-org.github.io/iptv/countries/mp.m3u |
🇳🇴 Norway | 18 | https://iptv-org.github.io/iptv/countries/no.m3u |
🇴🇲 Oman | 51 | https://iptv-org.github.io/iptv/countries/om.m3u |
🇵🇰 Pakistan | 31 | https://iptv-org.github.io/iptv/countries/pk.m3u |
🇵🇼 Palau | 2 | https://iptv-org.github.io/iptv/countries/pw.m3u |
🇵🇸 Palestine | 68 | https://iptv-org.github.io/iptv/countries/ps.m3u |
🇵🇦 Panama | 48 | https://iptv-org.github.io/iptv/countries/pa.m3u |
🇵🇬 Papua New Guinea | 2 | https://iptv-org.github.io/iptv/countries/pg.m3u |
🇵🇾 Paraguay | 47 | https://iptv-org.github.io/iptv/countries/py.m3u |
🇵🇪 Peru | 240 | https://iptv-org.github.io/iptv/countries/pe.m3u |
🇵🇭 Philippines | 21 | https://iptv-org.github.io/iptv/countries/ph.m3u |
🇵🇳 Pitcairn Islands | 2 | https://iptv-org.github.io/iptv/countries/pn.m3u |
🇵🇱 Poland | 44 | https://iptv-org.github.io/iptv/countries/pl.m3u |
🇵🇹 Portugal | 46 | https://iptv-org.github.io/iptv/countries/pt.m3u |
🇵🇷 Puerto Rico | 46 | https://iptv-org.github.io/iptv/countries/pr.m3u |
🇶🇦 Qatar | 52 | https://iptv-org.github.io/iptv/countries/qa.m3u |
🇷🇪 Réunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
🇷🇴 Romania | 52 | https://iptv-org.github.io/iptv/countries/ro.m3u |
🇷🇺 Russia | 324 | https://iptv-org.github.io/iptv/countries/ru.m3u |
🇷🇼 Rwanda | 3 | https://iptv-org.github.io/iptv/countries/rw.m3u |
🇼🇸 Samoa | 2 | https://iptv-org.github.io/iptv/countries/ws.m3u |
🇸🇲 San Marino | 8 | https://iptv-org.github.io/iptv/countries/sm.m3u |
🇸🇹 São Tomé & Príncipe | 1 | https://iptv-org.github.io/iptv/countries/st.m3u |
🇸🇦 Saudi Arabia | 83 | https://iptv-org.github.io/iptv/countries/sa.m3u |
🇸🇳 Senegal | 15 | https://iptv-org.github.io/iptv/countries/sn.m3u |
🇷🇸 Serbia | 31 | https://iptv-org.github.io/iptv/countries/rs.m3u |
🇸🇨 Seychelles | 1 | https://iptv-org.github.io/iptv/countries/sc.m3u |
🇸🇱 Sierra Leone | 2 | https://iptv-org.github.io/iptv/countries/sl.m3u |
🇸🇬 Singapore | 12 | https://iptv-org.github.io/iptv/countries/sg.m3u |
🇸🇰 Slovakia | 36 | https://iptv-org.github.io/iptv/countries/sk.m3u |
🇸🇮 Slovenia | 17 | https://iptv-org.github.io/iptv/countries/si.m3u |
🇸🇧 Solomon Islands | 2 | https://iptv-org.github.io/iptv/countries/sb.m3u |
🇸🇴 Somalia | 45 | https://iptv-org.github.io/iptv/countries/so.m3u |
🇿🇦 South Africa | 1 | https://iptv-org.github.io/iptv/countries/za.m3u |
🇰🇷 South Korea | 63 | https://iptv-org.github.io/iptv/countries/kr.m3u |
🇸🇸 South Sudan | 1 | https://iptv-org.github.io/iptv/countries/ss.m3u |
🇪🇸 Spain | 229 | https://iptv-org.github.io/iptv/countries/es.m3u |
🇱🇰 Sri Lanka | 18 | https://iptv-org.github.io/iptv/countries/lk.m3u |
🇸🇭 St. Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
🇸🇩 Sudan | 44 | https://iptv-org.github.io/iptv/countries/sd.m3u |
🇸🇪 Sweden | 19 | https://iptv-org.github.io/iptv/countries/se.m3u |
🇨🇭 Switzerland | 99 | https://iptv-org.github.io/iptv/countries/ch.m3u |
🇸🇾 Syria | 66 | https://iptv-org.github.io/iptv/countries/sy.m3u |
🇹🇼 Taiwan | 76 | https://iptv-org.github.io/iptv/countries/tw.m3u |
🇹🇯 Tajikistan | 5 | https://iptv-org.github.io/iptv/countries/tj.m3u |
🇹🇿 Tanzania | 3 | https://iptv-org.github.io/iptv/countries/tz.m3u |
🇹🇭 Thailand | 61 | https://iptv-org.github.io/iptv/countries/th.m3u |
🇹🇱 Timor-Leste | 6 | https://iptv-org.github.io/iptv/countries/tl.m3u |
🇹🇬 Togo | 1 | https://iptv-org.github.io/iptv/countries/tg.m3u |
🇹🇰 Tokelau | 2 | https://iptv-org.github.io/iptv/countries/tk.m3u |
🇹🇴 Tonga | 2 | https://iptv-org.github.io/iptv/countries/to.m3u |
🇹🇹 Trinidad & Tobago | 0 | https://iptv-org.github.io/iptv/countries/tt.m3u |
🇹🇳 Tunisia | 50 | https://iptv-org.github.io/iptv/countries/tn.m3u |
🇹🇷 Turkey | 174 | https://iptv-org.github.io/iptv/countries/tr.m3u |
🇹🇲 Turkmenistan | 11 | https://iptv-org.github.io/iptv/countries/tm.m3u |
🇹🇻 Tuvalu | 2 | https://iptv-org.github.io/iptv/countries/tv.m3u |
🇺🇬 Uganda | 3 | https://iptv-org.github.io/iptv/countries/ug.m3u |
🇺🇦 Ukraine | 96 | https://iptv-org.github.io/iptv/countries/ua.m3u |
🇦🇪 United Arab Emirates | 88 | https://iptv-org.github.io/iptv/countries/ae.m3u |
🇬🇧 United Kingdom | 191 | https://iptv-org.github.io/iptv/countries/uk.m3u |
🇺🇸 United States | 1864 | https://iptv-org.github.io/iptv/countries/us.m3u |
🇺🇾 Uruguay | 44 | https://iptv-org.github.io/iptv/countries/uy.m3u |
🇺🇿 Uzbekistan | 5 | https://iptv-org.github.io/iptv/countries/uz.m3u |
🇻🇺 Vanuatu | 2 | https://iptv-org.github.io/iptv/countries/vu.m3u |
🇻🇦 Vatican City | 7 | https://iptv-org.github.io/iptv/countries/va.m3u |
🇻🇪 Venezuela | 54 | https://iptv-org.github.io/iptv/countries/ve.m3u |
🇻🇳 Vietnam | 72 | https://iptv-org.github.io/iptv/countries/vn.m3u |
🇼🇫 Wallis & Futuna | 2 | https://iptv-org.github.io/iptv/countries/wf.m3u |
🇪🇭 Western Sahara | 3 | https://iptv-org.github.io/iptv/countries/eh.m3u |
🇾🇪 Yemen | 53 | https://iptv-org.github.io/iptv/countries/ye.m3u |
🇿🇲 Zambia | 3 | https://iptv-org.github.io/iptv/countries/zm.m3u |
🇿🇼 Zimbabwe | 1 | https://iptv-org.github.io/iptv/countries/zw.m3u |
Undefined | 209 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
Country | Channels | Playlist |
🇦🇫 Afghanistan | 26 | https://iptv-org.github.io/iptv/countries/af.m3u |
🇦🇱 Albania | 125 | https://iptv-org.github.io/iptv/countries/al.m3u |
🇩🇿 Algeria | 62 | https://iptv-org.github.io/iptv/countries/dz.m3u |
🇦🇸 American Samoa | 2 | https://iptv-org.github.io/iptv/countries/as.m3u |
🇦🇩 Andorra | 10 | https://iptv-org.github.io/iptv/countries/ad.m3u |
🇦🇴 Angola | 3 | https://iptv-org.github.io/iptv/countries/ao.m3u |
🇦🇬 Antigua and Barbuda | 1 | https://iptv-org.github.io/iptv/countries/ag.m3u |
🇦🇷 Argentina | 103 | https://iptv-org.github.io/iptv/countries/ar.m3u |
🇦🇲 Armenia | 33 | https://iptv-org.github.io/iptv/countries/am.m3u |
🇦🇼 Aruba | 3 | https://iptv-org.github.io/iptv/countries/aw.m3u |
🇦🇺 Australia | 64 | https://iptv-org.github.io/iptv/countries/au.m3u |
🇦🇹 Austria | 31 | https://iptv-org.github.io/iptv/countries/at.m3u |
🇦🇿 Azerbaijan | 32 | https://iptv-org.github.io/iptv/countries/az.m3u |
🇧🇸 Bahamas | 3 | https://iptv-org.github.io/iptv/countries/bs.m3u |
🇧🇭 Bahrain | 45 | https://iptv-org.github.io/iptv/countries/bh.m3u |
🇧🇩 Bangladesh | 37 | https://iptv-org.github.io/iptv/countries/bd.m3u |
🇧🇧 Barbados | 1 | https://iptv-org.github.io/iptv/countries/bb.m3u |
🇧🇾 Belarus | 28 | https://iptv-org.github.io/iptv/countries/by.m3u |
🇧🇪 Belgium | 29 | https://iptv-org.github.io/iptv/countries/be.m3u |
🇧🇯 Benin | 5 | https://iptv-org.github.io/iptv/countries/bj.m3u |
🇧🇹 Bhutan | 9 | https://iptv-org.github.io/iptv/countries/bt.m3u |
🇧🇴 Bolivia | 52 | https://iptv-org.github.io/iptv/countries/bo.m3u |
🇧🇦 Bosnia and Herzegovina | 18 | https://iptv-org.github.io/iptv/countries/ba.m3u |
🇧🇼 Botswana | 1 | https://iptv-org.github.io/iptv/countries/bw.m3u |
🇧🇷 Brazil | 186 | https://iptv-org.github.io/iptv/countries/br.m3u |
🇧🇳 Brunei | 6 | https://iptv-org.github.io/iptv/countries/bn.m3u |
🇧🇬 Bulgaria | 14 | https://iptv-org.github.io/iptv/countries/bg.m3u |
🇧🇫 Burkina Faso | 4 | https://iptv-org.github.io/iptv/countries/bf.m3u |
🇧🇮 Burundi | 1 | https://iptv-org.github.io/iptv/countries/bi.m3u |
🇰🇭 Cambodia | 13 | https://iptv-org.github.io/iptv/countries/kh.m3u |
🇨🇲 Cameroon | 5 | https://iptv-org.github.io/iptv/countries/cm.m3u |
🇨🇦 Canada | 135 | https://iptv-org.github.io/iptv/countries/ca.m3u |
🇨🇻 Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
🇨🇫 Central African Republic | 1 | https://iptv-org.github.io/iptv/countries/cf.m3u |
🇹🇩 Chad | 1 | https://iptv-org.github.io/iptv/countries/td.m3u |
🇨🇱 Chile | 167 | https://iptv-org.github.io/iptv/countries/cl.m3u |
🇨🇳 China | 684 | https://iptv-org.github.io/iptv/countries/cn.m3u |
🇨🇴 Colombia | 74 | https://iptv-org.github.io/iptv/countries/co.m3u |
🇰🇲 Comoros | 37 | https://iptv-org.github.io/iptv/countries/km.m3u |
🇨🇰 Cook Islands | 2 | https://iptv-org.github.io/iptv/countries/ck.m3u |
🇨🇷 Costa Rica | 65 | https://iptv-org.github.io/iptv/countries/cr.m3u |
🇭🇷 Croatia | 18 | https://iptv-org.github.io/iptv/countries/hr.m3u |
🇨🇺 Cuba | 37 | https://iptv-org.github.io/iptv/countries/cu.m3u |
🇨🇼 Curacao | 4 | https://iptv-org.github.io/iptv/countries/cw.m3u |
🇨🇾 Cyprus | 24 | https://iptv-org.github.io/iptv/countries/cy.m3u |
🇨🇿 Czech Republic | 25 | https://iptv-org.github.io/iptv/countries/cz.m3u |
🇨🇩 Democratic Republic of the Congo | 4 | https://iptv-org.github.io/iptv/countries/cd.m3u |
🇩🇰 Denmark | 12 | https://iptv-org.github.io/iptv/countries/dk.m3u |
🇩🇯 Djibouti | 39 | https://iptv-org.github.io/iptv/countries/dj.m3u |
🇩🇴 Dominican Republic | 96 | https://iptv-org.github.io/iptv/countries/do.m3u |
🇹🇱 East Timor | 5 | https://iptv-org.github.io/iptv/countries/tl.m3u |
🇪🇨 Ecuador | 62 | https://iptv-org.github.io/iptv/countries/ec.m3u |
🇪🇬 Egypt | 72 | https://iptv-org.github.io/iptv/countries/eg.m3u |
🇸🇻 El Salvador | 47 | https://iptv-org.github.io/iptv/countries/sv.m3u |
🇬🇶 Equatorial Guinea | 2 | https://iptv-org.github.io/iptv/countries/gq.m3u |
🇪🇷 Eritrea | 1 | https://iptv-org.github.io/iptv/countries/er.m3u |
🇪🇪 Estonia | 11 | https://iptv-org.github.io/iptv/countries/ee.m3u |
🇪🇹 Ethiopia | 2 | https://iptv-org.github.io/iptv/countries/et.m3u |
🇫🇴 Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
🇫🇯 Fiji | 3 | https://iptv-org.github.io/iptv/countries/fj.m3u |
🇫🇮 Finland | 12 | https://iptv-org.github.io/iptv/countries/fi.m3u |
🇫🇷 France | 151 | https://iptv-org.github.io/iptv/countries/fr.m3u |
🇵🇫 French Polynesia | 3 | https://iptv-org.github.io/iptv/countries/pf.m3u |
🇹🇫 French Southern Territories | 1 | https://iptv-org.github.io/iptv/countries/tf.m3u |
🇬🇦 Gabon | 1 | https://iptv-org.github.io/iptv/countries/ga.m3u |
🇬🇲 Gambia | 2 | https://iptv-org.github.io/iptv/countries/gm.m3u |
🇬🇪 Georgia | 17 | https://iptv-org.github.io/iptv/countries/ge.m3u |
🇩🇪 Germany | 184 | https://iptv-org.github.io/iptv/countries/de.m3u |
🇬🇭 Ghana | 3 | https://iptv-org.github.io/iptv/countries/gh.m3u |
🇬🇷 Greece | 93 | https://iptv-org.github.io/iptv/countries/gr.m3u |
🇬🇱 Greenland | 2 | https://iptv-org.github.io/iptv/countries/gl.m3u |
🇬🇵 Guadeloupe | 1 | https://iptv-org.github.io/iptv/countries/gp.m3u |
🇬🇺 Guam | 2 | https://iptv-org.github.io/iptv/countries/gu.m3u |
🇬🇹 Guatemala | 41 | https://iptv-org.github.io/iptv/countries/gt.m3u |
🇬🇳 Guinea | 2 | https://iptv-org.github.io/iptv/countries/gn.m3u |
🇬🇼 Guinea-Bissau | 1 | https://iptv-org.github.io/iptv/countries/gw.m3u |
🇭🇹 Haiti | 14 | https://iptv-org.github.io/iptv/countries/ht.m3u |
🇭🇳 Honduras | 67 | https://iptv-org.github.io/iptv/countries/hn.m3u |
🇭🇰 Hong Kong | 16 | https://iptv-org.github.io/iptv/countries/hk.m3u |
🇭🇺 Hungary | 34 | https://iptv-org.github.io/iptv/countries/hu.m3u |
🇮🇸 Iceland | 6 | https://iptv-org.github.io/iptv/countries/is.m3u |
🇮🇳 India | 310 | https://iptv-org.github.io/iptv/countries/in.m3u |
🇮🇩 Indonesia | 79 | https://iptv-org.github.io/iptv/countries/id.m3u |
🇮🇷 Iran | 175 | https://iptv-org.github.io/iptv/countries/ir.m3u |
🇮🇶 Iraq | 92 | https://iptv-org.github.io/iptv/countries/iq.m3u |
🇮🇪 Ireland | 15 | https://iptv-org.github.io/iptv/countries/ie.m3u |
🇮🇱 Israel | 22 | https://iptv-org.github.io/iptv/countries/il.m3u |
🇮🇹 Italy | 196 | https://iptv-org.github.io/iptv/countries/it.m3u |
🇨🇮 Ivory Coast | 2 | https://iptv-org.github.io/iptv/countries/ci.m3u |
🇯🇲 Jamaica | 1 | https://iptv-org.github.io/iptv/countries/jm.m3u |
🇯🇵 Japan | 56 | https://iptv-org.github.io/iptv/countries/jp.m3u |
🇯🇴 Jordan | 62 | https://iptv-org.github.io/iptv/countries/jo.m3u |
🇰🇿 Kazakhstan | 25 | https://iptv-org.github.io/iptv/countries/kz.m3u |
🇰🇪 Kenya | 14 | https://iptv-org.github.io/iptv/countries/ke.m3u |
🇰🇮 Kiribati | 2 | https://iptv-org.github.io/iptv/countries/ki.m3u |
🇽🇰 Kosovo | 6 | https://iptv-org.github.io/iptv/countries/xk.m3u |
🇰🇼 Kuwait | 62 | https://iptv-org.github.io/iptv/countries/kw.m3u |
🇰🇬 Kyrgyzstan | 6 | https://iptv-org.github.io/iptv/countries/kg.m3u |
🇱🇦 Laos | 36 | https://iptv-org.github.io/iptv/countries/la.m3u |
🇱🇻 Latvia | 9 | https://iptv-org.github.io/iptv/countries/lv.m3u |
🇱🇧 Lebanon | 66 | https://iptv-org.github.io/iptv/countries/lb.m3u |
🇱🇸 Lesotho | 1 | https://iptv-org.github.io/iptv/countries/ls.m3u |
🇱🇷 Liberia | 1 | https://iptv-org.github.io/iptv/countries/lr.m3u |
🇱🇾 Libya | 47 | https://iptv-org.github.io/iptv/countries/ly.m3u |
🇱🇮 Liechtenstein | 7 | https://iptv-org.github.io/iptv/countries/li.m3u |
🇱🇹 Lithuania | 9 | https://iptv-org.github.io/iptv/countries/lt.m3u |
🇱🇺 Luxembourg | 14 | https://iptv-org.github.io/iptv/countries/lu.m3u |
🇲🇴 Macao | 10 | https://iptv-org.github.io/iptv/countries/mo.m3u |
🇲🇬 Madagascar | 1 | https://iptv-org.github.io/iptv/countries/mg.m3u |
🇲🇼 Malawi | 1 | https://iptv-org.github.io/iptv/countries/mw.m3u |
🇲🇾 Malaysia | 27 | https://iptv-org.github.io/iptv/countries/my.m3u |
🇲🇻 Maldives | 10 | https://iptv-org.github.io/iptv/countries/mv.m3u |
🇲🇱 Mali | 2 | https://iptv-org.github.io/iptv/countries/ml.m3u |
🇲🇹 Malta | 8 | https://iptv-org.github.io/iptv/countries/mt.m3u |
🇲🇭 Marshall Islands | 2 | https://iptv-org.github.io/iptv/countries/mh.m3u |
🇲🇶 Martinique | 2 | https://iptv-org.github.io/iptv/countries/mq.m3u |
🇲🇷 Mauritania | 37 | https://iptv-org.github.io/iptv/countries/mr.m3u |
🇲🇺 Mauritius | 1 | https://iptv-org.github.io/iptv/countries/mu.m3u |
🇾🇹 Mayotte | 1 | https://iptv-org.github.io/iptv/countries/yt.m3u |
🇲🇽 Mexico | 112 | https://iptv-org.github.io/iptv/countries/mx.m3u |
🇫🇲 Micronesia | 2 | https://iptv-org.github.io/iptv/countries/fm.m3u |
🇲🇩 Moldova | 16 | https://iptv-org.github.io/iptv/countries/md.m3u |
🇲🇨 Monaco | 8 | https://iptv-org.github.io/iptv/countries/mc.m3u |
🇲🇳 Mongolia | 5 | https://iptv-org.github.io/iptv/countries/mn.m3u |
🇲🇪 Montenegro | 9 | https://iptv-org.github.io/iptv/countries/me.m3u |
🇲🇦 Morocco | 54 | https://iptv-org.github.io/iptv/countries/ma.m3u |
🇲🇿 Mozambique | 4 | https://iptv-org.github.io/iptv/countries/mz.m3u |
🇲🇲 Myanmar [Burma] | 5 | https://iptv-org.github.io/iptv/countries/mm.m3u |
🇳🇦 Namibia | 1 | https://iptv-org.github.io/iptv/countries/na.m3u |
🇳🇷 Nauru | 2 | https://iptv-org.github.io/iptv/countries/nr.m3u |
🇳🇵 Nepal | 10 | https://iptv-org.github.io/iptv/countries/np.m3u |
🇳🇱 Netherlands | 96 | https://iptv-org.github.io/iptv/countries/nl.m3u |
🇳🇨 New Caledonia | 2 | https://iptv-org.github.io/iptv/countries/nc.m3u |
🇳🇿 New Zealand | 19 | https://iptv-org.github.io/iptv/countries/nz.m3u |
🇳🇮 Nicaragua | 44 | https://iptv-org.github.io/iptv/countries/ni.m3u |
🇳🇪 Niger | 2 | https://iptv-org.github.io/iptv/countries/ne.m3u |
🇳🇬 Nigeria | 7 | https://iptv-org.github.io/iptv/countries/ng.m3u |
🇳🇺 Niue | 2 | https://iptv-org.github.io/iptv/countries/nu.m3u |
🇳🇫 Norfolk Island | 2 | https://iptv-org.github.io/iptv/countries/nf.m3u |
🇰🇵 North Korea | 6 | https://iptv-org.github.io/iptv/countries/kp.m3u |
🇲🇰 North Macedonia | 7 | https://iptv-org.github.io/iptv/countries/mk.m3u |
🇲🇵 Northern Mariana Islands | 2 | https://iptv-org.github.io/iptv/countries/mp.m3u |
🇳🇴 Norway | 17 | https://iptv-org.github.io/iptv/countries/no.m3u |
🇴🇲 Oman | 47 | https://iptv-org.github.io/iptv/countries/om.m3u |
🇵🇰 Pakistan | 29 | https://iptv-org.github.io/iptv/countries/pk.m3u |
🇵🇼 Palau | 2 | https://iptv-org.github.io/iptv/countries/pw.m3u |
🇵🇸 Palestine | 64 | https://iptv-org.github.io/iptv/countries/ps.m3u |
🇵🇦 Panama | 45 | https://iptv-org.github.io/iptv/countries/pa.m3u |
🇵🇬 Papua New Guinea | 2 | https://iptv-org.github.io/iptv/countries/pg.m3u |
🇵🇾 Paraguay | 45 | https://iptv-org.github.io/iptv/countries/py.m3u |
🇵🇪 Peru | 241 | https://iptv-org.github.io/iptv/countries/pe.m3u |
🇵🇭 Philippines | 21 | https://iptv-org.github.io/iptv/countries/ph.m3u |
🇵🇳 Pitcairn Islands | 2 | https://iptv-org.github.io/iptv/countries/pn.m3u |
🇵🇱 Poland | 39 | https://iptv-org.github.io/iptv/countries/pl.m3u |
🇵🇹 Portugal | 44 | https://iptv-org.github.io/iptv/countries/pt.m3u |
🇵🇷 Puerto Rico | 44 | https://iptv-org.github.io/iptv/countries/pr.m3u |
🇶🇦 Qatar | 49 | https://iptv-org.github.io/iptv/countries/qa.m3u |
🇨🇬 Republic of the Congo | 2 | https://iptv-org.github.io/iptv/countries/cg.m3u |
🇷🇴 Romania | 52 | https://iptv-org.github.io/iptv/countries/ro.m3u |
🇷🇺 Russia | 316 | https://iptv-org.github.io/iptv/countries/ru.m3u |
🇷🇼 Rwanda | 3 | https://iptv-org.github.io/iptv/countries/rw.m3u |
🇷🇪 Réunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
🇸🇭 Saint Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
🇼🇸 Samoa | 2 | https://iptv-org.github.io/iptv/countries/ws.m3u |
🇸🇲 San Marino | 7 | https://iptv-org.github.io/iptv/countries/sm.m3u |
🇸🇦 Saudi Arabia | 77 | https://iptv-org.github.io/iptv/countries/sa.m3u |
🇸🇳 Senegal | 15 | https://iptv-org.github.io/iptv/countries/sn.m3u |
🇷🇸 Serbia | 29 | https://iptv-org.github.io/iptv/countries/rs.m3u |
🇸🇨 Seychelles | 1 | https://iptv-org.github.io/iptv/countries/sc.m3u |
🇸🇱 Sierra Leone | 2 | https://iptv-org.github.io/iptv/countries/sl.m3u |
🇸🇬 Singapore | 11 | https://iptv-org.github.io/iptv/countries/sg.m3u |
🇸🇰 Slovakia | 30 | https://iptv-org.github.io/iptv/countries/sk.m3u |
🇸🇮 Slovenia | 16 | https://iptv-org.github.io/iptv/countries/si.m3u |
🇸🇧 Solomon Islands | 2 | https://iptv-org.github.io/iptv/countries/sb.m3u |
🇸🇴 Somalia | 41 | https://iptv-org.github.io/iptv/countries/so.m3u |
🇿🇦 South Africa | 1 | https://iptv-org.github.io/iptv/countries/za.m3u |
🇰🇷 South Korea | 54 | https://iptv-org.github.io/iptv/countries/kr.m3u |
🇸🇸 South Sudan | 1 | https://iptv-org.github.io/iptv/countries/ss.m3u |
🇪🇸 Spain | 196 | https://iptv-org.github.io/iptv/countries/es.m3u |
🇱🇰 Sri Lanka | 18 | https://iptv-org.github.io/iptv/countries/lk.m3u |
🇸🇩 Sudan | 40 | https://iptv-org.github.io/iptv/countries/sd.m3u |
🇸🇿 Swaziland | 1 | https://iptv-org.github.io/iptv/countries/sz.m3u |
🇸🇪 Sweden | 16 | https://iptv-org.github.io/iptv/countries/se.m3u |
🇨🇭 Switzerland | 93 | https://iptv-org.github.io/iptv/countries/ch.m3u |
🇸🇾 Syria | 61 | https://iptv-org.github.io/iptv/countries/sy.m3u |
🇸🇹 São Tomé and Príncipe | 1 | https://iptv-org.github.io/iptv/countries/st.m3u |
🇹🇼 Taiwan | 77 | https://iptv-org.github.io/iptv/countries/tw.m3u |
🇹🇯 Tajikistan | 4 | https://iptv-org.github.io/iptv/countries/tj.m3u |
🇹🇿 Tanzania | 3 | https://iptv-org.github.io/iptv/countries/tz.m3u |
🇹🇭 Thailand | 57 | https://iptv-org.github.io/iptv/countries/th.m3u |
🇹🇬 Togo | 1 | https://iptv-org.github.io/iptv/countries/tg.m3u |
🇹🇰 Tokelau | 2 | https://iptv-org.github.io/iptv/countries/tk.m3u |
🇹🇴 Tonga | 2 | https://iptv-org.github.io/iptv/countries/to.m3u |
🇹🇹 Trinidad and Tobago | 1 | https://iptv-org.github.io/iptv/countries/tt.m3u |
🇹🇳 Tunisia | 47 | https://iptv-org.github.io/iptv/countries/tn.m3u |
🇹🇷 Turkey | 166 | https://iptv-org.github.io/iptv/countries/tr.m3u |
🇹🇲 Turkmenistan | 10 | https://iptv-org.github.io/iptv/countries/tm.m3u |
🇹🇻 Tuvalu | 2 | https://iptv-org.github.io/iptv/countries/tv.m3u |
🇺🇬 Uganda | 4 | https://iptv-org.github.io/iptv/countries/ug.m3u |
🇺🇦 Ukraine | 94 | https://iptv-org.github.io/iptv/countries/ua.m3u |
🇦🇪 United Arab Emirates | 84 | https://iptv-org.github.io/iptv/countries/ae.m3u |
🇬🇧 United Kingdom | 182 | https://iptv-org.github.io/iptv/countries/uk.m3u |
🇺🇸 United States | 1863 | https://iptv-org.github.io/iptv/countries/us.m3u |
🇺🇾 Uruguay | 40 | https://iptv-org.github.io/iptv/countries/uy.m3u |
🇺🇿 Uzbekistan | 4 | https://iptv-org.github.io/iptv/countries/uz.m3u |
🇻🇺 Vanuatu | 2 | https://iptv-org.github.io/iptv/countries/vu.m3u |
🇻🇦 Vatican City | 6 | https://iptv-org.github.io/iptv/countries/va.m3u |
🇻🇪 Venezuela | 53 | https://iptv-org.github.io/iptv/countries/ve.m3u |
🇻🇳 Vietnam | 80 | https://iptv-org.github.io/iptv/countries/vn.m3u |
🇼🇫 Wallis and Futuna | 2 | https://iptv-org.github.io/iptv/countries/wf.m3u |
🇪🇭 Western Sahara | 3 | https://iptv-org.github.io/iptv/countries/eh.m3u |
🇾🇪 Yemen | 49 | https://iptv-org.github.io/iptv/countries/ye.m3u |
🇿🇲 Zambia | 3 | https://iptv-org.github.io/iptv/countries/zm.m3u |
🇿🇼 Zimbabwe | 1 | https://iptv-org.github.io/iptv/countries/zw.m3u |
🌍 International | 33 | https://iptv-org.github.io/iptv/countries/int.m3u |
Undefined | 221 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
https://iptv-org.github.io/iptv/categories/${category.slug}.m3u
`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Category', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_categories.md', table)
+}
+
+async function generateCountryTable() {
+ logger.info('Generating country table...')
+
+ const rows = []
+ for (const country of countries) {
+ const flag = getCountryFlag(country.code)
+ const prefix = flag ? `${flag} ` : ''
+
+ rows.push({
+ country: prefix + country.name,
+ channels: country.count,
+ playlist: `https://iptv-org.github.io/iptv/countries/${country.code.toLowerCase()}.m3u
`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Country', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_countries.md', table)
+}
+
+async function generateRegionTable() {
+ logger.info('Generating region table...')
+
+ const rows = []
+ for (const region of regions) {
+ rows.push({
+ region: region.name,
+ channels: region.count,
+ playlist: `https://iptv-org.github.io/iptv/regions/${region.code.toLowerCase()}.m3u
`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Region', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_regions.md', table)
+}
+
+async function generateLanguageTable() {
+ logger.info('Generating language table...')
+
+ const rows = []
+ for (const language of languages) {
+ rows.push({
+ language: language.name,
+ channels: language.count,
+ playlist: `https://iptv-org.github.io/iptv/languages/${language.code}.m3u
`
+ })
+ }
+
+ const table = markdown.createTable(rows, [
+ { name: 'Language', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true }
+ ])
+
+ await file.create('./.readme/_languages.md', table)
+}
+
+async function updateReadme() {
+ logger.info('Updating README.md...')
+
+ const config = require(file.resolve(options.config))
+ await file.createDir(file.dirname(config.build))
+ await markdown.compile(options.config)
+}
+
+async function setUp() {
+ categories = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/categories.log`)
+ countries = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/countries.log`)
+ languages = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/languages.log`)
+ regions = await parser.parseLogs(`${LOGS_PATH}/generate-playlists/regions.log`)
+}
+
+function getCountryFlag(code) {
+ switch (code) {
+ case 'UK':
+ return '🇬🇧'
+ case 'INT':
+ return '🌍'
+ case 'UNDEFINED':
+ return ''
+ default:
+ return code.replace(/./g, char => String.fromCodePoint(char.charCodeAt(0) + 127397))
+ }
+}
diff --git a/scripts/commands/validate.js b/scripts/commands/validate.js
new file mode 100644
index 0000000000..0d2b716558
--- /dev/null
+++ b/scripts/commands/validate.js
@@ -0,0 +1,55 @@
+const blocklist = require('../data/blocklist')
+const parser = require('iptv-playlist-parser')
+const { file, logger } = require('../core')
+const { program } = require('commander')
+
+const options = program
+ .option('--input-dir ${column.name} | ` + } + output += '
---|
${item[prop]} | ` + i++ + } + output += '
https://iptv-org.github.io/iptv/categories/${category.id}.m3u
`
- })
- }
-
- const table = generateTable(categories, {
- columns: [
- { name: 'Category', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left' }
- ]
- })
-
- file.create('./.readme/_categories.md', table)
-}
-
-function generateCountriesTable() {
- log.print('Generating countries table...\n')
-
- const countries = []
- for (const country of [
- ...db.countries.sortBy(['name']).all(),
- { name: 'Undefined', code: 'undefined' }
- ]) {
- let flag = utils.code2flag(country.code)
- const prefix = flag ? `${flag} ` : ''
- countries.push({
- country: prefix + country.name,
- channels: db.channels
- .forCountry(country)
- .removeOffline()
- .removeDuplicates()
- .removeNSFW()
- .count(),
- playlist: `https://iptv-org.github.io/iptv/countries/${country.code}.m3u
`
- })
- }
-
- const table = generateTable(countries, {
- columns: [
- { name: 'Country', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left', nowrap: true }
- ]
- })
-
- file.create('./.readme/_countries.md', table)
-}
-
-function generateLanguagesTable() {
- log.print('Generating languages table...\n')
- const languages = []
-
- for (const language of [
- ...db.languages.sortBy(['name']).all(),
- { name: 'Undefined', code: 'undefined' }
- ]) {
- languages.push({
- language: language.name,
- channels: db.channels
- .forLanguage(language)
- .removeOffline()
- .removeDuplicates()
- .removeNSFW()
- .count(),
- playlist: `https://iptv-org.github.io/iptv/languages/${language.code}.m3u
`
- })
- }
-
- const table = generateTable(languages, {
- columns: [
- { name: 'Language', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left' }
- ]
- })
-
- file.create('./.readme/_languages.md', table)
-}
-
-function generateTable(data, options) {
- let output = '${column.name} | ` - } - output += '
---|
${item[prop]} | ` - i++ - } - output += '
Category | Channels | Playlist |
---|---|---|
General | 1 | https://iptv-org.github.io/iptv/categories/general.m3u |
News | 1 | https://iptv-org.github.io/iptv/categories/news.m3u |
Other | 0 | https://iptv-org.github.io/iptv/categories/other.m3u |
Language | Channels | Playlist |
---|---|---|
Catalan | 0 | https://iptv-org.github.io/iptv/languages/cat.m3u |
English | 1 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Russian | 1 | https://iptv-org.github.io/iptv/languages/rus.m3u |
Undefined | 0 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
Region | Channels | Playlist |
---|---|---|
Asia | 1 | https://iptv-org.github.io/iptv/regions/asia.m3u |
Commonwealth of Independent States | 1 | https://iptv-org.github.io/iptv/regions/cis.m3u |
Europe | 2 | https://iptv-org.github.io/iptv/regions/eur.m3u |
Europe, the Middle East and Africa | 2 | https://iptv-org.github.io/iptv/regions/emea.m3u |
Undefined | 0 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
Country | Channels | Playlist |
---|---|---|
🇦🇩 Andorra | 0 | https://iptv-org.github.io/iptv/countries/ad.m3u |
🇷🇺 Russia | 1 | https://iptv-org.github.io/iptv/countries/ru.m3u |
🇬🇧 United Kingdom | 1 | https://iptv-org.github.io/iptv/countries/uk.m3u |
🌍 International | 0 | https://iptv-org.github.io/iptv/countries/int.m3u |
Undefined | 0 | https://iptv-org.github.io/iptv/countries/undefined.m3u |