PNA.fi koodi

amica.pl 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. use vars qw(@day_names);
  2. use JSON;
  3. my @restaurant_info = (
  4. [ "(TaY) Amica Minerva", "http://www.amica.fi/minerva", "", "middle", "http://www.amica.fi/api/restaurant/menu/week?language=fi&restaurantPageId=7381" ],
  5. [ "(TTY) Ravintola Reaktori", "http://www.amica.fi/reaktori", "", "middle", "http://www.amica.fi/api/restaurant/menu/week?language=fi&restaurantPageId=69171" ]
  6. );
  7. sub utf8_to_8859 {
  8. $_ = shift;
  9. s/ä/ä/g;
  10. s/ö/ö/g;
  11. s/Ä/Ä/g;
  12. s/Ö/Ö/g;
  13. return $_;
  14. }
  15. sub parse_amica {
  16. my ($fname, $info_ref) = @_;
  17. open(FILE, $fname);
  18. my $json = do { local $/; <FILE> };
  19. close(FILE);
  20. my $title = @{$info_ref}[0];
  21. my $week = `date +%V`;
  22. my @cur_day_foods = ();
  23. my @week_foods = ();
  24. my $data = from_json($json);
  25. my $LunchMenus = $data->{'LunchMenus'};
  26. foreach my $LunchMenu (@$LunchMenus) {
  27. my $SetMenus = $LunchMenu->{'SetMenus'};
  28. my $Html = $LunchMenu->{'Html'};
  29. if (length($Html) > 0) {
  30. print "Doing html\n";
  31. my @Menus = split('<p>', $Html);
  32. print "SetMenus" . @Menus . "\n";
  33. foreach my $SetMenu (@Menus) {
  34. my @Meals = split('<br />', $SetMenu);
  35. foreach my $Meal (@Meals) {
  36. my @parts = split('\\(', $Meal);
  37. $cur_food .= "\n" if $cur_food ne "";
  38. $cur_food .= @parts[0];
  39. my @Diets = split(",\s*", substr(@parts[1], 0, index(@parts[1], ')')));
  40. $cur_food .= ' (' . join(', ', @Diets) . ')' if @Diets;
  41. }
  42. push @cur_day_foods, utf8_to_8859($cur_food) if ($cur_food ne "");
  43. $cur_food = "";
  44. }
  45. } else {
  46. foreach my $SetMenu (@$SetMenus) {
  47. my $Meals = $SetMenu->{'Meals'};
  48. foreach my $Meal (@$Meals) {
  49. $cur_food .= "\n" if $cur_food ne "";
  50. $cur_food .= $Meal->{'Name'};
  51. my $Diets = $Meal->{'Diets'};
  52. $cur_food .= ' (' . join(', ', @$Diets) . ')';
  53. }
  54. push @cur_day_foods, utf8_to_8859($cur_food) if ($cur_food ne "");
  55. $cur_food = "";
  56. }
  57. }
  58. push @week_foods, [@cur_day_foods];
  59. @cur_day_foods = ();
  60. }
  61. return [ $title, "", $week, [ @week_foods ], $info_ref ];
  62. }
  63. sub get_amica_restaurant {
  64. my $use_old = shift;
  65. my $count = 0;
  66. my @restaurants = ();
  67. my $weekDay = `date +%w`;
  68. chomp($weekDay);
  69. my $first_day = $weekDay == 1
  70. ? `date --date="today" +%Y-%m-%d`
  71. : `date --date="last monday" +%Y-%m-%d`;
  72. chomp($first_day);
  73. my $last_day = $weekDay == 0
  74. ? `date --date="today" +%Y-%m-%d`
  75. : `date --date="next sunday" +%Y-%m-%d`;
  76. chomp($last_day);
  77. foreach my $i (@restaurant_info) {
  78. my @info = @{$i};
  79. my $temp_fname = "amica$count.temp.html";
  80. my $url = "${info[4]}&weekDate=$first_day";
  81. if (!-f $temp_fname || !$use_old) {
  82. system("wget -q --timeout=10 -O $temp_fname.tmp '$url' && mv $temp_fname.tmp $temp_fname") if ($url ne "");
  83. }
  84. if (-f $temp_fname) {
  85. $info[4] = $url;
  86. push @restaurants, parse_amica($temp_fname, \@info);
  87. }
  88. $count++;
  89. }
  90. return @restaurants;
  91. }
  92. 1;