aboutsummaryrefslogtreecommitdiff

#!/usr/bin/env python3

import os import re from argparse import ArgumentParser

PDF conversion backends

import pdfkit import weasyprint

CLI arguments

parser = ArgumentParser() parser.add_argument('--backend', '-b', help = 'change the download backend', default = 'pdfkit', choices = ['pdfkit', 'weasyprint']) parser.add_argument('--force', '-f', help = 'force download all links', action='store_true') args = parser.parse_args()

failed = []

for category in os.listdir('Links'): print('🔍 Examining: ' + category) os.makedirs(category, exist_ok=True)

section = ''
for link in open(os.path.join('Links', category), 'r').readlines():
    if link[0:2] == '# ':
        section = link[2:-1]
    if link[0] == '#' or link[0] == '\n':
        continue
    
    name = os.path.join(category, section + ' - ' + re.sub(r'(?u)[^-\w.]', '', link[5:]) + '.pdf')
    if not os.path.exists(name) or args.force:
        print('📲 Downloading: ' + link[:-1])
        print('💾 Destination: ' + name)
        
        # Time to print!
        try:
            if args.backend == 'pdfkit':
                pdfkit.from_url(link, name)
            else:
                pdf = weasyprint.HTML(link).write_pdf()
                open(name, 'wb').write(pdf)
        except KeyboardInterrupt:
            print('😭 Exiting')
            exit()
        except Exception as e:
            print('😱 Error when printing')
            print(e)
            failed.append(name)

Output failed downloads

if len(failed) > 0: print(failed) print(failed, file=open('failed', 'w'))