Add metadata feed
This commit is contained in:
		
							parent
							
								
									d60ce9d0bc
								
							
						
					
					
						commit
						199048207a
					
				
					 4 changed files with 75 additions and 15 deletions
				
			
		
							
								
								
									
										13
									
								
								app.py
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								app.py
									
										
									
									
									
								
							|  | @ -9,12 +9,21 @@ app = Flask(__name__) | ||||||
| 
 | 
 | ||||||
| parsers.define_parsers() | parsers.define_parsers() | ||||||
| 
 | 
 | ||||||
| VIRTUAL_HOST=os.getenv('VIRTUAL_HOST') | VIRTUAL_HOST = os.getenv('VIRTUAL_HOST') | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| @app.route('/mensa/<parser_name>.json') | @app.route('/mensa/<parser_name>.json') | ||||||
| def index(parser_name): | def index(parser_name): | ||||||
|     try: |     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/<parser_name>/meta/<canteen_name>') | ||||||
|  | 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: |     except KeyError: | ||||||
|         abort(404) |         abort(404) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,70 +7,100 @@ | ||||||
|       "suffix": "611", |       "suffix": "611", | ||||||
|       "name": "Mensa Shedhalle", |       "name": "Mensa Shedhalle", | ||||||
|       "street": "Schlachthausstraße 13", |       "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", |       "id": "mensa-morgenstelle", | ||||||
|       "suffix": "621", |       "suffix": "621", | ||||||
|       "name": "Mensa Morgenstelle", |       "name": "Mensa Morgenstelle", | ||||||
|       "street": "Auf der Morgenstelle 26", |       "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", |       "id": "mensa-prinz_karl", | ||||||
|       "suffix": "623", |       "suffix": "623", | ||||||
|       "name": "Mensa Prinz Karl", |       "name": "Mensa Prinz Karl", | ||||||
|       "street": "Hafengasse 6", |       "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", |       "id": "mensa-hohenheim", | ||||||
|       "suffix": "661", |       "suffix": "661", | ||||||
|       "name": "Mensa Hohenheim", |       "name": "Mensa Hohenheim", | ||||||
|       "street": "Garbenstraße 29", |       "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", |       "id": "mensa-reutlingen", | ||||||
|       "suffix": "630", |       "suffix": "630", | ||||||
|       "name": "Mensa Reutlingen", |       "name": "Mensa Reutlingen", | ||||||
|       "street": "Alteburgstraße 150 Gebäude 11", |       "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", |       "id": "mensa-nuertingen", | ||||||
|       "suffix": "665", |       "suffix": "665", | ||||||
|       "name": "Mensa Nürtingen", |       "name": "Mensa Nürtingen", | ||||||
|       "street": "Neckarsteige 6-10", |       "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", |       "id": "mensa-rottenburg", | ||||||
|       "suffix": "655", |       "suffix": "655", | ||||||
|       "name": "Mensa Rottenburg", |       "name": "Mensa Rottenburg", | ||||||
|       "street": "Schadenweiler Hof 1", |       "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", |       "id": "mensa-albstadt", | ||||||
|       "suffix": "645", |       "suffix": "645", | ||||||
|       "name": "Mensa Albstadt", |       "name": "Mensa Albstadt", | ||||||
|       "street": "Jakobstraße 1", |       "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", |       "id": "mensa-sigmaringen", | ||||||
|       "suffix": "640", |       "suffix": "640", | ||||||
|       "name": "Mensa Sigmaringen", |       "name": "Mensa Sigmaringen", | ||||||
|       "street": "Anton-Günther-Straße 51", |       "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", |       "id": "cafeteria-morgenstelle", | ||||||
|       "suffix": "724", |       "suffix": "724", | ||||||
|       "name": "Cafeteria Morgenstelle", |       "name": "Cafeteria Morgenstelle", | ||||||
|       "street": "Auf der Morgenstelle 26", |       "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/" | ||||||
|     } |     } | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
|  | @ -91,4 +91,5 @@ def define_parsers(): | ||||||
|     parser = Parser(canteen_json['name'], meal_data_handler=get_meal_data, |     parser = Parser(canteen_json['name'], meal_data_handler=get_meal_data, | ||||||
|                     base_url=canteen_json['base_url']) |                     base_url=canteen_json['base_url']) | ||||||
|     for canteen in canteen_json['canteens']: |     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'])) | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								utils.py
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								utils.py
									
										
									
									
									
								
							|  | @ -1,3 +1,5 @@ | ||||||
|  | from pyopenmensa.feed import LazyBuilder, Feed | ||||||
|  | 
 | ||||||
| parser_list = {} | parser_list = {} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -6,17 +8,23 @@ class Canteen: | ||||||
|     suffix: str |     suffix: str | ||||||
|     name: str |     name: str | ||||||
|     street: str |     street: str | ||||||
|  |     zip_code: str | ||||||
|     city: 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.canteen_id = canteen_id | ||||||
|         self.suffix = suffix |         self.suffix = suffix | ||||||
|         self.name = name |         self.name = name | ||||||
|         self.street = street |         self.street = street | ||||||
|  |         self.zip_code = zip_code | ||||||
|         self.city = city |         self.city = city | ||||||
|  |         self.public = public | ||||||
|  |         self.source = source | ||||||
| 
 | 
 | ||||||
|     def address(self): |     def address(self): | ||||||
|         return f'{self.street}, {self.city}' |         return f'{self.street}, {self.zip_code} {self.city}' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Parser: | class Parser: | ||||||
|  | @ -34,6 +42,18 @@ class Parser: | ||||||
|     def get_meal_data(self, canteen: str): |     def get_meal_data(self, canteen: str): | ||||||
|         return self.meal_data_handler(self.base_url + self.canteens[canteen].suffix) |         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): |     def get_canteen_index(self, prefix: str): | ||||||
|         index: dict[str, str] = {} |         index: dict[str, str] = {} | ||||||
|         canteen: Canteen |         canteen: Canteen | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue