summaryrefslogtreecommitdiffstats
path: root/ebknotify/cli.py
blob: ef6f99a220e3fe87b045b3df0a5680f67992c799 (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
""" usage: ebk-notify [options] CONFIG

options:
    --lol=LOL           Log Level [Default: INFO]

"""
from docopt import docopt
from .client import EbkClient
from .common import set_lol
import yaml
import json
import dateutil
import dateutil.parser
from datetime import datetime
from dateutil.tz import tzlocal
import logging

log = logging.getLogger('ebk-notify')

def main():
    args = docopt(__doc__)
    set_lol(args['--lol'],log)

    config = yaml.safe_load(open(args['CONFIG']))
    api = EbkClient(config['main']['appid'],
                    config['main']['apppw'],
                    config['main']['userid'],
                    config['main']['userpw']
                    )
    for item in config['items']:
        log.info(f"For Search \"{item['name']}\"")
        del item['name']
        if 'distance' in item and 'distanceUnit' not in item:
            item['distanceUnit'] = 'KM'
        ads = api.get_ads(**item)
        now = datetime.now(tzlocal())
        for ad in ads:
            id = ad.get('id', 0)
            log.debug(json.dumps(ad,indent=4))
            creation = ad.get('start-date-time', {}).get('value', '').encode('utf-8')
            price = ad.get('price',{ 'amount': {}})['amount'].get('value',0)
            url = ad['link'][1]['href']
            d = dateutil.parser.parse(creation)
            age_in_h = round((now - d).total_seconds() / 3600,2)

            title = ad.get('title', {}).get('value', '').encode('utf-8')
            title_unescaped = api.html_unescape(title)
            log.info( f"{age_in_h}h ago: \"{title_unescaped}\" for {price}€ -> {url}")