PNA.fi koodi

juvenes.py 4.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # encoding: UTF-8
  2. import pnalib
  3. import datetime
  4. import re
  5. import json
  6. # Last three columns are Kitchen Info ID, Menu Type ID and Concept ID. There may be multiple concepts in a single restauranta.
  7. # Juvenes API defines also Restaurant ID but that is not used.
  8. restaurant_info = [
  9. [ "(TaY) Yliopiston Ravintola", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola.aspx", "M", "left", 13, 60, []],
  10. [ "(TaY) Yliopiston Ravintola / VegeBar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola.aspx", "", "left", 13, 5, []],
  11. [ "(TaY) Café Campus", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/caf%C3%A9campus.aspx", "", "left", 130019, 23, []],
  12. [ "(TaY) Café Pinni", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/caf%C3%A9lunchpinni.aspx", "M", "middle", 130016, 60, []],
  13. [ "(TAYS) Arvo", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/arvo.aspx", "M", "left", 5, 60, []],
  14. [ "(TAYS) Café Lea (Fusion Kitchen)", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/cafélea.aspx", "M", "left", 50026, 3, []],
  15. [ "(TAYS) Café Lea (My Salad)", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/cafélea.aspx", "M", "left", 50026, 76, []],
  16. [ "(TTY) Newton", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/newton.aspx", "", "left", 6, 60, [1149]],
  17. [ "(TTY) Café Konehuone / Såås bar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/caf%C3%A9konehuone.aspx", "", "left", 60038, 77, [3663]],
  18. [ "(TTY) Café Konehuone / Fusion Kitchen", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/caf%C3%A9konehuone.aspx", "", "middle", 60038, 3, [1674]],
  19. [ "(TAMK) Ziberia", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/ziberia.aspx", "", "middle", 11, 60, []],
  20. [ "(TAMK) Frenckell / Såås bar", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/frenckell.aspx", "", "middle", 33, 77, []]
  21. ]
  22. def get_restaurants(use_old, week):
  23. restaurants = []
  24. for count, info in enumerate(restaurant_info):
  25. kitchen = info[4]
  26. menutype = info[5]
  27. concepts = info[6]
  28. title = info[0]
  29. cur_title = title
  30. open_hours = ""
  31. exception = None
  32. week_foods = {}
  33. for weekday in range(1,7):
  34. 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)
  35. temp_fname = "juvenes_{count}-{weekday}.temp.js".format(count=count, weekday=weekday)
  36. data = pnalib.get_jsonp_file(url, temp_fname, use_old, allow_old=False)
  37. if not data:
  38. # Try to find problem
  39. for concept in concepts:
  40. url = "http://www.juvenes.fi/DesktopModules/Talents.Restaurants/RestaurantsService.svc/GetConcept?menuId={concept}&lang=fi".format(concept=concept)
  41. temp_fname = "juvenes_{count}-{weekday}-{concept}.temp.js".format(count=count, weekday=weekday, concept=concept)
  42. data = pnalib.get_json_file(url, temp_fname, use_old, allow_old=False)
  43. if data and data["d"]:
  44. exception = data["d"]["OpenInfo"]["Exeption1InfoText"]
  45. elif data and data["d"] != "null":
  46. data = json.loads(data["d"])
  47. cur_day_foods = []
  48. mealoptions = data["MealOptions"]
  49. for meal_info in mealoptions:
  50. cur_food = []
  51. if "ForceMajoure" in meal_info and meal_info["ForceMajoure"] != "":
  52. cur_food = [meal_info["ForceMajoure"]]
  53. else:
  54. menuitems = meal_info["MenuItems"]
  55. for food_info in menuitems:
  56. name = food_info["Name"]
  57. name = re.sub(r"^\*", "", name)
  58. if food_info["Diets"]:
  59. cur_food.append("{name} ({diets})".format(name=name, diets=food_info["Diets"]))
  60. elif name:
  61. cur_food.append(name)
  62. if cur_food != ["-"]:
  63. cur_day_foods.append("\n".join(cur_food))
  64. week_foods[weekday-1] = cur_day_foods
  65. restaurants.append([title, open_hours, week, week_foods, info, exception])
  66. return restaurants