blob: bb8fb944cc257dcf851e0de0d7ec603d416abee9 (
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
64
65
66
67
68
69
70
71
72
|
""" 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:
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')))
|