-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
217 lines (169 loc) · 5.93 KB
/
app.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
from flask import Flask
from flask import render_template
from flask_restful import Resource, Api
from flask_cors import CORS
from datetime import datetime
# import request
import requests
api_url = "https://unicafe.fi/wp-json/swiss/v1/restaurants/?lang=fi"
# response from api_url
response = requests.get(api_url)
app = Flask(__name__)
api = Api(app)
CORS(app)
# get todays date in format 07.05
date = datetime.now().strftime("%d.%m")
def furtherst_date_data():
dates = []
for object in response.json():
if object["title"] == "Chemicum":
for menu in object["menuData"]["menus"]:
dates.append(menu["date"])
return dates[-1][3:]
def check_if_sausage_is_in_week(restaurant_name):
# get the whole week
menu_original = {}
for object in response.json():
if object["title"] == restaurant_name:
for menu in object["menuData"]["menus"]:
menu_original[menu["date"]] = []
data = menu["data"]
for item in data:
menu_original[menu["date"]].append(item["name"])
# strip the menu
menu_stripped_from_pastdates = {}
for date_menu in menu_original:
present = datetime.now().strftime("%d.%m.")
# keep the date in the original format
date_menu_original = date_menu
# make date in format without weekday
date_menu = date_menu[3:]
if datetime.strptime(date_menu, "%d.%m.") < datetime.strptime(
present, "%d.%m."
):
pass
else:
menu_stripped_from_pastdates[date_menu_original] = [
item.lower() for item in menu_original[date_menu_original]
]
# dates that have sausage
dates_that_have_sausage = []
for day in menu_stripped_from_pastdates:
if "meksikolainen uunimakkara" in menu_stripped_from_pastdates[day]:
dates_that_have_sausage.append(day)
return dates_that_have_sausage
def get_todays_menu(restaurant_name):
restaurant_menu = []
for object in response.json():
if object["title"] == restaurant_name:
for menu in object["menuData"]["menus"]:
if date in menu["date"]:
data = menu["data"]
for item in data:
restaurant_menu.append(item["name"])
break
return restaurant_menu
def get_menu_for_date(restaurant_name, specific_date):
restaurant_menu = []
for object in response.json():
if object["title"].lower() == restaurant_name.lower():
for menu in object["menuData"]["menus"]:
if specific_date in menu["date"]:
data = menu["data"]
for item in data:
restaurant_menu.append(item["name"])
break
return restaurant_menu
def unicafe_global_sausagesearch():
viikkiRestaurants = [
"Tähkä",
"Infokeskus alakerta",
"Viikuna",
"Infokeskus",
"Biokeskus",
]
keskustaRestaurants = [
"Myöhä Café & Bar",
"Kaivopiha",
"Kaisa-talo",
"Soc&Kom",
"Rotunda",
"Porthania",
"Topelias",
"Olivia",
"Metsätalo",
"Cafe Portaali",
]
kumpulaRestaurants = ["Physicum", "Exactum", "Chemicum"]
meilahtiRestaurants = ["Meilahti"]
restaurants = (
viikkiRestaurants
+ keskustaRestaurants
+ kumpulaRestaurants
+ meilahtiRestaurants
)
restaurant_sausage_dict = {}
for restaurant in restaurants:
sausage_dates = check_if_sausage_is_in_week(restaurant)
if sausage_dates:
restaurant_sausage_dict[restaurant] = sausage_dates
# make a list of restaurants and dates as tuples
sortedRestaurantsDate = list(restaurant_sausage_dict.items())
# func to return the pure date of sausage availability of a restaurant
def returndate(item):
return item[1][0][3:8]
# sort the items by date
sortedRestaurantsDate.sort(key=returndate)
sortedRestaurantsDate = dict(sortedRestaurantsDate)
return sortedRestaurantsDate
@app.route("/")
def index():
# Chemicum
onko_makkaraa_chemicum = False
chemicum_menu = get_todays_menu("Chemicum")
if "Meksikolainen uunimakkara" in chemicum_menu:
onko_makkaraa_chemicum = True
chemicum_suljettu = False
if len(chemicum_menu) == 0:
chemicum_suljettu = True
# Exactum
onko_makkaraa_exactum = False
exactum_menu = get_todays_menu("Exactum")
if "Meksikolainen uunimakkara" in exactum_menu:
onko_makkaraa_exactum = True
exactum_suljettu = False
if len(exactum_menu) == 0:
exactum_suljettu = True
return render_template(
"index.html",
chemicum_menu=chemicum_menu,
chemicum_suljettu=chemicum_suljettu,
exactum_menu=exactum_menu,
exactum_suljettu=exactum_suljettu,
onko_makkaraa_chemicum=onko_makkaraa_chemicum,
onko_makkaraa_exactum=onko_makkaraa_exactum,
date=date,
global_sausage_search=unicafe_global_sausagesearch(),
furtherst_date_data=furtherst_date_data(),
)
# api
class UnicafeGlobalSausageSearch(Resource):
def get(self):
return unicafe_global_sausagesearch()
class UnicafeChemicum(Resource):
def get(self):
return get_todays_menu("Chemicum")
class UnicafeExactum(Resource):
def get(self):
return get_todays_menu("Exactum")
class UnicafeDatesearch(Resource):
def get(self, restaurant_name, date):
# convert input format 2024-10-15 to 15.10.
date = datetime.strptime(date, "%Y-%m-%d").strftime("%d.%m.")
return get_menu_for_date(restaurant_name, date)
api.add_resource(UnicafeGlobalSausageSearch, "/api")
api.add_resource(UnicafeChemicum, "/api/chemicum")
api.add_resource(UnicafeExactum, "/api/exactum")
api.add_resource(
UnicafeDatesearch, "/api/datesearch/<string:restaurant_name>/<string:date>"
)