mirror of
https://github.com/mwalbeck/podfox.git
synced 2025-04-14 10:08:28 +00:00
Initial rename functionality
This commit is contained in:
parent
cddff289bb
commit
91e14e1cca
1 changed files with 86 additions and 6 deletions
|
@ -28,6 +28,7 @@ import os
|
||||||
import os.path
|
import os.path
|
||||||
import requests
|
import requests
|
||||||
import sys
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
# RSS datetimes follow RFC 2822, same as email headers.
|
# RSS datetimes follow RFC 2822, same as email headers.
|
||||||
# this is the chain of stackoverflow posts that led me to believe this is true.
|
# this is the chain of stackoverflow posts that led me to believe this is true.
|
||||||
|
@ -37,7 +38,7 @@ import sys
|
||||||
# how-to-parse-a-rfc-2822-date-time-into-a-python-datetime
|
# how-to-parse-a-rfc-2822-date-time-into-a-python-datetime
|
||||||
|
|
||||||
from email.utils import parsedate
|
from email.utils import parsedate
|
||||||
from time import mktime
|
from time import mktime, gmtime, strftime
|
||||||
|
|
||||||
CONFIGURATION = {}
|
CONFIGURATION = {}
|
||||||
|
|
||||||
|
@ -188,28 +189,107 @@ def episodes_from_feed(d):
|
||||||
return episodes
|
return episodes
|
||||||
|
|
||||||
|
|
||||||
|
def rename_episode(folder, published, title, url):
|
||||||
|
if CONFIGURATION['date_format']:
|
||||||
|
date_format = CONFIGURATION['date_format']
|
||||||
|
else:
|
||||||
|
date_format = "%Y-%m-%d"
|
||||||
|
published_date = strftime(date_format, gmtime(published))
|
||||||
|
safe_title = escape_string(title)
|
||||||
|
extenstion = get_extenstion(url)
|
||||||
|
filename = published_date + " - " + safe_title + extenstion
|
||||||
|
|
||||||
|
if not episode_exists(folder, filename):
|
||||||
|
return filename
|
||||||
|
|
||||||
|
# If filename exists change title to original filename
|
||||||
|
original_title = get_original_filename(url)
|
||||||
|
filename = published_date + " - " + original_title
|
||||||
|
|
||||||
|
if not episode_exists(folder, filename):
|
||||||
|
return filename
|
||||||
|
|
||||||
|
# If filename exists change date to current and title to episode title
|
||||||
|
current_date = strftime("%Y-%m-%d", gmtime())
|
||||||
|
filename = current_date + " - " + safe_title + extenstion
|
||||||
|
|
||||||
|
if not episode_exists(folder, filename):
|
||||||
|
return filename
|
||||||
|
|
||||||
|
# If filename exists change date to current and title to original filename
|
||||||
|
filename = current_date + " - " + original_title
|
||||||
|
|
||||||
|
if not episode_exists(folder, filename):
|
||||||
|
return filename
|
||||||
|
|
||||||
|
return add_epoch(original_title)
|
||||||
|
|
||||||
|
|
||||||
|
def escape_string(title):
|
||||||
|
pattern = r'[\|#:%&{}\\/<>*?$!\'"@]'
|
||||||
|
return re.sub(pattern, "_", title)
|
||||||
|
|
||||||
|
|
||||||
|
def get_extenstion(url):
|
||||||
|
url = url.split("?")[0]
|
||||||
|
pattern = r'[.][\w]+$'
|
||||||
|
return re.match(pattern, url)
|
||||||
|
|
||||||
|
|
||||||
|
def get_original_filename(url):
|
||||||
|
url = url.split("?")[0]
|
||||||
|
pattern = r'[^\/]+$'
|
||||||
|
return re.match(pattern, url)
|
||||||
|
|
||||||
|
|
||||||
|
def add_epoch(filename):
|
||||||
|
return gmtime() + " - " + filename
|
||||||
|
|
||||||
|
|
||||||
|
def episode_exists(shortname, filename):
|
||||||
|
base = CONFIGURATION['podcast-directory']
|
||||||
|
if os.path.exists(os.path.join(base, shortname, filename)):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def generic_episode_name(folder, url):
|
||||||
|
name = get_original_title(url)
|
||||||
|
|
||||||
|
if not episode_exists(folder, name)
|
||||||
|
return name
|
||||||
|
|
||||||
|
return add_epoch(name)
|
||||||
|
|
||||||
|
|
||||||
def download_multiple(feed, maxnum):
|
def download_multiple(feed, maxnum):
|
||||||
for episode in feed['episodes']:
|
for episode in feed['episodes']:
|
||||||
if maxnum == 0:
|
if maxnum == 0:
|
||||||
break
|
break
|
||||||
if not episode['downloaded']:
|
if not episode['downloaded']:
|
||||||
download_single(feed['shortname'], episode['url'])
|
if CONFIGURATION['rename_episodes']:
|
||||||
|
filename = rename_episode(feed['shortname'], episode['published'],
|
||||||
|
episode["title"], episode["url"])
|
||||||
|
else:
|
||||||
|
filename = generic_episode_name(feed['shortname'], episode['url'])
|
||||||
|
download_single(feed['shortname'], episode['url'], filename)
|
||||||
episode['downloaded'] = True
|
episode['downloaded'] = True
|
||||||
maxnum -= 1
|
maxnum -= 1
|
||||||
overwrite_config(feed)
|
overwrite_config(feed)
|
||||||
|
|
||||||
|
|
||||||
def download_single(folder, url):
|
def download_single(folder, url, filename):
|
||||||
print(url)
|
print(url)
|
||||||
base = CONFIGURATION['podcast-directory']
|
base = CONFIGURATION['podcast-directory']
|
||||||
filename = url.split('/')[-1]
|
if filename is None:
|
||||||
filename = filename.split('?')[0]
|
filename = get_original_filename(url)
|
||||||
print_green("{:s} downloading".format(filename))
|
print_green("{:s} downloading".format(filename))
|
||||||
r = requests.get(url.strip(), stream=True)
|
r = requests.get(url.strip(), stream=True)
|
||||||
with open(os.path.join(base, folder, filename), 'wb') as f:
|
with open(os.path.join(base, folder, filename), 'wb') as f:
|
||||||
for chunk in r.iter_content(chunk_size=1024**2):
|
for chunk in r.iter_content(chunk_size=1024**2):
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
print("done.")
|
print("done.")
|
||||||
|
|
||||||
|
|
||||||
def available_feeds():
|
def available_feeds():
|
||||||
|
|
Loading…
Add table
Reference in a new issue