From 199048207a3a29db07d634cec96d45bb5fcf55a5 Mon Sep 17 00:00:00 2001 From: Julius Freudenberger Date: Sat, 4 Feb 2023 19:20:01 +0100 Subject: [PATCH] Add metadata feed --- app.py | 13 +++++++++-- parsers/tuebingen.json | 50 +++++++++++++++++++++++++++++++++--------- parsers/tuebingen.py | 3 ++- utils.py | 24 ++++++++++++++++++-- 4 files changed, 75 insertions(+), 15 deletions(-) diff --git a/app.py b/app.py index 97c71d1..27fb3d2 100644 --- a/app.py +++ b/app.py @@ -9,12 +9,21 @@ 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'https://{VIRTUAL_HOST}/meta') + 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') except KeyError: abort(404) diff --git a/parsers/tuebingen.json b/parsers/tuebingen.json index 14278b0..527f37d 100644 --- a/parsers/tuebingen.json +++ b/parsers/tuebingen.json @@ -7,70 +7,100 @@ "suffix": "611", "name": "Mensa Shedhalle", "street": "Schlachthausstraße 13", - "city": "72074 Tübingen" + "zipCode": "72074", + "city": "Tübingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-shedhalle/" }, { "id": "mensa-morgenstelle", "suffix": "621", "name": "Mensa Morgenstelle", "street": "Auf der Morgenstelle 26", - "city": "72076 Tübingen" + "zipCode": "72076", + "city": "Tübingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-morgenstelle-tuebingen/" }, { "id": "mensa-prinz_karl", "suffix": "623", "name": "Mensa Prinz Karl", "street": "Hafengasse 6", - "city": "72070 Tübingen" + "zipCode": "72070", + "city": "Tübingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-prinz-karl-tuebingen/" }, { "id": "mensa-hohenheim", "suffix": "661", "name": "Mensa Hohenheim", "street": "Garbenstraße 29", - "city": "70599 Stuttgart" + "zipCode": "70599", + "city": "Stuttgart", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-hohenheim/" }, { "id": "mensa-reutlingen", "suffix": "630", "name": "Mensa Reutlingen", "street": "Alteburgstraße 150 Gebäude 11", - "city": "72762 Reutlingen" + "zipCode": "72762", + "city": "Reutlingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-reutlingen/" }, { "id": "mensa-nuertingen", "suffix": "665", "name": "Mensa Nürtingen", "street": "Neckarsteige 6-10", - "city": "72622 Nürtingen" + "zipCode": "72622", + "city": "Nürtingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-nuertingen/" }, { "id": "mensa-rottenburg", "suffix": "655", "name": "Mensa Rottenburg", "street": "Schadenweiler Hof 1", - "city": "72108 Rottenburg" + "zipCode": "72108", + "city": "Rottenburg", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-rottenburg/" }, { "id": "mensa-albstadt", "suffix": "645", "name": "Mensa Albstadt", "street": "Jakobstraße 1", - "city": "72458 Albstadt" + "zipCode": "72458", + "city": "Albstadt", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-albstadt/" }, { "id": "mensa-sigmaringen", "suffix": "640", "name": "Mensa Sigmaringen", "street": "Anton-Günther-Straße 51", - "city": " 72488 Sigmaringen" + "zipCode": "72488", + "city": "Sigmaringen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/mensa-sigmaringen/" }, { "id": "cafeteria-morgenstelle", "suffix": "724", "name": "Cafeteria Morgenstelle", "street": "Auf der Morgenstelle 26", - "city": "72076 Tübingen" + "zipCode": "72076", + "city": "Tübingen", + "public": true, + "source": "https://www.my-stuwe.de/mensa/cafeteria-morgenstelle-tuebingen/" } ] } \ No newline at end of file diff --git a/parsers/tuebingen.py b/parsers/tuebingen.py index 52087c5..1ced0cd 100644 --- a/parsers/tuebingen.py +++ b/parsers/tuebingen.py @@ -91,4 +91,5 @@ def define_parsers(): parser = Parser(canteen_json['name'], meal_data_handler=get_meal_data, base_url=canteen_json['base_url']) for canteen in canteen_json['canteens']: - parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['city'])) + parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['zipCode'], + canteen['city'], canteen['public'], canteen['source'])) diff --git a/utils.py b/utils.py index f34bca1..be7ceda 100644 --- a/utils.py +++ b/utils.py @@ -1,3 +1,5 @@ +from pyopenmensa.feed import LazyBuilder, Feed + parser_list = {} @@ -6,17 +8,23 @@ 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, city): + def __init__(self, canteen_id, suffix, name, street, zip_code, city, public, source): 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.city}' + return f'{self.street}, {self.zip_code} {self.city}' class Parser: @@ -34,6 +42,18 @@ class Parser: 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 get_canteen_index(self, prefix: str): index: dict[str, str] = {} canteen: Canteen