feat: Add script to download Talking Postgres podcast
Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
parent
367dc76c83
commit
6a11a9fe26
1 changed files with 73 additions and 0 deletions
73
dl-talkingpostgres.py
Executable file
73
dl-talkingpostgres.py
Executable file
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env python
|
||||
# Download Talking Postgres podcast
|
||||
# https://talkingpostgres.com/
|
||||
|
||||
import json
|
||||
import os
|
||||
import feedparser
|
||||
import requests
|
||||
from time import mktime
|
||||
from unidecode import unidecode
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
|
||||
def convert_title(title):
|
||||
"""Replace special characters in a title"""
|
||||
m = {
|
||||
")": "",
|
||||
"(": "",
|
||||
"_": "-",
|
||||
"&": "",
|
||||
" ": "-",
|
||||
"'": "",
|
||||
"/": "",
|
||||
":": "",
|
||||
"--": "-",
|
||||
}
|
||||
for i in m:
|
||||
title = title.replace(i, m[i])
|
||||
title = unidecode(title)
|
||||
return title.lower()
|
||||
|
||||
|
||||
def download(url, filename, timestamp):
|
||||
print(f"Downloading {url} to {filename}")
|
||||
with requests.get(url, stream=True) as r:
|
||||
r.raise_for_status()
|
||||
with open(filename, "wb") as f:
|
||||
for chunk in r.iter_content(chunk_size=8192):
|
||||
f.write(chunk)
|
||||
os.utime(filename, (timestamp, timestamp))
|
||||
|
||||
|
||||
def main():
|
||||
feed = feedparser.parse("https://feeds.transistor.fm/talkingpostgres")
|
||||
|
||||
for entry in feed["entries"]:
|
||||
title = convert_title(entry["title"])
|
||||
timestamp = entry["published_parsed"]
|
||||
date = f"{timestamp.tm_year:04}-{timestamp.tm_mon:02}-{timestamp.tm_mday:02}"
|
||||
url = None
|
||||
|
||||
for link in entry["links"]:
|
||||
if link["type"] == "audio/mpeg":
|
||||
url = link["href"]
|
||||
|
||||
if not url:
|
||||
print("Could not find url")
|
||||
pprint(entry)
|
||||
continue
|
||||
|
||||
filename = f"{date}-{title}.mp3"
|
||||
if not os.path.isfile(filename):
|
||||
try:
|
||||
download(url, filename, mktime(timestamp))
|
||||
except KeyboardInterrupt:
|
||||
if os.path.isfile(filename):
|
||||
os.unlink(filename)
|
||||
break
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in a new issue