summaryrefslogtreecommitdiff
path: root/dl-from-db.py
blob: 526c3a4852682fc21710f066c6be8dc82e69ae2a (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
#!/usr/bin/env python3

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

import logging

from mdf import Database, retronews
from argparse import ArgumentParser

database = Database()


if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument('--output', type=str, required=True,
                        help='output directory')
    parser.add_argument('--from-date', type=str)
    parser.add_argument('--to-date', type=str)
    parser.add_argument('--merge-threads', default=retronews.TILE_MERGING_POOL_SIZE, type=int)
    parser.add_argument('--fetch-threads', default=retronews.PAGE_FETCHING_POOL_SIZE, type=int)
    parser.add_argument('--only-fetch', action='store_true',
                        help='only fetch magazine tiles and exit, do not merge anything')
    parser.add_argument('--force-overwrite', action='store_true',
                        help='if file yyyy-mm-dd.pdf already exists, delete it and start over')
    parser.add_argument('--force-probe', action='store_true',
                        help='force all pages to use the \'probe\' method')
    parser.add_argument('--fetch-probe-pages', nargs='+', type=int,
                        help='force some pages to use the \'probe\' method, when count of vertical and horizontal tiles is unknown')

    args = parser.parse_args()

    retronews.set_tile_merging_pool_size(args.merge_threads)
    retronews.set_page_fetching_pool_size(args.fetch_threads)

    for doc in database.get_documents((args.from_date, args.to_date)):
        url = doc['url']
        print(f'grabbing {url}...')
        if not retronews.grab_magazine(url,
                                       output_root=args.output,
                                       probe_pages=args.fetch_probe_pages,
                                       probe_all=args.force_probe,
                                       only_fetch=args.only_fetch,
                                       force_overwrite=args.force_overwrite):
            logging.error(f'failed to grab {url}')