PNA.fi koodi

juvenes.py 4.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # encoding: UTF-8
  2. import datetime
  3. import urllib.request
  4. import urllib.error
  5. import json
  6. import re
  7. import os
  8. # last two in order are $kitchen_info_id, $menu_type_id
  9. restaurant_info = [
  10. [ "(TaY) Yliopiston Ravintola", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola.aspx", "M", "left", 13, 60 ],
  11. [ "(TaY) Yliopiston Ravintola / VegeBar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola.aspx", "", "left", 13, 5 ],
  12. [ "(TaY) Café Campus", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/caf%C3%A9campus.aspx", "", "left", 130019, 23 ],
  13. [ "(TaY) Café Pinni", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/caf%C3%A9lunchpinni.aspx", "M", "middle", 130016, 60 ],
  14. [ "(TAYS) Arvo", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/arvo.aspx", "M", "left", 5, 60 ],
  15. [ "(TAYS) Café Lea (Fusion Kitchen)", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/cafélea.aspx", "M", "left", 50026, 3 ],
  16. [ "(TAYS) Café Lea (My Salad)", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/cafélea.aspx", "M", "left", 50026, 76 ],
  17. [ "(TTY) Newton", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/newton.aspx", "", "left", 6, 60],
  18. [ "(TTY) Café Konehuone / Såås bar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/caf%C3%A9konehuone/s%C3%A5%C3%A5sbar.aspx", "", "left", 60038, 77],
  19. [ "(TTY) Café Konehuone / Fusion Kitchen", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/caf%C3%A9konehuone/fusionkitchen.aspx", "", "middle", 60038, 3 ],
  20. [ "(TAMK) Ziberia", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/ziberia.aspx", "", "middle", 11, 60 ],
  21. # [ "(TAMK) Frenckell", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/frenckell.aspx", "", "middle", 33, 60 ],
  22. [ "(TAMK) Frenckell / Såås bar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/frenckell.aspx", "", "middle", 33, 77 ]
  23. ]
  24. def get_restaurants(use_old):
  25. count = 0
  26. restaurants = []
  27. for info in restaurant_info:
  28. kitchen = info[4]
  29. menutype = info[5]
  30. title = info[0]
  31. cur_title = title
  32. open_hours = ""
  33. week_foods = {}
  34. week = datetime.datetime.now().isocalendar()[1]
  35. for weekday in range(1,7):
  36. url = "http://www.juvenes.fi/DesktopModules/Talents.LunchMenu/LunchMenuServices.asmx/GetMenuByWeekday?KitchenId={kitchen}&MenuTypeId={menutype}&Week={week}&Weekday={weekday}&lang='fi'&format=json".format(kitchen=kitchen, menutype=menutype, week=week, weekday=weekday)
  37. temp_fname = "juvenes_{count}-{weekday}.temp.js".format(count=count, weekday=weekday)
  38. if not use_old and not os.path.isfile(temp_fname):
  39. try:
  40. urllib.request.urlretrieve(url, temp_fname)
  41. except urllib.error.HTTPError as e:
  42. print("Failed to download {url}".format(url=url))
  43. # Juvenes may fail with error code 500 if food is not available
  44. try:
  45. with open(temp_fname, "r", encoding="utf-8") as fin:
  46. jsonp = fin.read()
  47. data = json.loads(jsonp[1:-2])
  48. except OSError as e:
  49. continue
  50. if data and data["d"] != "null":
  51. data = json.loads(data["d"])
  52. cur_day_foods = []
  53. mealoptions = data["MealOptions"]
  54. for meal_info in mealoptions:
  55. cur_food = []
  56. if "ForceMajoure" in meal_info and meal_info["ForceMajoure"] != "":
  57. cur_food = [meal_info["ForceMajoure"]]
  58. else:
  59. menuitems = meal_info["MenuItems"]
  60. for food_info in menuitems:
  61. name = food_info["Name"]
  62. name = re.sub(r"^\*", "", name)
  63. if food_info["Diets"]:
  64. cur_food.append("{name} ({diets})".format(name=name, diets=food_info["Diets"]))
  65. elif name:
  66. cur_food.append(name)
  67. if cur_food != ["-"]:
  68. cur_day_foods.append("\n".join(cur_food))
  69. week_foods[weekday-1] = cur_day_foods
  70. restaurants.append([title, open_hours, week, week_foods, info])
  71. count += 1
  72. return restaurants