podweasel/README.md

116 lines
4.4 KiB
Markdown

# Podweasel - podcatching for the terminal.
Podweasel is a program for managing & catching podcasts from the terminal.
Podweasel is a fork of [podfox by brtmr](https://github.com/brtmr/podfox)
## Configuration
Podweasels main configuration file is called `.podweasel.json` and should be located in your home directory.
```
{
"podcast_directory" : "/home/<USER>/podcasts",
"maxnum" : 5,
"cover_image" : true,
"cover_image_name" : "folder",
"rename_episodes" : true,
"date_format" : "%Y-%m-%d",
"connection_timeout" : 10,
"conncetion_retries" : 3
}
```
- `podcast-directory` is your main directory to store podcast data. This directory should be empty before you begin adding feeds.
- `maxnum` _(optional)_ download the newest of noted amount of episodes from podcast. When a new episodes comes out the oldest will be ignore if deleted (default is no limit)
- `cover-image` _(optional)_ boolean value to enable downloading of podcast image (default is `false`)
- `cover-image-name` _(optional)_ custom name for the image (default is `folder`)
- `rename-episodes` _(optional)_ boolean value to enable renaming of podcast episodes (default is `false`)
- `date-format` _(optional)_ formatting for the date when renaming episodes (default is `%Y-%m-%d`)
- `connection-timeout` _(optional)_ int in seconds for how long to wait before timeout (default is `10`)
- `connection-retries` _(optional)_ int for how many retries per podcast episode before moving on to next episode if there is connection problems (default is `3`)
## Directory Structure
In podweasel, every podcast is identified with its own `shortname`, which is restricted to lowercase-letters, numbers, and dashes. If the `shortname` is not specifically given during import, it will be derived from the title of the feed. The following shows a directory tree for such a setup, including two podcasts, each with its own feed.json file for bookkeeping.
```
+ podcast-directory
|
+-----------+ python-for-rockstars
| |
| + feed.json
| + episode1.ogg
| + episode2.ogg
|
+-----------+ cobol-today
|
+ feed.json
+ episode289.ogg
+ episode288.ogg
```
## Usage:
```
podweasel import <feed-url> [<shortname>]
podweasel update [<shortname>]
podweasel feeds
podweasel episodes <shortname>
podweasel download [<shortname> --how-many=<n>]
```
### Import
To import a new feed use:
`podweasel import <feed-url> [<shortname>]`
For example, to import the haskell cast feed:
`podweasel import http://www.haskellcast.com/feed.xml`
To import the techsnap podcast, and to store the episodes to a specific folder `ts`, use
`podweasel import http://feeds.feedburner.com/techsnapmp3 ts`
### Update
`podweasel update` will update all feeds (This does not include downloading any new episodes)
`podweasel update <shortname>` will only update the feed associated with the given `shortname`
### Feeds
`podweasel feeds` will give an overview over the imported pocasts, and their `shortname`s.
In the example:
```
$ podweasel feeds
title | shortname
================================================================
TechSNAP MP3 | ts
The Haskell Cast | the-haskell-cast
```
### Episodes
`podweasel episodes <shortname>` will produce a list of episodes available for this podcast, and wether they have been downloaded yet.
```
$ podweasel episodes ts
A Rip in NTP | TechSNAP 237 | Not Downloaded
National Security Breaking Agency | Tech | Not Downloaded
Catching the Angler | TechSNAP 235 | Not Downloaded
Key Flaw With GPL | TechSNAP 234 | Not Downloaded
Dukes of Cyber Hazard | TechSNAP 233 | Not Downloaded
Hardware Insecurity Module | TechSNAP 23 | Not Downloaded
Leaky RSA Keys | TechSNAP 231 | Not Downloaded
Trojan Family Ties | TechSNAP 230 | Not Downloaded
Extortion Startups | TechSNAP 229 | Not Downloaded
[...]
```
### Downloading
`podweasel download` will download `maxnum` not yet downloaded episodes for every feed (if possible.)
`podweasel download ts --how-many=3` will download the 3 newest techsnap podcasts that have not yet been downloaded. (Skipping newer, but already downloaded ones). If the `--how-many` parameter is omitted, the `maxnum` parameter from the configuration file is used instead.