Merge pull request #25498 from iptv-org/patch-2025.07.4

Patch 2025.07.4
This commit is contained in:
Ismaël Moret 2025-08-01 14:53:46 +02:00 committed by GitHub
commit f13518cda4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 6056 additions and 6305 deletions

1
.gitattributes vendored
View File

@ -1 +1,2 @@
* text eol=crlf
*.png -text

View File

@ -40,7 +40,7 @@ jobs:
run: npm run playlist:generate
- name: generate .api/streams.json
run: npm run api:generate
- name: update readme.md
- name: update readme
run: npm run readme:update
- run: git status
- name: commit changes to /streams
@ -48,11 +48,11 @@ jobs:
git add streams
git status
git commit --allow-empty -m "[Bot] Update /streams" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." -m "${{ steps.playlist-update.outputs.OUTPUT }}" --no-verify
- name: commit changes to readme.md
- name: commit changes to playlists.md
run: |
git add README.md
git add PLAYLISTS.md
git status
git commit --allow-empty -m "[Bot] Update README.md" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." --no-verify
git commit --allow-empty -m "[Bot] Update PLAYLISTS.md" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." --no-verify
- name: push all changes to the repository
if: ${{ !env.ACT && github.ref == 'refs/heads/master' }}
run: git push

View File

@ -1,4 +1,4 @@
{
"build" : "README.md",
"build" : "PLAYLISTS.md",
"files" : ["./.readme/template.md"]
}

View File

@ -1,39 +1,7 @@
# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
## Table of contents
- 🚀 [How to use?](#how-to-use)
- 📺 [Playlists](#playlists)
- 🗓 [EPG](#epg)
- 🗄 [Database](#database)
- 👨‍💻 [API](#api)
- 📚 [Resources](#resources)
- 💬 [Discussions](#discussions)
- ❓ [FAQ](#faq)
- 🛠 [Contribution](#contribution)
- ⚖ [Legal](#legal)
- © [License](#license)
## How to use?
Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
![VLC Network Panel](https://github.com/iptv-org/iptv/raw/master/.readme/preview.png)
## Playlists
There are several versions of playlists that differ in the way they are grouped. As of January 30th, 2024, we have stopped distributing NSFW channels. For more information, please look at [this issue](https://github.com/iptv-org/iptv/issues/15723).
### Main playlist
This playlist includes all known channels available in this repository.
```
https://iptv-org.github.io/iptv/index.m3u
```
### Grouped by category
Playlists in which channels are grouped by category.
@ -144,49 +112,3 @@ Also, any of our internal playlists are available in raw form (without any filte
```
https://iptv-org.github.io/iptv/raw/<FILENAME>.m3u
```
## EPG
[Electronic Program Guide](https://en.wikipedia.org/wiki/Electronic_program_guide) for most of the channels can be downloaded using utilities published in the [iptv-org/epg](https://github.com/iptv-org/epg) repository.
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
## API
The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
## Resources
Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
## Discussions
If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
## FAQ
The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
## Contribution
Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
And thank you to everyone who has already contributed!
### Backers
<a href="https://opencollective.com/iptv-org"><img src="https://opencollective.com/iptv-org/backers.svg?width=890" /></a>
### Contributors
<a href="https://github.com/iptv-org/iptv/graphs/contributors"><img src="https://opencollective.com/iptv-org/contributors.svg?width=890" /></a>
## Legal
No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
## License
[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE)

View File

@ -163,14 +163,15 @@ http://example.com/stream.m3u8
- `workflows`: contains [GitHub actions](https://docs.github.com/en/actions/quickstart) workflows.
- `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned.
- `.readme/`
- `config.json`: config for the `markdown-include` package, which is used to compile everything into one `README.md` file.
- `config.json`: config for the `markdown-include` package, which is used to compile everything into one `PLAYLISTS.md` file.
- `preview.png`: image displayed in the `README.md`.
- `template.md`: template for `README.md`.
- `template.md`: template for `PLAYLISTS.md`.
- `scripts/`: contains all scripts used in the repository.
- `streams/`: contains all streams broken down by the country from which they are broadcast.
- `tests/`: contains tests to check the scripts.
- `CONTRIBUTING.md`: file you are currently reading.
- `README.md`: project description generated from the contents of the `.readme/` folder.
- `PLAYLISTS.md`: auto-updated list of available playlists.
- `README.md`: project description.
## Scripts

6020
PLAYLISTS.md Normal file

File diff suppressed because it is too large Load Diff

6025
README.md

File diff suppressed because it is too large Load Diff

View File

@ -24,10 +24,10 @@ async function main() {
logger.info('creating region table...')
await new RegionTable().make()
logger.info('updating readme.md...')
logger.info('updating playlists.md...')
const configPath = path.join(README_DIR, 'config.json')
const readme = new Markdown(configPath)
readme.compile()
const playlists = new Markdown(configPath)
playlists.compile()
}
main()

View File

@ -8,3 +8,4 @@ export const LOGS_DIR = process.env.LOGS_DIR || './temp/logs'
export const TESTING = process.env.NODE_ENV === 'test' ? true : false
export const OWNER = 'iptv-org'
export const REPO = 'iptv'
export const EOL = '\r\n'

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Category, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type CategoriesGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Country, Stream, Playlist } from '../models'
import { Collection, Storage, File } from '@freearhey/core'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type CountriesGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Category } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexCategoryGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Country } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexCountryGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, File, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Language } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexLanguageGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, File, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexNsfwGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Region } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type IndexRegionGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Playlist, Language, Stream } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type LanguagesGeneratorProps = { streams: Collection; logFile: File }

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type RawGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File } from '@freearhey/core'
import { Playlist, Region, Stream } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type RegionsGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Collection, Storage, File, type Dictionary } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type SourcesGeneratorProps = {
streams: Collection

View File

@ -1,8 +1,7 @@
import { Subdivision, Stream, Playlist } from '../models'
import { Collection, Storage, File } from '@freearhey/core'
import { PUBLIC_DIR } from '../constants'
import { PUBLIC_DIR, EOL } from '../constants'
import { Generator } from './generator'
import { EOL } from 'node:os'
type SubdivisionsGeneratorProps = {
streams: Collection

View File

@ -1,43 +1,4 @@
# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
## Table of contents
- 🚀 [How to use?](#how-to-use)
- 📺 [Playlists](#playlists)
- 🗄 [Database](#database)
- 👨‍💻 [API](#api)
- 📚 [Resources](#resources)
- 💬 [Discussions](#discussions)
- ❓ [FAQ](#faq)
- 🛠 [Contribution](#contribution)
- ⚖ [Legal](#legal)
- © [License](#license)
## How to use?
Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
![VLC Network Panel](https://github.com/iptv-org/iptv/raw/master/.readme/preview.png)
## Playlists
There are several versions of playlists that differ in the way they are grouped.
### Main playlist
Playlist includes all known channels except adult channels.
```
https://iptv-org.github.io/iptv/index.m3u
```
And here is the full version:
```
https://iptv-org.github.io/iptv/index.nsfw.m3u
```
# Playlists
### Grouped by category
@ -255,45 +216,3 @@ Also, any of our internal playlists are available in raw form (without any filte
```
https://iptv-org.github.io/iptv/raw/<FILENAME>.m3u
```
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
## API
The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
## Resources
Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
## Discussions
If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
## FAQ
The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
## Contribution
Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
And thank you to everyone who has already contributed!
### Backers
<a href="https://opencollective.com/iptv-org"><img src="https://opencollective.com/iptv-org/backers.svg?width=890" /></a>
### Contributors
<a href="https://github.com/iptv-org/iptv/graphs/contributors"><img src="https://opencollective.com/iptv-org/contributors.svg?width=890" /></a>
## Legal
No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
## License
[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE)

View File

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

View File

@ -1,43 +1,4 @@
# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
## Table of contents
- 🚀 [How to use?](#how-to-use)
- 📺 [Playlists](#playlists)
- 🗄 [Database](#database)
- 👨‍💻 [API](#api)
- 📚 [Resources](#resources)
- 💬 [Discussions](#discussions)
- ❓ [FAQ](#faq)
- 🛠 [Contribution](#contribution)
- ⚖ [Legal](#legal)
- © [License](#license)
## How to use?
Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
![VLC Network Panel](https://github.com/iptv-org/iptv/raw/master/.readme/preview.png)
## Playlists
There are several versions of playlists that differ in the way they are grouped.
### Main playlist
Playlist includes all known channels except adult channels.
```
https://iptv-org.github.io/iptv/index.m3u
```
And here is the full version:
```
https://iptv-org.github.io/iptv/index.nsfw.m3u
```
# Playlists
### Grouped by category
@ -147,45 +108,3 @@ Also, any of our internal playlists are available in raw form (without any filte
```
https://iptv-org.github.io/iptv/raw/<FILENAME>.m3u
```
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
## API
The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
## Resources
Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
## Discussions
If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
## FAQ
The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
## Contribution
Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
And thank you to everyone who has already contributed!
### Backers
<a href="https://opencollective.com/iptv-org"><img src="https://opencollective.com/iptv-org/backers.svg?width=890" /></a>
### Contributors
<a href="https://github.com/iptv-org/iptv/graphs/contributors"><img src="https://opencollective.com/iptv-org/contributors.svg?width=890" /></a>
## Legal
No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
## License
[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE)

View File

@ -29,8 +29,8 @@ describe('readme:update', () => {
const stdout = execSync(cmd, { encoding: 'utf8' })
if (process.env.DEBUG === 'true') console.log(cmd, stdout)
expect(content('tests/__data__/output/readme.md')).toEqual(
content('tests/__data__/expected/readme_update/_readme.md')
expect(content('tests/__data__/output/playlists.md')).toEqual(
content('tests/__data__/expected/readme_update/playlists.md')
)
})
})