Skip to content

Latest commit

ย 

History

History
183 lines (128 loc) ยท 5.44 KB

README.md

File metadata and controls

183 lines (128 loc) ยท 5.44 KB

PoDownloader

GitHub license GitHub release (latest by date) Go Report Card

๐ŸŽ™๏ธโฌ‡๏ธ PoDownloader = Podcast Downloader, a simple CLI tool to download podcasts.

This tool will download podcast RSS, podcast cover image, episode audio files, episode cover images and episode shownotes.

ไธญๆ–‡่ฏดๆ˜Ž

Screenshot

Install

Download from Releases

You can download latest release from Releases page directly.

Build from source code

Make sure go is installed on your system correctly.

git clone https://github.com/LGiki/PoDownloader.git
cd PoDownloader
go mod download
go build -o podownloader ./cmd

Then you can find the output binary file named podownloader.

Usage

Download podcasts from OPML

Most podcast apps support exporting podcast lists in OPML format.

An example of an OPML file is as follows:

<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
    <head>
        <title>Example OPML</title>
    </head>
    <body>
        <outline text="Example Podcast 1" title="Example Podcast 1" type="rss" xmlUrl="https://exmaple.org/podcast1/rss.xml" />
        <outline text="Example Podcast 2" title="Example Podcast 2" type="rss" xmlUrl="https://exmaple.org/podcast2/rss.xml" />
        <outline text="Example Podcast 3" title="Example Podcast 3" type="rss" xmlUrl="https://exmaple.org/podcast3/rss.xml" />
    </body>
</opml>

This OPML file contains 3 podcasts (each outline tag is a podcast), and the xmlUrl attribute is the podcast RSS link.

Download podcasts from OPML file using:

podownloader download --opml /path/to/opml_file.xml

Download podcasts from RSS links list

RSS links list file is a text file, one podcast RSS URL per line, for example:

https://exmaple.org/podcast1/rss.xml
https://example.org/podcast2/rss.xml
https://example.org/podcast3/rss.xml

Download podcasts from RSS links list file using:

podownloader download --list /path/to/rss_list_file.txt

Download podcast from RSS link

podownloader download --rss https://example.org/podcast/rss.xml

Download Options

Using -h or --help to view all options.

Use the HTTP_PROXY environment variable to set a HTTP or SOCSK5 proxy.

Output directory

Using -o or --output to specify output directory, default output directory is ./podcast.

User agent

Using -u or --ua to specify user agent, default user agent is Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36.

Download threads

Using -t or --thread to specify download threads, default download threads is 3.

Log directory

You can specify --log parameter to set the log directory.

If you specify the --log parameter, the log file will be saved to the directory you specified.

If you leave the --log parameter empty, no log file will be generated.

Default value of --log is empty.

Configuration file

If you don't want to specify parameters every time you run the program, you can save the parameters in a configuration file, the program will automatically load the parameters from the configuration file.

You can specify configuration file path using -c or --config:

podownloader --config ~/.podownloader.json

Default configuration file path is $PWD/.podownloader.

Supported configuration file formats: json, toml, yaml, yml, properties, props, prop, hcl, dotenv, env, ini.

An example of a configuration file in JSON format is as follows:

{
    "list": "",
    "opml": "/path/to/opml_file.xml",
    "rss": "",
    "output": "podcast",
    "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
    "thread": 3
}

You can find more configuration file templates in config_template folder.

Download folder structure

podcast
โ”œโ”€ podcast_1_title
โ”‚  โ”œโ”€ episode_1_title
โ”‚  โ”‚  โ”œโ”€ cover.jpg
โ”‚  โ”‚  โ”œโ”€ episode_1_title.mp3
โ”‚  โ”‚  โ””โ”€ shownotes.html
โ”‚  โ”œโ”€ episode_2_title
โ”‚  โ”‚  โ”œโ”€ cover.jpg
โ”‚  โ”‚  โ”œโ”€ episode_2_title.mp3
โ”‚  โ”‚  โ””โ”€ shownotes.html
โ”‚  โ”œโ”€ ...
โ”‚  โ”‚  โ”œโ”€ cover.jpg
โ”‚  โ”‚  โ”œโ”€ *****.mp3
โ”‚  โ”‚  โ””โ”€ shownotes.html
โ”‚  โ”œโ”€ ...
โ”‚  โ”œโ”€ cover.jpg
โ”‚  โ””โ”€ rss.xml
โ””โ”€ podcast_2_title
   โ”œโ”€ episode_1_title
   โ”‚  โ”œโ”€ cover.jpg
   โ”‚  โ”œโ”€ episode_1_title.mp3
   โ”‚  โ””โ”€ shownotes.html
   โ”œโ”€ episode_2_title
   โ”‚  โ”œโ”€ cover.jpg
   โ”‚  โ”œโ”€ episode_2_title.mp3
   โ”‚  โ””โ”€ shownotes.html
   โ”œโ”€ ...
   โ”‚  โ”œโ”€ cover.jpg
   โ”‚  โ”œโ”€ *****.mp3
   โ”‚  โ””โ”€ shownotes.html
   โ”œโ”€ ...
   โ”œโ”€ cover.jpg
   โ””โ”€ rss.xml

License

Apache-2.0