add scripts from repository python-scripts
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
download files with URLs from DB
|
||||
"""
|
||||
import re
|
||||
import subprocess
|
||||
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
||||
import mariadb
|
||||
from setup import get_database_cursors, create_tables, get_logger
|
||||
|
||||
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--verbose', '-v', action='count', default=0)
|
||||
parser.add_argument('--dir', '-d', default='/data/media')
|
||||
parser.add_argument('--dry-run', '-m', action='store_true')
|
||||
parser.add_argument('--rename', '-r', action='store_true')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
def parse_output(lines_list, log):
|
||||
file_name = ""
|
||||
for line in lines_list:
|
||||
if 'has already been downloaded' in line:
|
||||
end_len = len(' has already been downloaded')
|
||||
file_name = line[11:-end_len]
|
||||
log.info('found file: "%s"', file_name)
|
||||
if 'Destination' in line:
|
||||
line_len = len(line)
|
||||
start_len = len('[download] Destination: ')
|
||||
file_len = line_len-start_len
|
||||
file_name = line[-file_len:]
|
||||
log.info('new file: "%s"', file_name)
|
||||
return file_name
|
||||
|
||||
|
||||
def download_url(video_url, log):
|
||||
result = subprocess.run(["/home/tpeetz/bin/yt-dlp", video_url], cwd=args.dir, capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
output = result.stdout
|
||||
output = re.sub(' +', ' ', output)
|
||||
lines_list = output.splitlines()
|
||||
return parse_output(lines_list, log)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def download_and_update(link, entry_id, conn):
|
||||
m_cursor = conn.cursor()
|
||||
filename = download_url(link, logger)
|
||||
if filename is None:
|
||||
update_statement = 'UPDATE media_file set review = true WHERE id = ?'
|
||||
logger.debug(f'entry {entry_id} could not downloaded, set to Review')
|
||||
m_cursor.execute(update_statement, (entry_id,))
|
||||
else:
|
||||
update_statement = 'UPDATE media_file set file_name = ?, should_download = false, review = false WHERE id = ?'
|
||||
logger.debug(f'entry {entry_id} successfully downloaded, set review and should_download to false')
|
||||
m_cursor.execute(update_statement, (filename, entry_id))
|
||||
conn.commit()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logger = get_logger(args.verbose)
|
||||
logger.info('kontor.download started')
|
||||
s_conn, m_conn = get_database_cursors(logger)
|
||||
cursor = m_conn.cursor()
|
||||
cursor.execute('SELECT id, url FROM media_file where should_download is true')
|
||||
for (link_id, url) in cursor.fetchall():
|
||||
if url is None:
|
||||
logger.info('There is no url for id {}'.format(link_id))
|
||||
else:
|
||||
if args.dry_run:
|
||||
logger.info(f'download {url} for {link_id}')
|
||||
else:
|
||||
download_and_update(url, link_id, m_conn)
|
||||
logger.info('kontor.download finished')
|
||||
Reference in New Issue
Block a user