package de.htwdd.classes; import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import de.htwdd.types.Meal; public class Mensa { short MensaID = 9; public Meal[] Food; //Standardkonstruktor public Mensa(){ } public Mensa(short _MensaID) { MensaID=_MensaID; } // Lade Essen von der Mensa public void getDataCurrentDay() { ArrayList<Meal> food = new ArrayList<Meal>(); Pattern pattern = Pattern.compile(".*?<item>.*?<title>(.*?)( \\((.*?)\\))?</title>.*?details-(\\d*).html</link>.*?</item>"); Matcher matcher; HTTPDownloader downloader = new HTTPDownloader("http://www.studentenwerk-dresden.de/feeds/speiseplan.rss?mid=" + MensaID); String result = downloader.getString(); // Prüfe ob Downloader ein Ergebnis zurückgibt if (result == null) { Food = new Meal[1]; Food[0] = new Meal(); Food[0].Title = "Keine Internetverbindung!"; return; } matcher = pattern.matcher(result); while (matcher.find()) { Meal meal = new Meal(); try { meal.Title = matcher.group(1); meal.Price = matcher.group(3); meal.ID = Integer.parseInt(matcher.group(4)); } catch (Exception e) { meal.Title = "Fehler im Parser"; } food.add(meal); } Food = food.toArray(new Meal[food.size()]); } /** * Speichert das Essen von dem entsprechendem Tag der übergebenen Woche in der Klassenvariable Food. * Es kann dabei nur das Essen von der aktuellen oder der nächste Woche geparst werden * * @param day Wochentag von welchem das Essen geparst werden soll * @param week Kalenderwoche von welcher das Essen geparst werden soll (nur aktuelle oder nächste Woche möglich) */ public void getDataDay(int day, int week) { HTTPDownloader downloader; ArrayList<Meal> arrayList = new ArrayList<Meal>(); Pattern pattern = Pattern.compile(".*?<td class=\"text\">(.*?)</td>.*?>(\\d?\\d,\\d\\d|ausverkauft| )"); if (week <= Calendar.getInstance(Locale.GERMANY).get(Calendar.WEEK_OF_YEAR)) downloader = new HTTPDownloader("http://www.studentenwerk-dresden.de/mensen/speiseplan/mensa-reichenbachstrasse.html?print=1"); else downloader = new HTTPDownloader("http://www.studentenwerk-dresden.de/mensen/speiseplan/mensa-reichenbachstrasse-w1.html?print=1"); String result = downloader.getString(); // Prüfe ob Downloader ein Ergebnis zurückgibt if (result == null) { Food = new Meal[1]; Food[0] = new Meal(); Food[0].Title = "Keine Internetverbindung!"; return; } // Teile Speiseplan in einzelne Tage und übergebe entsprechenden Tag an Matcher String token[] = result.split("class=\"speiseplan\""); Matcher matcher = pattern.matcher(token[day-1]); // Suche die einzelnen Speisen while (matcher.find()) { Meal meal = new Meal(); try { meal.Title = matcher.group(1); if (!matcher.group(2).equals("ausverkauft")) meal.Price = matcher.group(2)+" €"; else meal.Price = "aus."; } catch (Exception e) { meal.Title = "Fehler im Parser"; } arrayList.add(meal); } Food = arrayList.toArray(new Meal[arrayList.size()]); } public void getDataWeek() { String result; String token[]; final String[] nameOfDays = DateFormatSymbols.getInstance().getWeekdays(); Pattern title = Pattern.compile(".*?<td class=\"text\">(.*?)</td>.*?"); Matcher matcher; try { HTTPDownloader downloader = new HTTPDownloader("http://www.studentenwerk-dresden.de/mensen/speiseplan/mensa-reichenbachstrasse.html?print=1"); result = downloader.getString(); token = result.split("class=\"speiseplan\""); Food = new Meal[5]; // Gehe Montag bis Freitag durch for (int i = 0; i < 5; i++) { Food[i] = new Meal(); Food[i].Price = ""; Food[i].Title = nameOfDays[i+2]; // Extrahiere die benötigten Informationen try { // Title matcher = title.matcher(token[i+1]); while (matcher.find()) { Food[i].Price += matcher.group(1)+"\n\n"; } } catch (Exception e) { Food[i].Title = "Fehler im Parser"; } } } catch (Exception e) { Food = new Meal[1]; Food[0] = new Meal(); Food[0].Title = "Keine Internetverbindung!"; } } // Lade Vorschaubilder zu den Mahlzeiten public void getThumbnail() { Calendar rightNow = Calendar.getInstance(); for (Meal i : Food) { String url = "http://bilderspeiseplan.studentenwerk-dresden.de/m" + MensaID + "/"+rightNow.get(Calendar.YEAR)+String.format("%02d",rightNow.get(Calendar.MONTH)+1)+"/thumbs/"+i.ID+".jpg"; HTTPDownloader downloader = new HTTPDownloader(url); i.Thumbnail = downloader.getBitmap(); } } }