""" 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] --wait=SEC Wait for a random amount of seconds after a single query """ 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 from random import randrange from time import sleep 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 or []: 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']}") if args['--wait']: wait = randrange(1,int(args['--wait'])) log.info(f"sleeping for {wait} seconds") sleep(wait) cache.save() if args['--atom']: f = Feed() f.load_cache(cache) print(f.to_atom_file(join(args['--outdir'],f'{f.ident}.atom')))