From 3bca82d3c36a824d74b2815f1dbf00c7a02c41f5 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach" Date: Tue, 21 Sep 2010 07:57:05 +0000 Subject: [PATCH] =?UTF-8?q?fixed=20=C3=B6bb=20changed=20ld=3Dweb25=20to=20?= =?UTF-8?q?web05?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@173 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- src/de/schildbach/pte/OebbProvider.java | 25 +++++---- test/de/schildbach/pte/OebbProviderTest.java | 53 ++++++++++++++++++++ 2 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 test/de/schildbach/pte/OebbProviderTest.java diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index c328a038..9d6254a7 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -115,7 +115,7 @@ public class OebbProvider implements NetworkProvider final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); final StringBuilder uri = new StringBuilder(); - uri.append("http://fahrplan.oebb.at/bin/query.exe/dn?ld=web25&OK"); + uri.append("http://fahrplan.oebb.at/bin/query.exe/dn?ld=web05&OK"); uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); @@ -449,15 +449,15 @@ public class OebbProvider implements NetworkProvider + "Abfahrt (\\d+:\\d+).*?" // time + "%23(\\d+)&.*?" // locationId , Pattern.DOTALL); - private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("(.*?)", Pattern.DOTALL); - private static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?" // - + "(\\d{1,2}:\\d{2})\n" // plannedTime - + "(?:\n" // + private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("\n(.*?)", Pattern.DOTALL); + static final Pattern P_DEPARTURES_FINE = Pattern.compile("" // + + "(\\d{1,2}:\\d{2})\n.*?" // plannedTime + + "(?:\n" // + "(?: |(pünktlich|\\d{1,2}:\\d{2}))\n\n" // predictedTime + ")?.*?" // - + "\\s*(.*?)\\s*\\s*(.*?)\\s*\n" // - + "" // destinationId + + "" // destinationId + "\\s*(.*?)\\s*\n" // destination + ".*?" // + "(?:\n(" + ParserUtils.P_PLATFORM + ").*?)?" // position @@ -488,11 +488,18 @@ public class OebbProvider implements NetworkProvider .parseTime(mHeadFine.group(3))); final int stationId = Integer.parseInt(mHeadFine.group(4)); final List departures = new ArrayList(8); + String oldZebra = null; final Matcher mDepCoarse = P_DEPARTURES_COARSE.matcher(mHeadCoarse.group(2)); while (mDepCoarse.find()) { - final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(1)); + final String zebra = mDepCoarse.group(1); + if (oldZebra != null && zebra.equals(oldZebra)) + throw new IllegalArgumentException("missed row? last:" + zebra); + else + oldZebra = zebra; + + final Matcher mDepFine = P_DEPARTURES_FINE.matcher(mDepCoarse.group(2)); if (mDepFine.matches()) { final Calendar current = new GregorianCalendar(); @@ -535,7 +542,7 @@ public class OebbProvider implements NetworkProvider } else { - throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(1) + "' on " + uri); + throw new IllegalArgumentException("cannot parse '" + mDepCoarse.group(2) + "' on " + uri); } } diff --git a/test/de/schildbach/pte/OebbProviderTest.java b/test/de/schildbach/pte/OebbProviderTest.java new file mode 100644 index 00000000..c3f3701c --- /dev/null +++ b/test/de/schildbach/pte/OebbProviderTest.java @@ -0,0 +1,53 @@ +package de.schildbach.pte; + +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import java.util.regex.Matcher; + +import org.junit.Test; + +public class OebbProviderTest +{ + @Test + public void testDepartures() + { + assertFineDepartures("" // + + "09:12\n" // + + "\n" // + + "\"Bus Bus 16A\n" // + + "\n" // + + "\n" // + + "\n" // + + "\n" // + + "Wien Hetzendorf Bahnhst\n" // + + "\n" // + + "\n" // + + "
\n" // + + "\n" // + + "Wien Breitenfurter Straße/Hetzendorfer Straße\n" // + + "\n" // + + "09:12\n" // + + "-\n" // + + "\n" // + + "Wien Hetzendorf Bahnhst (Eckartsaugasse)\n" // + + "\n" // + + "09:13\n" // + + "\n"); + } + + private Matcher assertFineDepartures(String s) + { + Matcher m = OebbProvider.P_DEPARTURES_FINE.matcher(s); + assertTrue(m.matches()); + + // ParserUtils.printGroups(m); + + assertNotNull(m.group(1)); // time + assertNotNull(m.group(3)); // lineType + assertNotNull(m.group(4)); // line + assertNotNull(m.group(6)); // destination + + return m; + } +}