additional query parameter for Berlin/Brandenburg

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@564 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach@gmail.com 2011-04-15 14:08:46 +00:00
parent ea75eccdb9
commit 65dec1fceb
2 changed files with 20 additions and 6 deletions

View file

@ -59,9 +59,13 @@ public final class BvgProvider extends AbstractHafasProvider
private static final String BASE_URL = "http://mobil.bvg.de"; private static final String BASE_URL = "http://mobil.bvg.de";
private static final String API_BASE = BASE_URL + "/Fahrinfo/bin/"; private static final String API_BASE = BASE_URL + "/Fahrinfo/bin/";
public BvgProvider() private final String additionalQueryParameter;
public BvgProvider(final String additionalQueryParameter)
{ {
super(null, null); super(null, null);
this.additionalQueryParameter = additionalQueryParameter;
} }
public NetworkId id() public NetworkId id()
@ -78,7 +82,6 @@ public final class BvgProvider extends AbstractHafasProvider
return true; return true;
} }
private static final String AUTOCOMPLETE_NAME_URL = API_BASE + "stboard.bin/dox/dox?input=%s";
private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?Haltestelleninfo.*?<strong>(.*?)</strong>.*?input=(\\d+)&.*?", Pattern.DOTALL); private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?Haltestelleninfo.*?<strong>(.*?)</strong>.*?input=(\\d+)&.*?", Pattern.DOTALL);
private static final Pattern P_MULTI_NAME = Pattern.compile("<a href=\\\"/Fahrinfo/bin/stboard\\.bin/dox.*?input=(\\d+)&.*?\">\\s*(.*?)\\s*</a>", private static final Pattern P_MULTI_NAME = Pattern.compile("<a href=\\\"/Fahrinfo/bin/stboard\\.bin/dox.*?input=(\\d+)&.*?\">\\s*(.*?)\\s*</a>",
Pattern.DOTALL); Pattern.DOTALL);
@ -86,10 +89,14 @@ public final class BvgProvider extends AbstractHafasProvider
@Override @Override
public List<Location> autocompleteStations(final CharSequence constraint) throws IOException public List<Location> autocompleteStations(final CharSequence constraint) throws IOException
{ {
final List<Location> results = new ArrayList<Location>(); final StringBuilder uri = new StringBuilder(API_BASE).append("stboard.bin/dox/dox");
uri.append("?input=").append(ParserUtils.urlEncode(constraint.toString()));
if (additionalQueryParameter != null)
uri.append('&').append(additionalQueryParameter);
final String uri = String.format(AUTOCOMPLETE_NAME_URL, ParserUtils.urlEncode(constraint.toString())); final CharSequence page = ParserUtils.scrape(uri.toString());
final CharSequence page = ParserUtils.scrape(uri);
final List<Location> results = new ArrayList<Location>();
final Matcher mSingle = P_SINGLE_NAME.matcher(page); final Matcher mSingle = P_SINGLE_NAME.matcher(page);
if (mSingle.matches()) if (mSingle.matches())
@ -271,6 +278,9 @@ public final class BvgProvider extends AbstractHafasProvider
// TODO Ruftaxi wäre wohl &REQ0JourneyProduct_prod_section_0_7=1 // TODO Ruftaxi wäre wohl &REQ0JourneyProduct_prod_section_0_7=1
} }
if (additionalQueryParameter != null)
uri.append('&').append(additionalQueryParameter);
return uri.toString(); return uri.toString();
} }
@ -627,6 +637,8 @@ public final class BvgProvider extends AbstractHafasProvider
final StringBuilder uri = new StringBuilder(); final StringBuilder uri = new StringBuilder();
uri.append(DEPARTURE_URL_LIVE); uri.append(DEPARTURE_URL_LIVE);
uri.append("input=").append(stationId); uri.append("input=").append(stationId);
if (additionalQueryParameter != null)
uri.append('&').append(additionalQueryParameter);
return uri.toString(); return uri.toString();
} }
@ -638,6 +650,8 @@ public final class BvgProvider extends AbstractHafasProvider
uri.append(DEPARTURE_URL_PLAN); uri.append(DEPARTURE_URL_PLAN);
uri.append("input=").append(stationId); uri.append("input=").append(stationId);
uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 50); uri.append("&maxJourneys=").append(maxDepartures != 0 ? maxDepartures : 50);
if (additionalQueryParameter != null)
uri.append('&').append(additionalQueryParameter);
return uri.toString(); return uri.toString();
} }

View file

@ -35,7 +35,7 @@ import de.schildbach.pte.dto.QueryDeparturesResult;
*/ */
public class BvgProviderLiveTest public class BvgProviderLiveTest
{ {
private BvgProvider provider = new BvgProvider(); private BvgProvider provider = new BvgProvider(null);
private static final String ALL_PRODUCTS = "IRSUTBFC"; private static final String ALL_PRODUCTS = "IRSUTBFC";
@Test @Test