Skip to main content

Flask webapp that will archive a podcast from a RSS feed. It will download the episodes and re-host them.

Project description

Archive Podcast

Check CheckType Test codecov Docker SpellCheck

Flask webapp that will archive a podcast from a RSS feed. It will download the episodes and re-host them.

Features:

  • Webapp
    • List of feeds hosted
    • File listing for unlisted episodes
    • Web player
    • Health check page
  • Looks for new episodes to fetch every hour
  • Rename feeds to indicate that they are an archive
  • Local or S3 storage backend

In theory this works in windows however I haven't tested it, it ~should be able to handle windows file paths fine.

Docs are at https://archivepodcast.readthedocs.io/en/latest/

Setup

Install dependencies

You will need to install ffmpeg for your platform. Should be on your package manager or download the binary to /usr/local/bin.

You will need to install git-lfs for your platform to fetch the .woff font files.

If you cloned the repo without git-lfs installed, run the following commands to fetch the files:

git lfs install
git lfs fetch --all
git lfs pull

Pre Commit Hooks

To set up pre-commit hooks run:

uv tool add pre-commit --upgrade
pre-commit install

Setup Python Environment

Development

uv venv
source .venv/bin/activate
uv sync

Production

uv venv
source .venv/bin/activate
uv sync --no-default-groups

Running archivepodcast webapp

This will run a webapp on http://localhost:5100 (configurable) that will:

  • Run persistently
  • Host RSS feeds of the podcasts
  • If "live" : true in config toml is set it will look for and download new episodes every hour
  • If you send it a SIGHUP command it will reload the configuration, be sure to check the logs to see if it was successful.

Development: flask --app archivepodcast run --port 5100

Production: waitress-serve --threads=4 --listen 0.0.0.0:5100 --call archivepodcast:create_app

An example guide on setting it up start to finish, with all features and saving episodes do disk can be found in the docs. There are others for if you want to use s3 to host assets, or even host the whole thing on s3.

Todo

  • path_helper lazy load
  • warnings when s3 put, or rss download takes too long
  • generic response logger for aiohttp
  • change log format to start with podcast name
  • Container Registry
  • header as a table, or divs
  • Fix font selection for frontend, done?
  • Cloudflare worker cron (CF still in beta)
    • Terraform example
  • pydantic xml

Prod time to beat running adhoc, 56 seconds.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

archivepodcast-1.5.1.tar.gz (49.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

archivepodcast-1.5.1-py3-none-any.whl (69.0 kB view details)

Uploaded Python 3

File details

Details for the file archivepodcast-1.5.1.tar.gz.

File metadata

  • Download URL: archivepodcast-1.5.1.tar.gz
  • Upload date:
  • Size: 49.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for archivepodcast-1.5.1.tar.gz
Algorithm Hash digest
SHA256 ec4a66fdc5ba1712c1cc29f5611d6f5e7d6e0b50f4b158d1216d80e83969d656
MD5 a5dedde639ec1a29d8ec203b8d1e2452
BLAKE2b-256 403795e8c7095ec37ea271684958cf757bcae618ee002a23dff4792d6e1f5c75

See more details on using hashes here.

File details

Details for the file archivepodcast-1.5.1-py3-none-any.whl.

File metadata

  • Download URL: archivepodcast-1.5.1-py3-none-any.whl
  • Upload date:
  • Size: 69.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for archivepodcast-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 07f07d25b1611da5412e45dd7f656f5bb8868f2b5a584d0df0d34133e20692a8
MD5 7ab98144b5b97122f8289a234d776504
BLAKE2b-256 c36fafd1823f33371db3461f0eda93a24e3d0597ef84605d5fb2e2e175000cc7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page