aboutsummaryrefslogtreecommitdiff
path: root/mkbinder.py
blob: 1bca79a5ccf91dd20aa838bf17b66111a980d440 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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'))