mirror of https://github.com/iptv-org/iptv
Merge pull request #25498 from iptv-org/patch-2025.07.4
Patch 2025.07.4
This commit is contained in:
commit
f13518cda4
|
@ -1 +1,2 @@
|
||||||
* text eol=crlf
|
* text eol=crlf
|
||||||
|
*.png -text
|
|
@ -40,7 +40,7 @@ jobs:
|
||||||
run: npm run playlist:generate
|
run: npm run playlist:generate
|
||||||
- name: generate .api/streams.json
|
- name: generate .api/streams.json
|
||||||
run: npm run api:generate
|
run: npm run api:generate
|
||||||
- name: update readme.md
|
- name: update readme
|
||||||
run: npm run readme:update
|
run: npm run readme:update
|
||||||
- run: git status
|
- run: git status
|
||||||
- name: commit changes to /streams
|
- name: commit changes to /streams
|
||||||
|
@ -48,11 +48,11 @@ jobs:
|
||||||
git add streams
|
git add streams
|
||||||
git status
|
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
|
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: |
|
run: |
|
||||||
git add README.md
|
git add PLAYLISTS.md
|
||||||
git status
|
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
|
- name: push all changes to the repository
|
||||||
if: ${{ !env.ACT && github.ref == 'refs/heads/master' }}
|
if: ${{ !env.ACT && github.ref == 'refs/heads/master' }}
|
||||||
run: git push
|
run: git push
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
{
|
||||||
"build" : "README.md",
|
"build" : "PLAYLISTS.md",
|
||||||
"files" : ["./.readme/template.md"]
|
"files" : ["./.readme/template.md"]
|
||||||
}
|
}
|
|
@ -1,39 +1,7 @@
|
||||||
# IPTV [](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_.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Playlists
|
## 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).
|
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
|
### Grouped by category
|
||||||
|
|
||||||
Playlists in which channels are 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
|
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
|
|
||||||
|
|
||||||
[](LICENSE)
|
|
||||||
|
|
|
@ -163,14 +163,15 @@ http://example.com/stream.m3u8
|
||||||
- `workflows`: contains [GitHub actions](https://docs.github.com/en/actions/quickstart) workflows.
|
- `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.
|
- `CODE_OF_CONDUCT.md`: rules you shouldn't break if you don't want to get banned.
|
||||||
- `.readme/`
|
- `.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`.
|
- `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.
|
- `scripts/`: contains all scripts used in the repository.
|
||||||
- `streams/`: contains all streams broken down by the country from which they are broadcast.
|
- `streams/`: contains all streams broken down by the country from which they are broadcast.
|
||||||
- `tests/`: contains tests to check the scripts.
|
- `tests/`: contains tests to check the scripts.
|
||||||
- `CONTRIBUTING.md`: file you are currently reading.
|
- `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
|
## Scripts
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,10 +24,10 @@ async function main() {
|
||||||
logger.info('creating region table...')
|
logger.info('creating region table...')
|
||||||
await new RegionTable().make()
|
await new RegionTable().make()
|
||||||
|
|
||||||
logger.info('updating readme.md...')
|
logger.info('updating playlists.md...')
|
||||||
const configPath = path.join(README_DIR, 'config.json')
|
const configPath = path.join(README_DIR, 'config.json')
|
||||||
const readme = new Markdown(configPath)
|
const playlists = new Markdown(configPath)
|
||||||
readme.compile()
|
playlists.compile()
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -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 TESTING = process.env.NODE_ENV === 'test' ? true : false
|
||||||
export const OWNER = 'iptv-org'
|
export const OWNER = 'iptv-org'
|
||||||
export const REPO = 'iptv'
|
export const REPO = 'iptv'
|
||||||
|
export const EOL = '\r\n'
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Category, Playlist } from '../models'
|
import { Stream, Category, Playlist } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type CategoriesGeneratorProps = {
|
type CategoriesGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Country, Stream, Playlist } from '../models'
|
import { Country, Stream, Playlist } from '../models'
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type CountriesGeneratorProps = {
|
type CountriesGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Playlist, Category } from '../models'
|
import { Stream, Playlist, Category } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexCategoryGeneratorProps = {
|
type IndexCategoryGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Playlist, Country } from '../models'
|
import { Stream, Playlist, Country } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexCountryGeneratorProps = {
|
type IndexCountryGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, File, Storage } from '@freearhey/core'
|
import { Collection, File, Storage } from '@freearhey/core'
|
||||||
import { Stream, Playlist } from '../models'
|
import { Stream, Playlist } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexGeneratorProps = {
|
type IndexGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Playlist, Language } from '../models'
|
import { Stream, Playlist, Language } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexLanguageGeneratorProps = {
|
type IndexLanguageGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, File, Storage } from '@freearhey/core'
|
import { Collection, File, Storage } from '@freearhey/core'
|
||||||
import { Stream, Playlist } from '../models'
|
import { Stream, Playlist } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexNsfwGeneratorProps = {
|
type IndexNsfwGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Playlist, Region } from '../models'
|
import { Stream, Playlist, Region } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type IndexRegionGeneratorProps = {
|
type IndexRegionGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Playlist, Language, Stream } from '../models'
|
import { Playlist, Language, Stream } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type LanguagesGeneratorProps = { streams: Collection; logFile: File }
|
type LanguagesGeneratorProps = { streams: Collection; logFile: File }
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Stream, Playlist } from '../models'
|
import { Stream, Playlist } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type RawGeneratorProps = {
|
type RawGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { Playlist, Region, Stream } from '../models'
|
import { Playlist, Region, Stream } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type RegionsGeneratorProps = {
|
type RegionsGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Collection, Storage, File, type Dictionary } from '@freearhey/core'
|
import { Collection, Storage, File, type Dictionary } from '@freearhey/core'
|
||||||
import { Stream, Playlist } from '../models'
|
import { Stream, Playlist } from '../models'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type SourcesGeneratorProps = {
|
type SourcesGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import { Subdivision, Stream, Playlist } from '../models'
|
import { Subdivision, Stream, Playlist } from '../models'
|
||||||
import { Collection, Storage, File } from '@freearhey/core'
|
import { Collection, Storage, File } from '@freearhey/core'
|
||||||
import { PUBLIC_DIR } from '../constants'
|
import { PUBLIC_DIR, EOL } from '../constants'
|
||||||
import { Generator } from './generator'
|
import { Generator } from './generator'
|
||||||
import { EOL } from 'node:os'
|
|
||||||
|
|
||||||
type SubdivisionsGeneratorProps = {
|
type SubdivisionsGeneratorProps = {
|
||||||
streams: Collection
|
streams: Collection
|
||||||
|
|
|
@ -1,43 +1,4 @@
|
||||||
# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
|
# Playlists
|
||||||
|
|
||||||
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_.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 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
|
|
||||||
```
|
|
||||||
|
|
||||||
### Grouped by category
|
### 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
|
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
|
|
||||||
|
|
||||||
[](LICENSE)
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
{
|
||||||
"build" : "tests/__data__/output/readme.md",
|
"build" : "tests/__data__/output/playlists.md",
|
||||||
"files" : ["tests/__data__/output/.readme/template.md"]
|
"files" : ["tests/__data__/output/.readme/template.md"]
|
||||||
}
|
}
|
|
@ -1,43 +1,4 @@
|
||||||
# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
|
# Playlists
|
||||||
|
|
||||||
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_.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 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
|
|
||||||
```
|
|
||||||
|
|
||||||
### Grouped by category
|
### 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
|
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
|
|
||||||
|
|
||||||
[](LICENSE)
|
|
||||||
|
|
|
@ -29,8 +29,8 @@ describe('readme:update', () => {
|
||||||
const stdout = execSync(cmd, { encoding: 'utf8' })
|
const stdout = execSync(cmd, { encoding: 'utf8' })
|
||||||
if (process.env.DEBUG === 'true') console.log(cmd, stdout)
|
if (process.env.DEBUG === 'true') console.log(cmd, stdout)
|
||||||
|
|
||||||
expect(content('tests/__data__/output/readme.md')).toEqual(
|
expect(content('tests/__data__/output/playlists.md')).toEqual(
|
||||||
content('tests/__data__/expected/readme_update/_readme.md')
|
content('tests/__data__/expected/readme_update/playlists.md')
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue