-
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'))