PNA.fi koodi

juvenes.pl 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. use vars qw(@day_names);
  2. use JSON;
  3. my $pinni_title = "(TaY) Café Pinni";
  4. my $bio_title = "(TAYS) Bio";
  5. my $kliininen_title = "(TAYS) Arvo";
  6. my $kliininen_fusion_title = "(TAYS) Arvo Fusion Kitchen";
  7. my $zip_salaattibaari_title = "(TTY) Zip Salaattibaari";
  8. # last two in order are $kitchen_info_id, $menu_type_id
  9. my @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 / Rohee Xtra", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola/roheextra.aspx", "M", "left", 13, 74 ],
  12. [ "(TaY) Yliopiston Ravintola / Salaattibaari", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola/salaattibaari.aspx", "", "left", 13, 5 ],
  13. [ "(TaY) Fusion Kitchen", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/yliopistonravintola/fusionkitchen.aspx", "", "left", 13, 3 ],
  14. [ $pinni_title, "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/tayp%C3%A4%C3%A4kampus/caf%C3%A9lunchpinni.aspx", "M", "middle", 130016, 60 ],
  15. [ $bio_title, "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/medicabio.aspx", "M", "left", 5, 60 ],
  16. [ $kliininen_title, "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/medicaarvo.aspx", "M", "left", 50026, 60 ],
  17. [ $kliininen_fusion_title, "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/taykaupinkampus/medicaarvo/fusionkitchen.aspx", "M", "left", 50026, 3 ],
  18. [ "(TTY) Newton", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/newton.aspx", "", "left", 6, 60],
  19. [ "(TTY) Newton / Rohee Xtra", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/newton/roheextra.aspx", "", "left", 6, 74],
  20. [ "(TTY) Fusion Kitchen", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/opiskelijaravintolat/ttykampus/newton/fusionkitchen.aspx", "", "left", 6, 3 ],
  21. [ "(TAMK) Ziberia", "http://www.juvenes.fi/fi-fi/ravintolatjakahvilat/henkil%C3%B6st%C3%B6ravintolat/ziberia.aspx", "", "middle", 11, 60 ]
  22. );
  23. my @restaurants;
  24. my ($open_hours, $day_id, $cur_title);
  25. my ($cur_food, @cur_day_foods, @week_foods);
  26. sub finish_food {
  27. chomp $cur_food;
  28. if ($cur_food =~ /Liha paniini.*tai Kasvis paniini/i && $cur_title eq $pinni_title) {
  29. # you get this every day, ignore
  30. } else {
  31. push @cur_day_foods, utf8_to_8859($cur_food) if ($cur_food ne "");
  32. }
  33. $cur_food = "";
  34. }
  35. sub finish_day {
  36. push @week_foods, [@cur_day_foods];
  37. @cur_day_foods = ();
  38. $day_id = $day_id + 1;
  39. }
  40. sub can_merge_bio_kliininen {
  41. my $day = shift;
  42. my $bio_foods = "";
  43. my $kliininen_foods = "";
  44. my $food_dest;
  45. foreach my $r (@restaurants) {
  46. my ($title, $open_hours, $week, $week_foods_ref) = @{$r};
  47. if ($title eq $bio_title) {
  48. $food_dest = \$bio_foods;
  49. } elsif ($title eq $kliininen_title) {
  50. $food_dest = \$kliininen_foods;
  51. } else {
  52. next;
  53. }
  54. my @week_foods = @{$week_foods_ref};
  55. foreach my $food (@{$week_foods[$day]}) {
  56. ${$food_dest} .= "$food\n";
  57. }
  58. }
  59. return $bio_foods eq $kliininen_foods;
  60. }
  61. sub try_merge_bio_kliininen {
  62. my ($title_ref, $day) = @_;
  63. my $title = $$title_ref;
  64. if ($title eq $bio_title && can_merge_bio_kliininen($day)) {
  65. $$title_ref .= " + Kliininen";
  66. } elsif ($title eq $kliininen_title && can_merge_bio_kliininen($day)) {
  67. return 1;
  68. }
  69. return 0;
  70. }
  71. sub get_juvenes_restaurants {
  72. my $use_old = shift;
  73. my $count = 0;
  74. # Loops restraurants
  75. foreach my $i (@restaurant_info) {
  76. my @info = @{$i};
  77. my $kitchen = $info[4];
  78. my $menutype = $info[5];
  79. $title = $info[0];
  80. $cur_title = $title;
  81. $open_hours = "";
  82. @week_foods = ();
  83. my $week = `date +%V`;
  84. chomp($week);
  85. # Loop weekdays
  86. for (my $weekday = 1; $weekday < 7; $weekday++) {
  87. my $temp_fname = "juvenes$count-$weekday.temp.js";
  88. my $url = "http://www.juvenes.fi/DesktopModules/Talents.LunchMenu/LunchMenuServices.asmx/GetMenuByWeekday?KitchenId=$kitchen&MenuTypeId=$menutype&Week=$week&Weekday=$weekday&lang='fi'&format=json";
  89. if (!-f $temp_fname || !$use_old) {
  90. system("rm -f $temp_fname && wget -q --timeout=10 -O $temp_fname.tmp \"$url\" && mv $temp_fname.tmp $temp_fname");
  91. }
  92. if (-f $temp_fname) {
  93. open(FILE, $temp_fname);
  94. my $jsonp = do { local $/; <FILE> };
  95. close(FILE);
  96. # the file is encapsulated in ({"d": json}); so we have to double parse it
  97. my $data = from_json(substr($jsonp, 1, -2));
  98. unless ($data->{'d'} eq 'null') {
  99. $data = from_json($data->{'d'});
  100. my $mealoptions = $data->{'MealOptions'};
  101. # loop different meals
  102. foreach my $meal_info (@$mealoptions) {
  103. if ($meal_info->{'ForceMajeure'} ne '') {
  104. $cur_food = $meal_info->{'ForceMajeure'};
  105. } else {
  106. my $menuitems = $meal_info->{'MenuItems'};
  107. # loops different foods in a meal
  108. foreach my $food_info (@$menuitems) {
  109. $cur_food .= "\n" if $cur_food ne "";
  110. my $name = $food_info->{'Name'};
  111. $name =~ s/^\*//;
  112. $cur_food .= $name;
  113. $cur_food .= " (" . $food_info->{'Diets'} . ")" if $food_info->{'Diets'};
  114. }
  115. }
  116. if ($cur_food ne "-") {
  117. finish_food();
  118. } else {
  119. $cur_food = "";
  120. }
  121. }
  122. }
  123. finish_day();
  124. }
  125. }
  126. push @restaurants, [ $title, $open_hours, $week, [ @week_foods ], \@info ];
  127. $count++;
  128. }
  129. return @restaurants;
  130. }
  131. 1;