ydl-podcast


Nameydl-podcast JSON
Version 1.8.1 PyPI version JSON
download
home_pagehttps://github.com/nbr23/ydl-podcast
SummaryA simple tool to generate Podcast-like RSS feeds from youtube (or other youtube-dl supported services) channels, using youtube-dl/yt-dlp
upload_time2024-12-28 19:49:46
maintainerNone
docs_urlNone
authornbr23
requires_python<4.0,>=3.7
licenseMIT
keywords podcast youtube-dl
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![Pypi Version Shield](https://img.shields.io/pypi/v/ydl-podcast.svg?style=flat-square)](https://pypi.org/project/ydl-podcast/)
[![Pypi License Shield](https://img.shields.io/pypi/l/ydl-podcast.svg?style=flat-square)](https://pypi.org/project/ydl-podcast/)

# ydl-podcast

A simple tool to generate Podcast-like RSS feeds from youtube (or other
youtube-dl supported services) channels, using
[`youtube-dl`](https://github.com/rg3/youtube-dl).

## Setup

Install package with requirements:

### Youtube-dl:

`pip install ydl-podcast[youtube-dl]`

### yt-dlp:

`pip install ydl-podcast[yt-dlp]`

## Configuration

Edit the config.yaml file to list your podcast sources and configure them,
as well as edit general configuration.

[Example config file](config.sample.yaml)

The available settings are the following.

### General settings

- `output_dir`: local directory where the downloaded media will be stored, and
  the podcast xml files generated.
- `url_root`: root url for the static files (used in the generation of the XML
  to point to the media files.
- `subscriptions`: a list of feeds to subscribe to.
- `youtube-dl-module`: Alternative youtube-dl python module. By default, this
uses [youtube-dl](https://github.com/rg3/youtube-dl), but can leverage forks
such as [yt-dlp](https://github.com/yt-dlp/yt-dlp).

### Feed settings

#### Mandatory
- `name NAME`: Name of the podcast source. Used as the podcast title, and media
  directory name.
- `url URL`: source url for the youtube (or other) channel.

#### Optional
- `audio_only True/False`: if `True`, audio will be extracted from downloaded
  videos to create an audio podcast.
- `retention_days N`: only download elements newer than `N` days, and
  automatically delete elements older.
- `download_last N`: only download the latest `N` videos.
- `initialize True/False`: if `True`, then downloads everything on the first
  run, no matter the `download_last` or `retention_days` specified.
- `output_dir`: local directory where the downloaded media will be stored, and
  the podcast xml files generated.
- `url_root`: root url for the static files (used in the generation of the XML
  to point to the media files.
- `format`: file format to force youtube-dl to use (eg mp4, webm, mp3 for audio
  only…)
- `best`: force best quality (only useful when specifying a format).
- `ydl_options`: list of raw youtube-dl options to use. For experienced users,
  since this will likely yield issues if not understood.
- `nfo_files`: generates nfo files for subscriptions and downloaded episodes (simulates a "tvshow" nfo for the subscription and "tvshow episode" for each video). This helps plex, kodi, jellyfin import correct metadata. Does NOT support `audio_only` feeds at this point.
- `skip_download`: Don't perform download, just generate the Atom feed from the existing files. Mandatory `url` parameter can be skipped if `skip_download` is set to `true`
- `download_as_playlist`: Pass the url to the downloader directly, without processing the metadata of each item in the playlist. This is helpful with generic urls, and a few specific extractors.

## Usage

Using cron or your favorite scheduler, run:

`ydl-podcast [-c configfile.yaml]`

You can then use your favorite web server to serve the files (a good idea is to
exclude the `*.json` and `*.part` files from being served as the first might
leak information, and the second is unnecessary.

eg with nginx:

```
root /var/www/static/podcasts/;
location ~ (\.json$|\.part$) {
  return 403;
}
```

### Command line arguments

```bash
usage: ydl-podcast [-h] [-v] [-c CONFIG] [-j JSON_CONFIG] [-f FILTER] [-e EXCLUDE]

options:
  -h, --help            show this help message and exit
  -v, --version         Show version and exit
  -c CONFIG, --config CONFIG
                        Configuration file
  -j JSON_CONFIG, --json-config JSON_CONFIG
                        Configuration string in JSON format
  -f FILTER, --filter FILTER
                        Filter subscriptions
  -e EXCLUDE, --exclude EXCLUDE
                        Exclude subscriptions
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/nbr23/ydl-podcast",
    "name": "ydl-podcast",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.7",
    "maintainer_email": null,
    "keywords": "podcast, youtube-dl",
    "author": "nbr23",
    "author_email": "max@23.tf",
    "download_url": "https://files.pythonhosted.org/packages/e7/d9/ab503c5ce09624428df932872c0ec81be72ab2b4557fdab223534ff43ffc/ydl_podcast-1.8.1.tar.gz",
    "platform": null,
    "description": "[![Pypi Version Shield](https://img.shields.io/pypi/v/ydl-podcast.svg?style=flat-square)](https://pypi.org/project/ydl-podcast/)\n[![Pypi License Shield](https://img.shields.io/pypi/l/ydl-podcast.svg?style=flat-square)](https://pypi.org/project/ydl-podcast/)\n\n# ydl-podcast\n\nA simple tool to generate Podcast-like RSS feeds from youtube (or other\nyoutube-dl supported services) channels, using\n[`youtube-dl`](https://github.com/rg3/youtube-dl).\n\n## Setup\n\nInstall package with requirements:\n\n### Youtube-dl:\n\n`pip install ydl-podcast[youtube-dl]`\n\n### yt-dlp:\n\n`pip install ydl-podcast[yt-dlp]`\n\n## Configuration\n\nEdit the config.yaml file to list your podcast sources and configure them,\nas well as edit general configuration.\n\n[Example config file](config.sample.yaml)\n\nThe available settings are the following.\n\n### General settings\n\n- `output_dir`: local directory where the downloaded media will be stored, and\n  the podcast xml files generated.\n- `url_root`: root url for the static files (used in the generation of the XML\n  to point to the media files.\n- `subscriptions`: a list of feeds to subscribe to.\n- `youtube-dl-module`: Alternative youtube-dl python module. By default, this\nuses [youtube-dl](https://github.com/rg3/youtube-dl), but can leverage forks\nsuch as [yt-dlp](https://github.com/yt-dlp/yt-dlp).\n\n### Feed settings\n\n#### Mandatory\n- `name NAME`: Name of the podcast source. Used as the podcast title, and media\n  directory name.\n- `url URL`: source url for the youtube (or other) channel.\n\n#### Optional\n- `audio_only True/False`: if `True`, audio will be extracted from downloaded\n  videos to create an audio podcast.\n- `retention_days N`: only download elements newer than `N` days, and\n  automatically delete elements older.\n- `download_last N`: only download the latest `N` videos.\n- `initialize True/False`: if `True`, then downloads everything on the first\n  run, no matter the `download_last` or `retention_days` specified.\n- `output_dir`: local directory where the downloaded media will be stored, and\n  the podcast xml files generated.\n- `url_root`: root url for the static files (used in the generation of the XML\n  to point to the media files.\n- `format`: file format to force youtube-dl to use (eg mp4, webm, mp3 for audio\n  only\u2026)\n- `best`: force best quality (only useful when specifying a format).\n- `ydl_options`: list of raw youtube-dl options to use. For experienced users,\n  since this will likely yield issues if not understood.\n- `nfo_files`: generates nfo files for subscriptions and downloaded episodes (simulates a \"tvshow\" nfo for the subscription and \"tvshow episode\" for each video). This helps plex, kodi, jellyfin import correct metadata. Does NOT support `audio_only` feeds at this point.\n- `skip_download`: Don't perform download, just generate the Atom feed from the existing files. Mandatory `url` parameter can be skipped if `skip_download` is set to `true`\n- `download_as_playlist`: Pass the url to the downloader directly, without processing the metadata of each item in the playlist. This is helpful with generic urls, and a few specific extractors.\n\n## Usage\n\nUsing cron or your favorite scheduler, run:\n\n`ydl-podcast [-c configfile.yaml]`\n\nYou can then use your favorite web server to serve the files (a good idea is to\nexclude the `*.json` and `*.part` files from being served as the first might\nleak information, and the second is unnecessary.\n\neg with nginx:\n\n```\nroot /var/www/static/podcasts/;\nlocation ~ (\\.json$|\\.part$) {\n  return 403;\n}\n```\n\n### Command line arguments\n\n```bash\nusage: ydl-podcast [-h] [-v] [-c CONFIG] [-j JSON_CONFIG] [-f FILTER] [-e EXCLUDE]\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         Show version and exit\n  -c CONFIG, --config CONFIG\n                        Configuration file\n  -j JSON_CONFIG, --json-config JSON_CONFIG\n                        Configuration string in JSON format\n  -f FILTER, --filter FILTER\n                        Filter subscriptions\n  -e EXCLUDE, --exclude EXCLUDE\n                        Exclude subscriptions\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A simple tool to generate Podcast-like RSS feeds from youtube (or other youtube-dl supported services) channels, using youtube-dl/yt-dlp",
    "version": "1.8.1",
    "project_urls": {
        "Homepage": "https://github.com/nbr23/ydl-podcast",
        "Repository": "https://github.com/nbr23/ydl-podcast"
    },
    "split_keywords": [
        "podcast",
        " youtube-dl"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "52c70308441e0b097457ae0f99386f5c93f341ba47d41d48bf68fa0c79338325",
                "md5": "fd7aa59ed3ed5cd855a66e3050680efd",
                "sha256": "b49ca15758c8e320e53b7e74b1591428935d37b36e35c5123120a0529afc865a"
            },
            "downloads": -1,
            "filename": "ydl_podcast-1.8.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fd7aa59ed3ed5cd855a66e3050680efd",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.7",
            "size": 13069,
            "upload_time": "2024-12-28T19:49:43",
            "upload_time_iso_8601": "2024-12-28T19:49:43.825980Z",
            "url": "https://files.pythonhosted.org/packages/52/c7/0308441e0b097457ae0f99386f5c93f341ba47d41d48bf68fa0c79338325/ydl_podcast-1.8.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e7d9ab503c5ce09624428df932872c0ec81be72ab2b4557fdab223534ff43ffc",
                "md5": "29dff4e6a7faeb52c7da7dc6b4049838",
                "sha256": "544cbe0e1c846a6ffc273d7a3a159932a45e9be3d4a0053de577c60461a888ae"
            },
            "downloads": -1,
            "filename": "ydl_podcast-1.8.1.tar.gz",
            "has_sig": false,
            "md5_digest": "29dff4e6a7faeb52c7da7dc6b4049838",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.7",
            "size": 12060,
            "upload_time": "2024-12-28T19:49:46",
            "upload_time_iso_8601": "2024-12-28T19:49:46.172304Z",
            "url": "https://files.pythonhosted.org/packages/e7/d9/ab503c5ce09624428df932872c0ec81be72ab2b4557fdab223534ff43ffc/ydl_podcast-1.8.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-28 19:49:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nbr23",
    "github_project": "ydl-podcast",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ydl-podcast"
}
        
Elapsed time: 1.79236s