diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index 32fe3d80..c6db9fde 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -64,44 +64,28 @@ public final class VbbProvider implements NetworkProvider return true; } - private static final Pattern P_AUTOCOMPLETE_IS_MAST = Pattern.compile("\\d{6}"); private static final String AUTOCOMPLETE_NAME_URL = "http://mobil.bvg.de/Fahrinfo/bin/stboard.bin/dox/dox?input="; - private static final Pattern P_SINGLE_NAME = Pattern.compile(".*Haltestelleninfo.*?(.*?).*", Pattern.DOTALL); + private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?Haltestelleninfo.*?(.*?).*?input=(\\d+)&.*?", Pattern.DOTALL); private static final Pattern P_MULTI_NAME = Pattern.compile("\\s*(.*?)\\s*", Pattern.DOTALL); - private static final String AUTOCOMPLETE_MASTID_URL = "http://mobil.bvg.de/IstAbfahrtzeiten/index/mobil?input="; - private static final Pattern P_SINGLE_MASTID = Pattern.compile(".*Ist-Abfahrtzeiten.*?(.*?).*", Pattern.DOTALL); public List autocompleteStations(final CharSequence constraint) throws IOException { final List results = new ArrayList(); - if (P_AUTOCOMPLETE_IS_MAST.matcher(constraint).matches()) - { - final CharSequence page = ParserUtils.scrape(AUTOCOMPLETE_MASTID_URL + ParserUtils.urlEncode(constraint.toString())); + final CharSequence page = ParserUtils.scrape(AUTOCOMPLETE_NAME_URL + ParserUtils.urlEncode(constraint.toString())); - final Matcher mSingle = P_SINGLE_MASTID.matcher(page); - if (mSingle.matches()) - { - results.add(new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mSingle.group(1)))); - } + final Matcher mSingle = P_SINGLE_NAME.matcher(page); + if (mSingle.matches()) + { + results.add(new Location(LocationType.STATION, Integer.parseInt(mSingle.group(2)), 0, 0, ParserUtils.resolveEntities(mSingle.group(1)))); } else { - final CharSequence page = ParserUtils.scrape(AUTOCOMPLETE_NAME_URL + ParserUtils.urlEncode(constraint.toString())); - - final Matcher mSingle = P_SINGLE_NAME.matcher(page); - if (mSingle.matches()) - { - results.add(new Location(LocationType.ANY, 0, 0, 0, ParserUtils.resolveEntities(mSingle.group(1)))); - } - else - { - final Matcher mMulti = P_MULTI_NAME.matcher(page); - while (mMulti.find()) - results.add(new Location(LocationType.STATION, Integer.parseInt(mMulti.group(1)), 0, 0, ParserUtils.resolveEntities(mMulti - .group(2)))); - } + final Matcher mMulti = P_MULTI_NAME.matcher(page); + while (mMulti.find()) + results + .add(new Location(LocationType.STATION, Integer.parseInt(mMulti.group(1)), 0, 0, ParserUtils.resolveEntities(mMulti.group(2)))); } return results;