This script downloads, converts and tags broadcasts of Austria's ORF Ö1 radio station. It is compatible with the current 2017 program schedule (Programmschema 2017).
NOTE: It is recommended to run this script more than one time per week, because otherwise broadcasts become inaccessible.
Q: Why not use Ö1's podcasts service to download broadcasts?
A: Because not everything is made available there for download. With this script, you can download any file in the on-demand library (broadcasts of the last 7 days).
- Python 3.4+
- Additional python libraries: tqdm, requests, mutagen, html2text. Install them viapip install -U tqdm requests mutagen html2text.
- ffmpeg, either in PATH or with the path to the executable given via the- --ffmpegargument
usage: oe1_get.py [-h] [--dry-run] [--no-cache] [--reconvert] [--retag]
                  [--cache-file CACHE_FILE] [--length SECONDS]
                  [--ffmpeg FFMPEG_EXECUTABLE]
                  download_basedir ini_file
Download media files from ORF Ö1 7-Tage on demand services
positional arguments:
  download_basedir      root path containing the downloaded files
  ini_file              ini file for the description of items to download
optional arguments:
  -h, --help            show this help message and exit
  --dry-run             dry run, do not do conversion, tagging or deleting
  --no-cache            do not use cached data
  --reconvert           do the conversion again, even if the file already
                        exists (overwrite it)
  --retag               tag already existing target files again
  --cache-file CACHE_FILE
                        the bz2 compressed json cache file (default:
                        [download_basedir]/oe1cache.json.bz2
  --length SECONDS      just convert these first seconds (useful for
                        debugging)
  --ffmpeg FFMPEG_EXECUTABLE
                        ffmpeg executable (default: ffmpeg)
Written by Christoph Haunschmidt, Version 2017-05-18.0
See oe1_download.ini.example for a commented example.
These can be accessed and manipulated via Python's powerful str.format() syntax.
| Name | Data Source | Description | 
|---|---|---|
| DOWNLOAD_BASEDIR | command line parameter: download_basedir | root directory of the media files (given as command line parameter) | 
| SECTION | ini file | the current section header | 
| extended_info | broadcast JSON: subtitle,description,pressRelease,akm | values joined together as markdown | 
| extended_info_text_only | broadcast JSON: subtitle,description,pressRelease,akm | the same as above, only with the links stripped (=text only) | 
| href | broadcast JSON: href | URL of the broadcasts JSON data | 
| id | broadcast JSON: id | given by Ö1 - probably too short to be unique | 
| info_1line | extended_info_text_only | value of extended_info_text_onlywithout newlines | 
| info_1line_limited | extended_info_text_only | the same as above, limited to 120 chars | 
| scheduled_start | broadcast JSON: scheduled_start | the scheduled start of the broadcast; is a python datetimeobject. You can format it, e.g.{scheduled_start:%Y-%m-%d %Hh%M} | 
| subtitle | broadcast JSON: subtitle | subtitle of broadcast | 
| tags | broadcast JSON: tags | comma separated tags of the metadata json given by Ö1 | 
| title | broadcast JSON: title | title of broadcast | 
| url | broadcast JSON: url | URL of the broadcast series | 
| download_url | composed from broadcast JSON: streams[0]['loopStreamId'] | URL to the audio file | 
Christoph Haunschmidt