From 21899089a86fb9ca2bfac42622ac0c3777059c0b Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 28 Mar 2018 09:39:20 +0200 Subject: init default.py, setup.py --- day.py | 104 ----------------------------------------------------------------- 1 file changed, 104 deletions(-) delete mode 100755 day.py (limited to 'day.py') diff --git a/day.py b/day.py deleted file mode 100755 index 4364762..0000000 --- a/day.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 -""" usage: fetchday [options] - -Options: - --db FILE path to db [Default: db.json] - --cantine NAME name of the cantine (matches mein.aramark.de/NAME/) [Default: thales-deutschland] -""" -import sys -from docopt import docopt -import requests -from bs4 import BeautifulSoup -import logging - -import json -from datetime import datetime -logging.basicConfig(level=logging.DEBUG) -log = logging.getLogger() -from itertools import tee -cantinedb = { - 'thales-deutschland': 'aramark_menu2-2', - 'buerocampus-wangen': 'aramark_menu2-3', - 'ibm-boeblingen': 'aramark_menu2-3', - 'metabo-nuertingen': 'aramark_menu2-3', - 'vodafone-campus': 'aramark_menu2-2', - 'continental-villingen': 'aramark_menu2-3' - } -def get_data(cantine): - headers = { - 'User-Agent': 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0', - 'Referer': f'http://mein.aramark.de/{cantine}/menuplan/', - 'X-Requested-With': 'XMLHttpRequest', - 'Cache-Control': 'max-age=0' - } - data = { - 'action': 'aramark_menu2_content', - 'id': cantinedb[cantine] - } - ret = requests.post(f'http://mein.aramark.de/{cantine}/wp-admin/admin-ajax.php',data=data) - if ret.status_code != 200: - log.error(ret) - raise ValueError('Return code is not 200') - return ret.content.decode() - -def get_data_test(): - return open("./test.html").read() - -def get_things(row): - for item in row.select('.aramark_menu2-counter'): - try: - thing = { - "allergies": {}, - "additives": {}, - "type" : item.select_one('.aramark_menu2-countertitletop').find(text=True), - "description" : item.select_one('.aramark_menu2-menutext > p').find(text=True), - - } - try: - price = float(item.select_one('.aramark_menu2-menuprice > .aramark_menu2-menuprice').find(text=True).replace(',','.').replace('EUR','').strip()) - except: - price = float(thing['description']) - thing['price'] = price - try: - thing['title'] = item.select_one('.aramark_menu2-countermenu h4').find(text=True) - except: - thing['title'] = thing['type'] - - entries = item.select('.aramark_menu2-menuinfoallergenes li span') - for i in range(0,len(entries),2): - thing['allergies'] = { entries[i].find(text=True): entries[i+1].find(text=True) } - - additives = { } - entries = item.select('.aramark_menu2-menuinfoadditives li span') - for i in range(0,len(entries),2): - thing['additives'] = { entries[i].find(text=True): entries[i+1].find(text=True) } - yield thing - except Exception as e: - log.error(f"problem with {e}") - log.debug(item.prettify()) -def main(): - args = docopt(__doc__) - dbname = args['--db'] - cantine = args['--cantine'] - try: - with open(dbname,'r+') as f: - db = json.load(f) - except: - log.info('creating new db') - db = {} - - updated = datetime.now().isoformat().split('T')[0] - soup = BeautifulSoup(get_data(cantine), 'html.parser') - # soup = BeautifulSoup(get_data_test(), 'html.parser') - for row in soup.select('.aramark_menu2-menus > div'): - day = row.get('data-aramark_menu2-day') - things = list(get_things(row)) - db[day] = things - - log.info(f'writing db {dbname}') - with sys.stdout if dbname == '-' else open(dbname,'w+') as f: - json.dump(db,f,indent=2,sort_keys=True) - - -if __name__ == '__main__': - main() -- cgit v1.2.3 [cgit] Unable to lock slot /tmp/cgit/9f000000.lock: No such file or directory (2)