diff --git a/app.py b/app.py index 27fb3d2..16cdae2 100644 --- a/app.py +++ b/app.py @@ -9,21 +9,12 @@ app = Flask(__name__) parsers.define_parsers() -VIRTUAL_HOST = os.getenv('VIRTUAL_HOST') - +VIRTUAL_HOST=os.getenv('VIRTUAL_HOST') @app.route('/mensa/.json') def index(parser_name): try: - return utils.get_parser(parser_name).get_canteen_index(f'http://{VIRTUAL_HOST}/meta') - except KeyError: - abort(404) - - -@app.route('/mensa//meta/') -def meta(parser_name, canteen_name): - try: - return utils.get_parser(parser_name).get_meta_data(canteen_name, f'http://{VIRTUAL_HOST}/mensa/{parser_name}/feed') + return utils.get_parser(parser_name).get_canteen_index(f'https://{VIRTUAL_HOST}/meta') except KeyError: abort(404) @@ -31,6 +22,6 @@ def meta(parser_name, canteen_name): @app.route('/mensa//feed/') def mensa(parser_name, canteen_name): try: - return utils.get_parser(parser_name).get_meal_data(canteen_name) + return utils.get_parser(parser_name).parse(canteen_name) except KeyError: abort(404) diff --git a/parsers/tuebingen.json b/parsers/tuebingen.json index 527f37d..14278b0 100644 --- a/parsers/tuebingen.json +++ b/parsers/tuebingen.json @@ -7,100 +7,70 @@ "suffix": "611", "name": "Mensa Shedhalle", "street": "Schlachthausstraße 13", - "zipCode": "72074", - "city": "Tübingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-shedhalle/" + "city": "72074 Tübingen" }, { "id": "mensa-morgenstelle", "suffix": "621", "name": "Mensa Morgenstelle", "street": "Auf der Morgenstelle 26", - "zipCode": "72076", - "city": "Tübingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-morgenstelle-tuebingen/" + "city": "72076 Tübingen" }, { "id": "mensa-prinz_karl", "suffix": "623", "name": "Mensa Prinz Karl", "street": "Hafengasse 6", - "zipCode": "72070", - "city": "Tübingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-prinz-karl-tuebingen/" + "city": "72070 Tübingen" }, { "id": "mensa-hohenheim", "suffix": "661", "name": "Mensa Hohenheim", "street": "Garbenstraße 29", - "zipCode": "70599", - "city": "Stuttgart", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-hohenheim/" + "city": "70599 Stuttgart" }, { "id": "mensa-reutlingen", "suffix": "630", "name": "Mensa Reutlingen", "street": "Alteburgstraße 150 Gebäude 11", - "zipCode": "72762", - "city": "Reutlingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-reutlingen/" + "city": "72762 Reutlingen" }, { "id": "mensa-nuertingen", "suffix": "665", "name": "Mensa Nürtingen", "street": "Neckarsteige 6-10", - "zipCode": "72622", - "city": "Nürtingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-nuertingen/" + "city": "72622 Nürtingen" }, { "id": "mensa-rottenburg", "suffix": "655", "name": "Mensa Rottenburg", "street": "Schadenweiler Hof 1", - "zipCode": "72108", - "city": "Rottenburg", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-rottenburg/" + "city": "72108 Rottenburg" }, { "id": "mensa-albstadt", "suffix": "645", "name": "Mensa Albstadt", "street": "Jakobstraße 1", - "zipCode": "72458", - "city": "Albstadt", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-albstadt/" + "city": "72458 Albstadt" }, { "id": "mensa-sigmaringen", "suffix": "640", "name": "Mensa Sigmaringen", "street": "Anton-Günther-Straße 51", - "zipCode": "72488", - "city": "Sigmaringen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/mensa-sigmaringen/" + "city": " 72488 Sigmaringen" }, { "id": "cafeteria-morgenstelle", "suffix": "724", "name": "Cafeteria Morgenstelle", "street": "Auf der Morgenstelle 26", - "zipCode": "72076", - "city": "Tübingen", - "public": true, - "source": "https://www.my-stuwe.de/mensa/cafeteria-morgenstelle-tuebingen/" + "city": "72076 Tübingen" } ] } \ No newline at end of file diff --git a/parsers/tuebingen.py b/parsers/tuebingen.py index 1ced0cd..734a518 100644 --- a/parsers/tuebingen.py +++ b/parsers/tuebingen.py @@ -52,7 +52,7 @@ legend = { multiple_whitespaces_regex = re.compile('\\s{2,}') -def get_meal_data(url, today=False): +def parse_url(url, today=False): canteen = LazyBuilder() with urlopen(Request(url, None, {'User-Agent': 'Mozilla/5.0'})) as response: data = json.loads(response.read()) @@ -88,8 +88,6 @@ def define_parsers(): with open('parsers/tuebingen.json') as canteen_file: canteen_json = json.load(canteen_file) - parser = Parser(canteen_json['name'], meal_data_handler=get_meal_data, - base_url=canteen_json['base_url']) + parser = Parser(canteen_json['name'], handler=parse_url, shared_prefix=canteen_json['base_url']) for canteen in canteen_json['canteens']: - parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['zipCode'], - canteen['city'], canteen['public'], canteen['source'])) + parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['city'])) diff --git a/utils.py b/utils.py index be7ceda..2adb9b5 100644 --- a/utils.py +++ b/utils.py @@ -1,5 +1,3 @@ -from pyopenmensa.feed import LazyBuilder, Feed - parser_list = {} @@ -8,51 +6,33 @@ class Canteen: suffix: str name: str street: str - zip_code: str city: str - public: bool - source: str - def __init__(self, canteen_id, suffix, name, street, zip_code, city, public, source): + def __init__(self, canteen_id, suffix, name, street, city): self.canteen_id = canteen_id self.suffix = suffix self.name = name self.street = street - self.zip_code = zip_code self.city = city - self.public = public - self.source = source def address(self): - return f'{self.street}, {self.zip_code} {self.city}' + return f'{self.street}, {self.city}' class Parser: canteens: dict[str, Canteen] = {} - def __init__(self, name, meal_data_handler, base_url: str): + def __init__(self, name, handler, shared_prefix: str): self.name = name - self.meal_data_handler = meal_data_handler - self.base_url = base_url + self.handler = handler + self.shared_prefix = shared_prefix parser_list[name] = self def define(self, canteen: Canteen): self.canteens[canteen.canteen_id] = canteen - def get_meal_data(self, canteen: str): - return self.meal_data_handler(self.base_url + self.canteens[canteen].suffix) - - def get_meta_data(self, canteen: str, prefix: str): - canteen = self.canteens[canteen] - meta_data = LazyBuilder() - meta_data.name = canteen.name - meta_data.address = canteen.address() - meta_data.city = canteen.city - meta_data.availability = 'public' if canteen.public else 'restricted' - meta_data.feeds.append( - Feed('full', priority='0', url=f'{prefix}/{canteen.canteen_id}', source=canteen.source, dayOfWeek='*', dayOfMonth='*', - hour='9', minute='30', retry='60 1 1440')) - return meta_data.toXMLFeed() + def parse(self, canteen: str): + return self.handler(self.shared_prefix + self.canteens[canteen].suffix) def get_canteen_index(self, prefix: str): index: dict[str, str] = {}