File: podget.7

package info (click to toggle)
podget 0.8.10-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 416 kB
  • sloc: sh: 2,877; python: 34; makefile: 24
file content (471 lines) | stat: -rw-r--r-- 14,854 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
.\" Hand Tweaked Man Page.
.TH podget 7 "24 September 2020" "" ""

.SH NAME
.B Podget 
- Simple tool to automate downloading of podcasts.

.SH SYNOPSIS

.B podget
.RB <options>

.SH DESCRIPTION

Podget is a simple podcast aggregator/downloader optimized for scheduled background jobs (i.e. cron).

It features support for:
.PD 0
.P
- Downloading podcasts from RSS and ATOM XML feeds.
.P
- For sorting the files into folders and categories.
.P
- For importing URLs from iTunes PCAST files and OPML lists.
.P
- Automatic M3U & ASX playlist creation.
.P
- Cleanup of old files.
.P
- Automatic UTF-16 conversion for feeds hosted on MS Windows Servers.
.PD

.SH OPTIONS
.TP
.B -c <FILE> \fR| \fB--config <FILE>
Name of configuration file.

.TP
.B --create-config <FILE>
Create configuration file and exit.
.TP

.B -C \fR|\fB --cleanup
Skip downloading and only run cleanup loop.

.TP
.B --cleanup_days <NUMBER>
Cleanup files older than <NUMBER> days.

.TP
.B --cleanup_simulate
Simulate cleanup loop to see what files would be deleted.

.TP
.B -d <DIRECTORY> \fR|\fB --dir_config <DIRECTORY>
Directory that configuration files are stored in.

.TP
.B --dir_session <DIRECTORY>
Directory that session files are stored in.

.TP
.B -f \fR|\fB --force
Force download of items from each feed even if they've already been downloaded.

.TP
.B -h \fR|\fB --help
Display condensed help dialog.

.TP
.B -l <DIRECTORY> \fR|\fB --library <DIRECTORY>
Directory to store downloaded files in.

.TP
.B -n \fR|\fB --no-playlist
Do not create M3U playlist of new items.

.TP
.B -p \fR|\fB --playlist-asx
In addition to M3U playlists, create ASX playlists.

.TP
.B --playlist-per-podcast
Create a playlist of new items for each podcast feed.

.TP
.B -r <COUNT> \fR|\fB --recent <COUNT>
Download only the <COUNT> newest items from each feed.

.TP
.B --serverlist <FILE>
Use <FILE> as serverlist instead of default.

.TP
.B -s \fR|\fB --silent
Run silently (for cron jobs).

.TP
.B -v
Set verbosity to level 1.

.TP
.B -vv
Set verbosity to level 2.

.TP
.B -vvv
Set verbosity to level 3.

.TP
.B -vvvv
Set verbosity to level 4.

.TP
.B --verbosity <LEVEL>
Set verbosity level (0-4).

.TP
.B -V \fR|\fB --version
Display version.

.TP
.B OPML List Options:

.RS

.TP
.B --import_opml <FILE or URL>
Import servers from OPML file or HTTP/FTP URL.

.TP
.B --export_opml <FILE>
Export serverlist to OPML file.

.RE

.TP
.B PCAST List Options:

.RS

.TP
.B --import_pcast <FILE or URL>
Import server from iTunes PCAST file or HTTP/FTP URL.

.RE

.SH INITIAL CONFIGURATION

The first time a user runs podget, it will create a configuration directory ($HOME/.podget).  In this directory, it will install a default configuration file and serverlist.  It will attempt to download a single file from the single server configured on the list to verify that everything is working.  After this initial run, it is ready for the user to customize for their use.

.SH EXAMPLE CRON JOB

Once podget\ is running correctly, it's most useful if you run it from a cron job so that the new episodes are available to play or load onto a portable player and you don't have to wait for them to download.
.PP
To edit your crontab, do:
.PP
.nf
.fam C
  $ crontab \-e
.fam T
.fi

Then add one line similar to this example:
.PP
.nf
.fam C
  15 04 * * * /usr/bin/podget \-s
.fam T
.fi

This will run podget at 4:15 AM every day.

In some cases, you might need to add a few directories to your PATH variable so that Podget can find everything it needs.

Then the job might look like:
.PP
.nf
.fam C
  15 04 * * * PATH=/opt/local/bin:/usr/local/bin:$PATH /usr/bin/podget \-s
.fam T
.fi

.SH AUTOMATIC CLEANUP

You can enable automatic cleanup with every run by configuring it in your $HOME/.podget/podgetrc file. Simply set the following options:
.PP
.nf
.fam C
  # Autocleanup.
  # 0 == disabled
  # 1 == delete any old content
  cleanup=1

  # Number of days to keep files.   Cleanup will remove anything
  # older than this.
  cleanup_days=7

.fam T
.fi
However, some people prefer to run cleanup as a separate cron session. To do that, set the options in podgetrc to:
.PP
.nf
.fam C
  # Autocleanup.
  # 0 == disabled
  # 1 == delete any old content
  cleanup=0

  # Number of days to keep files.   Cleanup will remove anything
  # older than this.
  cleanup_days=7
.fam T
.fi

Then add something similar to this example to your crontab:
.PP
.nf
.fam C
  # Once a week on Sunday at 04:07AM
  07 04 * * Sun /usr/bin/podget \-C

.fam T
.fi

.SH MULTIPLE CONCURRENT SESSIONS

Podget checks for sessions using the same core configuration file that may already be running when it starts and exits if any are found.  This insures that any long running sessions are not interrupted by new ones.

If you have feeds that require distinct configurations, then you can enable them to run simultaneously by using separate configuration files for each.  Then if you have sufficient bandwidth, you can call them all at the same time.

Example Crontab configuration:
.PP
.nf
.fam C
  00 02 * * * /usr/bin/podget -c podgetrc-group1
  00 02 * * * /usr/bin/podget -c podgetrc-group2
.fam T
.fi

.SH SEQUENTIAL SESSIONS

Sometimes, you have feed lists that use the same configuration but you wish to keep separate.  There are two ways to handle this.

First, run then separately from crontab with sufficient time in between so they don't interfere with each other.
.PP
.nf
.fam C
  00 02 * * * /usr/bin/podget --serverlist RSS-Feeds
  00 03 * * * /usr/bin/podget --serverlist ATOM-Feeds
.fam T
.fi

The second option is to place them into a shell script so they are called sequentially and do not interfere with each other and then add it to your crontab.
.PP
.nf
.fam C
  #!/usr/bin/env bash
  /usr/bin/podget --serverlist RSS-Feeds
  /usr/bin/podget --serverlist ATOM-Feeds
.fam T
.fi

.SH ENABLING DEBUG OUTPUT

Debug output can be enabled in two ways.
.PP
The first way is by uncommenting the DEBUG option in your podgetrc and setting it to '1'.  However this way will not enable DEBUG until just over 1400 lines of script have run and when  podgetrc finally is read.  This is sufficient for most issues.
.PP
The second way is from the command-line and enables debug as early as possible.
.PP
Simply execute podget like so:
.PP
.nf
.fam C
  $ DEBUG=1 podget -vvvv
.fam T
.fi

.PP
You can enable other options as well if you need to but for debugging purposes, 
it is highly recommended that you enabled as much verbosity as possible.

.SH SERVER LIST CONFIGURATION

By default, Podget uses $HOME/.podget/serverlist for the default list of servers to contact. However you can configure the name with the config_serverlist variable in your $HOME/.podget/podgetrc file.

Feeds are listed one per line in the serverlist file.


.PD 0

Default format with category and name:
.RS
<url> <category> <name>
.RE

Alternate Formats:
.P
1. With a category but no name.
.RS
<url> <category>
.RE
2. With a name but no category (2 ways).
.RS
.P
<url> No_Category <name>
.P
<url> . <name>
.RE
3. With neither a category or name.
.RS
<url>
.RE

1. URL Rules:
.RS
A. Any spaces in the URL need to be converted to %20
.RE
2. Category Rules:
.RS
A. Must be one word without spaces.
.P
B. You may use underscores and dashes.
.P
C. You can insert date substitutions.
.RS
%YY%  ==  Year
.P
%MM%  ==  Month
.P
%DD%  ==  Day
.RE
.P
D. Category disabling:
.RS
.P
- With a name, the category must either be a single period (.) or 'No_Category'.
.P
- If the name is blank, the category can also be blank.
.RE
.RE
.P
3. Name Rules:
.RS
.P
A. If you are creating ASX playlists, make sure the feed name does not have any spaces in it and the filename cannot be blank.
.P
B. You can leave the feed name blank, and files will be saved in the category directory.
.P
C. Names with spaces are only compatible with filesystems that allow for spaces in filenames.  For example, spaces in feed names are OK for feeds saved to Linux ext partitions but are not OK for those saved to Microsoft FAT partitions.
.P
D. Feed names can be disabled by leaving them blank.
.RE
.P
4. Disable the downloading of any feed by commenting it out with a leading #.

.PD

Example:
 http://www.lugradio.org/episodes.rss Linux LUG Radio

Example with date substitution in the category and a blank feed name:
 http://downloads.bbc.co.uk/rmhttp/downloadtrial/worldservice/summary/rss.xml News-%YY%-%MM%-%DD%

Example of two ways to do a feed with authentication:
 http://somesite.com/feed.rss CATEGORY Feed Name USER:username PASS:password
 http://username:password@somesite.com/feed.rss CATEGORY Feed Name

.RS

NOTE: The second method will fail if a colon (:) is part of the username or password.  Both methods will fail if a space is part of the username or password.

.RE

.TP
.B Common Options:

.TP
.I OPT_CONTENT_DISPOSITION
Attempt to get filename from the Content-Disposition tag that is part of wget --server-response.

.TP
.I OPT_DISPOSITION_FAIL
This option works in conjunction with OPT_CONTENT_DISPOSITION by removing any URLs that fail to receive a filename from the COMPLETED log.  This allows them to be automatically retried the next time a session runs.  If this option is added to a feed that has already been downloaded then the user will need to remove the URLs for the problematic files from the COMPLETED log manually. On one feed this allowed for the improvement of the number of filename problems from approximately 15% to under 2% over the course of 6 sessions.  Those sessions can occur sequentially on one day or as part of your established cron rotation.

.TP
.I OPT_FEED_ORDER_ASCENDING
By default, Podget assumes that items in a feed will be listed from newest to oldest (descending order).  This option will modify Podget's handling of the feed for those that are listed from oldest to newest.  This option will not have any noticeable effect for feeds where you want to download every item.  It will have an effect for new feeds when combined with the --recent [COUNT] option.

.TP
.I OPT_FEED_PLAYLIST_NEWFIRST
Most playlist options create lists of just the new items that are downloaded in the current session.  This option creates or updates a full playlist for all items available for a feed sorted from newest to oldest based on the modification date/time of the file.

.TP
.I OPT_FEED_PLAYLIST_OLDFIRST
Same as OPT_FEED_PLAYLIST_NEWFIRST except playlist is ordered from oldest to newest.

.TP
.I OPT_FILENAME_LOCATION
Some feeds do not have the detailed filename listed in the FEED but rather rename the file on redirection.  This option address that issue by attempting to grab the filename from the last 'Location:' tag in the output of 'wget --server-response'.

.TP
.I  OPT_FILENAME_RENAME_MDATE
For feeds that use a singular filename for each item that is identified by a long somewhat incomprehensible string in the URL.  These feeds were previously fixed with FILENAME_FORMATFIX4 which would append the string to the common filename to produce unique filenames for each item.  However this produced filenames that were not very easy to understand.  This option gives us another method for dealing with these common filenames.  This appends the date of the files last change (modification date) as a prefix to the filename in the format of YYYYMMDD_HHhMMm_<common-part>.  This makes the filenames sortable and gives the user something that makes a moderate amount of sense.  Does not work for all feeds, for some feeds the last modification time for each file is the time of download.  Which may be acceptable in some situations but can cause confusion when downloading more than one item at a time from a feed.

.TP
.I OPT_NO_CERT_CHECK
Disable wget SSL certificate verification.  This is common used for feeds that are using self-signed certificates.

.TP
.I OPT_PREFER_IPv4 \fRor\fI OPT_PREFER_IPv6
Configure wget so that when a DNS lookup gives a choice of several addresses that it should connect to the specified family first.

.P
Examples:
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_PREFER_IPv4
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_PREFER_IPv6
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_NO_CERT_CHECK
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_CONTENT_DISPOSITION
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_CONTENT_DISPOSITION OPT_DISPOSITION_FAIL
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FILENAME_LOCATION
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FILENAME_RENAME_MDATE
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FILENAME_LOCATION OPT_FILENAME_RENAME_MDATE
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FEED_ORDER_ASCENDING
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FEED_PLAYLIST_NEWFIRST
 http://somesite.com/feed.rss CATEGORY Feed Name OPT_FEED_PLAYLIST_OLDFIRST

.TP
.B Atom Feed Options:
The following options are available for advanced handling of Atom feeds.

.TP
.I ATOM_FILTER_SIMPLE
This option will enable filtering for just audio or video files from a feed.

.TP
.I ATOM_FILTER_TYPE="type"
This option allows more detailed filtering of the variety of types available.  This can limit the files downloaded to one type (example:  "audio/mpeg") or to a few types (example: "(audio|video)/.*" for all audio and video types, OR "audio/.*" for all audio types).

.TP
.I ATOM_FILTER_LANG="language"
If an Atom feed supports multiple languages for enclosures, then you can use this option to filter to only those you desire.  You can limit to one language (example: "en" for just English) or combine several supported languages to get them all (example: "(en|es|fr)" to download files in English, Spanish and French.  How the languages are defined may vary from feed to feed.

.P
Note:  If you do not enable any of the ATOM_FILTER options on a feed with multiple enclosures per item, when you run podget it will tell you the count per type or language to help you decide if you should enable the filters to reduce the number of files to be downloaded.

.P
Examples:
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_SIMPLE
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_TYPE="audio/mpeg"
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_TYPE="(audio|video)/.*"
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_LANG="en"
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_LANG="(en|es|fr)"
 http://somesite.com/feed CATEGORY Feed Name ATOM_FILTER_TYPE="audio/mpeg" ATOM_FILTER_LANG="en"

.SH HANDLING UTF-16 FEEDS
.PP
Some servers provide their feeds in UTF-16 format rather than the more common UTF-8.
.PP
To automatically convert these files, create a secondary serverlist at:
.PP
.nf
.fam C
        $HOME/.podget/serverlist.utf16

.fam T
.fi
Remember to change the name of the serverlist to match what you set it to with config_serverlist if you changed it.
.SH AUTHORS
Dave Vehrs