diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java
index eebaceee..36cc4438 100644
--- a/src/de/schildbach/pte/BahnProvider.java
+++ b/src/de/schildbach/pte/BahnProvider.java
@@ -413,10 +413,16 @@ public final class BahnProvider implements NetworkProvider
private static final Pattern P_DEPARTURES_COARSE = Pattern.compile("
(.+?)
", Pattern.DOTALL);
private static final Pattern P_DEPARTURES_FINE = Pattern.compile(".*?(.*?).*?"
+ ">>\\n?\\s*(.+?)\\s*\\n?
\\n?(\\d+:\\d+).*?", Pattern.DOTALL);
+ private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
+
+ final Matcher mStationId = P_DEPARTURES_URI_STATION_ID.matcher(uri);
+ if (!mStationId.find())
+ throw new IllegalStateException(uri);
+ final int stationId = Integer.parseInt(mStationId.group(1));
// parse page
final Matcher mHead = P_DEPARTURES_HEAD.matcher(page);
@@ -443,7 +449,7 @@ public final class BahnProvider implements NetworkProvider
}
}
- return new QueryDeparturesResult(uri, location, currentTime, departures);
+ return new QueryDeparturesResult(uri, stationId, location, currentTime, departures);
}
else
{
diff --git a/src/de/schildbach/pte/MvvProvider.java b/src/de/schildbach/pte/MvvProvider.java
index 845dd05a..410878ea 100644
--- a/src/de/schildbach/pte/MvvProvider.java
+++ b/src/de/schildbach/pte/MvvProvider.java
@@ -474,11 +474,17 @@ public class MvvProvider implements NetworkProvider
+ "\\s*([^<]*?)[\\xa0\\s]*(?:.*?)?" // line
+ " \\s*(.*?)\\s* .*?" // destination
+ " | .*?", Pattern.DOTALL);
+ private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("nameInfo_dm=(\\d+)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
+ final Matcher mStationId = P_DEPARTURES_URI_STATION_ID.matcher(uri);
+ if (!mStationId.find())
+ throw new IllegalStateException(uri);
+ final int stationId = Integer.parseInt(mStationId.group(1));
+
final Matcher mHead = P_DEPARTURES_HEAD.matcher(page);
if (mHead.matches())
{
@@ -514,7 +520,7 @@ public class MvvProvider implements NetworkProvider
}
}
- return new QueryDeparturesResult(uri, location, currentTime, departures);
+ return new QueryDeparturesResult(uri, stationId, location, currentTime, departures);
}
else
{
diff --git a/src/de/schildbach/pte/QueryDeparturesResult.java b/src/de/schildbach/pte/QueryDeparturesResult.java
index 57541ac4..df7e8d87 100644
--- a/src/de/schildbach/pte/QueryDeparturesResult.java
+++ b/src/de/schildbach/pte/QueryDeparturesResult.java
@@ -25,17 +25,20 @@ import java.util.List;
*/
public final class QueryDeparturesResult
{
- public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, null, null, null);
- public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, null, null, null);
+ public static final QueryDeparturesResult NO_INFO = new QueryDeparturesResult(null, 0, null, null, null);
+ public static final QueryDeparturesResult SERVICE_DOWN = new QueryDeparturesResult(null, 0, null, null, null);
public final String uri;
+ public final int locationId;
public final String location;
public final Date currentTime;
public final List departures;
- public QueryDeparturesResult(final String uri, final String location, final Date currentTime, final List departures)
+ public QueryDeparturesResult(final String uri, final int locationId, final String location, final Date currentTime,
+ final List departures)
{
this.uri = uri;
+ this.locationId = locationId;
this.location = location;
this.currentTime = currentTime;
this.departures = departures;
diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java
index 533cdc3a..890b285e 100644
--- a/src/de/schildbach/pte/RmvProvider.java
+++ b/src/de/schildbach/pte/RmvProvider.java
@@ -387,11 +387,17 @@ public class RmvProvider implements NetworkProvider
+ "
.*?" //
+ "(\\d+:\\d+).*?" // time
+ "(?:Gl\\. (\\d+)
.*?)?", Pattern.DOTALL);
+ private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
+ final Matcher mStationId = P_DEPARTURES_URI_STATION_ID.matcher(uri);
+ if (!mStationId.find())
+ throw new IllegalStateException(uri);
+ final int stationId = Integer.parseInt(mStationId.group(1));
+
// parse page
final Matcher mHead = P_DEPARTURES_HEAD.matcher(page);
if (mHead.matches())
@@ -417,7 +423,7 @@ public class RmvProvider implements NetworkProvider
}
}
- return new QueryDeparturesResult(uri, location, currentTime, departures);
+ return new QueryDeparturesResult(uri, stationId, location, currentTime, departures);
}
else
{
diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java
index 5e00531d..b42b1339 100644
--- a/src/de/schildbach/pte/VbbProvider.java
+++ b/src/de/schildbach/pte/VbbProvider.java
@@ -401,11 +401,17 @@ public final class VbbProvider implements NetworkProvider
+ "\\s*\\s*(.*?)[\\s\\*]*.*? | \\s*" //
+ "\\s*\\s*(.*?)\\s*\\s* | ", Pattern.DOTALL);
private static final Pattern P_DEPARTURES_SERVICE_DOWN = Pattern.compile("Wartungsarbeiten");
+ private static final Pattern P_DEPARTURES_URI_STATION_ID = Pattern.compile("input=(\\d+)");
public QueryDeparturesResult queryDepartures(final String uri) throws IOException
{
final CharSequence page = ParserUtils.scrape(uri);
+ final Matcher mStationId = P_DEPARTURES_URI_STATION_ID.matcher(uri);
+ if (!mStationId.find())
+ throw new IllegalStateException(uri);
+ final int stationId = Integer.parseInt(mStationId.group(1));
+
if (P_DEPARTURES_SERVICE_DOWN.matcher(page).find())
return QueryDeparturesResult.SERVICE_DOWN;
@@ -435,7 +441,7 @@ public final class VbbProvider implements NetworkProvider
}
}
- return new QueryDeparturesResult(uri, location, currentTime, departures);
+ return new QueryDeparturesResult(uri, stationId, location, currentTime, departures);
}
else
{