summaryrefslogtreecommitdiffstats
path: root/ebknotify/cli.py
blob: 7b9e612033a5791a1112b7adb8fb78395b88b2a6 (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
56
57
58
59
60
61
62
63
""" usage: ebk-notify [options]

options:
    --lol=LOL           Log Level [Default: INFO]
    --config=FILE       Path to config file [Default: ~/.config/ebk-notify/ebk.yml]
    --filter=FILE       Path to separate filter file,
                        if not set ebk-notify will check in config unter the 'items' key
    --cache=FILE        Path to cache file [Default: ~/.config/ebk-notify/cache.json]
    --atom              Write atom files
    --outdir=DIR        Write atom files to folder [Default: ~/.config/ebk-notify]

"""

from docopt import docopt
from .client import EbkClient
from .common import set_lol,load_config
from .cache import Cache
from .feed import Feed
import json
import logging
from os.path import join
log = logging.getLogger('ebk-notify')

def main():
    args = docopt(__doc__)
    set_lol(args['--lol'],log)
    config = load_config(args['--config'])
    api = EbkClient(config['main']['appid'],
                    config['main']['apppw'],
                    config['main']['userid'],
                    config['main']['userpw']
                    )

    if args['--filter']:
        log.info(f"--filter set, trying to load filters from {args['--filter']}")
        items = load_config(args['--filter'])
    else:
        log.info("loading filter from configurtion['items']")
        items = config['items']
    cache = Cache(args['--cache'])

    for item in items:
        name = item['name']
        log.info(f"For Search \"{name}\"")
        del item['name']

        if not 'adType' in item:
            item['adType'] = 'OFFERED'
        if 'distance' in item and 'distanceUnit' not in item:
            item['distanceUnit'] = 'KM'
        ads = api.get_ads(**item)
        item['name'] = name
        for ad in ads:
            id = ad.get('id', 0)
            log.debug(json.dumps(ad,indent=4))
            ad = cache.update(ad,item)
            e = ad['notify']
            print( f"{e['age_in_h']}h ago: \"{e['title-unescaped']}\" for {e['price']}€ -> {e['url']}")
    cache.save()
    if args['--atom']:
        f = Feed()
        f.load_cache(cache)
        print(f.to_atom_file(join(args['--outdir'],f'{f.ident}.atom')))