diff --git a/build.gradle b/build.gradle index 82950ee..8656929 100644 --- a/build.gradle +++ b/build.gradle @@ -25,11 +25,11 @@ dependencies { compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0' compile 'com.github.stupacki:MultiFunctions:1.1.2' - compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" } buildscript { - ext.kotlin_version = '1.1.3-2' + ext.kotlin_version = '1.2.41' repositories { mavenCentral() jcenter() diff --git a/src/main/java/com/dyrosoft/kvbparser/api/ApiProvider.kt b/src/main/java/com/dyrosoft/kvbparser/api/ApiProvider.kt index 6cd6f7f..809dceb 100644 --- a/src/main/java/com/dyrosoft/kvbparser/api/ApiProvider.kt +++ b/src/main/java/com/dyrosoft/kvbparser/api/ApiProvider.kt @@ -11,7 +11,6 @@ internal object ApiProvider { private class HeaderInterceptor : Interceptor { - @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response = chain.proceed(chain.request() .newBuilder() @@ -23,7 +22,7 @@ internal object ApiProvider { } } - private const val BASE_URL = "http://www.kvb-koeln.de/" + private const val BASE_URL = "https://www.kvb.koeln/" val kvbApi: KvbApi get() = buildRetrofit().create(KvbApi::class.java) diff --git a/src/main/java/com/dyrosoft/kvbparser/api/KvbApi.kt b/src/main/java/com/dyrosoft/kvbparser/api/KvbApi.kt index 8393a5c..93df76c 100644 --- a/src/main/java/com/dyrosoft/kvbparser/api/KvbApi.kt +++ b/src/main/java/com/dyrosoft/kvbparser/api/KvbApi.kt @@ -11,13 +11,13 @@ internal interface KvbApi { @GET("qr/{stationId}/") fun queryDepartures(@Path("stationId") stationId: String): Single> - @GET("german/hst/showline/{stationId}/{lineId}/") + @GET("haltestellen/showline/{stationId}/{lineId}/") fun queryLineDetails(@Path("stationId") stationId: String, @Path("lineId") lineId: String): Single> - @GET("german/hst/overview/{stationId}/") + @GET("haltestellen/overview/{stationId}/") fun queryStationDetail(@Path("stationId") stationId: String): Single> - @GET("german/hst/overview/") + @GET("haltestellen/overview/") fun queryStations(): Single> } diff --git a/src/main/java/com/dyrosoft/kvbparser/merger/DeparturesMergerTransformer.kt b/src/main/java/com/dyrosoft/kvbparser/merger/DeparturesMergerTransformer.kt index da8bff6..43d67e5 100644 --- a/src/main/java/com/dyrosoft/kvbparser/merger/DeparturesMergerTransformer.kt +++ b/src/main/java/com/dyrosoft/kvbparser/merger/DeparturesMergerTransformer.kt @@ -5,11 +5,10 @@ import com.dyrosoft.kvbparser.parser.DepartureInformationParserFunc import com.dyrosoft.kvbparser.parser.DeparturesParserFunc import rx.Single -internal class DeparturesMergerTransformer : Single.Transformer { +class DeparturesMergerTransformer : Single.Transformer { override fun call(htmlSingle: Single): Single { return Single.zip(htmlSingle.flatMap(DeparturesParserFunc()), - htmlSingle.flatMap(DepartureInformationParserFunc()) - ) { departures, departureInformation -> Departures(departures, departureInformation) } + htmlSingle.flatMap(DepartureInformationParserFunc())) { departures, departureInformation -> Departures(departures, departureInformation) } } } diff --git a/src/main/java/com/dyrosoft/kvbparser/parser/AbstractRxHtmlParserFunc.kt b/src/main/java/com/dyrosoft/kvbparser/parser/AbstractRxHtmlParserFunc.kt index 8857103..de05fcb 100644 --- a/src/main/java/com/dyrosoft/kvbparser/parser/AbstractRxHtmlParserFunc.kt +++ b/src/main/java/com/dyrosoft/kvbparser/parser/AbstractRxHtmlParserFunc.kt @@ -3,7 +3,7 @@ package com.dyrosoft.kvbparser.parser import rx.Single import rx.functions.Func1 -internal abstract class AbstractRxHtmlParserFunc : Func1> { +abstract class AbstractRxHtmlParserFunc : Func1> { override fun call(html: String): Single = Single.just(parse(html)) diff --git a/src/main/java/com/dyrosoft/kvbparser/parser/DepartureInformationParserFunc.kt b/src/main/java/com/dyrosoft/kvbparser/parser/DepartureInformationParserFunc.kt index b35675a..6da636f 100644 --- a/src/main/java/com/dyrosoft/kvbparser/parser/DepartureInformationParserFunc.kt +++ b/src/main/java/com/dyrosoft/kvbparser/parser/DepartureInformationParserFunc.kt @@ -3,12 +3,12 @@ package com.dyrosoft.kvbparser.parser import com.dyrosoft.kvbparser.utils.StringUtils import org.jsoup.Jsoup -internal class DepartureInformationParserFunc : AbstractRxHtmlParserFunc>() { +class DepartureInformationParserFunc : AbstractRxHtmlParserFunc>() { override fun parse(html: String): List { val list = mutableListOf() val document = Jsoup.parse(html) - val elements = document.select("table.qr_table") + val elements = document.select("table") elements[0].getElementsByTag("tr") .map { it.getElementsByTag("td") } .forEach { diff --git a/src/main/java/com/dyrosoft/kvbparser/parser/DeparturesParserFunc.kt b/src/main/java/com/dyrosoft/kvbparser/parser/DeparturesParserFunc.kt index 3482924..ae2ffff 100644 --- a/src/main/java/com/dyrosoft/kvbparser/parser/DeparturesParserFunc.kt +++ b/src/main/java/com/dyrosoft/kvbparser/parser/DeparturesParserFunc.kt @@ -6,15 +6,18 @@ import com.dyrosoft.kvbparser.utils.StringUtils import io.multifunctions.letNotNull import org.jsoup.Jsoup -internal class DeparturesParserFunc : AbstractRxHtmlParserFunc>() { +class DeparturesParserFunc : AbstractRxHtmlParserFunc>() { override fun parse(html: String): List { val list = mutableListOf() val document = Jsoup.parse(html) - val elements = document.select("table.qr_table") - elements[1].getElementsByTag("tr") - .map { it.getElementsByTag("td") } - .forEach { + val elements = document.select("table.display") + elements?.first() + ?.getElementsByTag("tbody") + ?.first() + ?.getElementsByTag("tr") + ?.map { it.getElementsByTag("td") } + ?.forEach { Triple(StringUtils.advancedTrim(it[0].text()), StringUtils.advancedTrim(it[1].text()), StringUtils.advancedTrim(it[2].text())).letNotNull { line, direction, waitTime -> diff --git a/src/main/java/com/dyrosoft/kvbparser/parser/StationLinesParserFuc.kt b/src/main/java/com/dyrosoft/kvbparser/parser/StationLinesParserFuc.kt index b76abfb..50f87e3 100644 --- a/src/main/java/com/dyrosoft/kvbparser/parser/StationLinesParserFuc.kt +++ b/src/main/java/com/dyrosoft/kvbparser/parser/StationLinesParserFuc.kt @@ -4,7 +4,7 @@ import com.dyrosoft.kvbparser.models.Line import org.jsoup.Jsoup import java.util.regex.Pattern -internal class StationLinesParserFuc : AbstractRxHtmlParserFunc>() { +class StationLinesParserFuc : AbstractRxHtmlParserFunc>() { override fun parse(html: String): List { val list = mutableListOf() @@ -17,13 +17,13 @@ internal class StationLinesParserFuc : AbstractRxHtmlParserFunc>() { continue } - val pattern = Pattern.compile("/german/hst/showline/(\\d+)/(\\d+)/") + val pattern = Pattern.compile("/haltestellen/showline/(\\d+)/(\\d+)/") val matcher = pattern.matcher(href) if (!matcher.matches()) { continue } - val temp = href.replace("/german/hst/showline/", "") + val temp = href.replace("/haltestellen/showline/", "") val id = temp.split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1] list.add(Line(id)) diff --git a/src/main/java/com/dyrosoft/kvbparser/parser/StationsParserFuc.kt b/src/main/java/com/dyrosoft/kvbparser/parser/StationsParserFuc.kt index ff8d2d2..19be9ca 100644 --- a/src/main/java/com/dyrosoft/kvbparser/parser/StationsParserFuc.kt +++ b/src/main/java/com/dyrosoft/kvbparser/parser/StationsParserFuc.kt @@ -4,7 +4,7 @@ import com.dyrosoft.kvbparser.models.Station import org.jsoup.Jsoup import java.util.regex.Pattern -internal class StationsParserFuc : AbstractRxHtmlParserFunc>() { +class StationsParserFuc : AbstractRxHtmlParserFunc>() { override fun parse(html: String): List { val list = mutableListOf() @@ -16,13 +16,13 @@ internal class StationsParserFuc : AbstractRxHtmlParserFunc>() { continue } - val pattern = Pattern.compile("/german/hst/overview/(\\d+)/") + val pattern = Pattern.compile("/haltestellen/overview/(\\d+)/") val matcher = pattern.matcher(href) if (!matcher.matches()) { continue } - val id = href.replace("german/hst/overview/", "").replace("/", "") + val id = href.replace("haltestellen/overview/", "").replace("/", "") list.add(Station(id, element.text())) } diff --git a/src/test/java/com/dyrosoft/kvbparser/merger/DeparturesTransformerTest.java b/src/test/java/com/dyrosoft/kvbparser/merger/DeparturesTransformerTest.java index c02b792..da2753c 100644 --- a/src/test/java/com/dyrosoft/kvbparser/merger/DeparturesTransformerTest.java +++ b/src/test/java/com/dyrosoft/kvbparser/merger/DeparturesTransformerTest.java @@ -18,12 +18,9 @@ public class DeparturesTransformerTest { public void testTransformation() throws Exception { Single.just(TestUtils.getTestHtmlFile(TestPages.DEPARTURES)) .compose(new DeparturesMergerTransformer()) - .subscribe(new Action1() { - @Override - public void call(final Departures departures) { - assertThat(departures.getDepartureInformation().size(), is(1)); - assertThat(departures.getDepartures().size(), is(90)); - } + .subscribe(departures -> { + assertThat(departures.getDepartureInformation().size(), is(1)); + assertThat(departures.getDepartures().size(), is(47)); }); } } \ No newline at end of file diff --git a/src/test/java/com/dyrosoft/kvbparser/parser/DeparturesParserFuncTest.java b/src/test/java/com/dyrosoft/kvbparser/parser/DeparturesParserFuncTest.java index cfa83f1..1db360f 100644 --- a/src/test/java/com/dyrosoft/kvbparser/parser/DeparturesParserFuncTest.java +++ b/src/test/java/com/dyrosoft/kvbparser/parser/DeparturesParserFuncTest.java @@ -18,7 +18,7 @@ public class DeparturesParserFuncTest { public void testDeparturesParsingCount() throws Exception { Single.just(TestUtils.getTestHtmlFile(TestPages.DEPARTURES)) .flatMap(new DeparturesParserFunc()) - .subscribe(departures -> assertThat(departures.size(), is(90))); + .subscribe(departures -> assertThat(departures.size(), is(47))); } @Test @@ -27,18 +27,18 @@ public void testDeparturesParsingObjects() throws Exception { .flatMap(new DeparturesParserFunc()) .subscribe(departures -> { final Departure departure = departures.get(0); - assertThat(departure.getDirection(), is("Siehe Zugziel")); + assertThat(departure.getDirection(), is("Bensberg")); assertThat(departure.getWaitTime(), is("Sofort")); final Line line = departure.getLine(); - assertThat(line.getId(), is("E")); + assertThat(line.getId(), is("1")); - final Departure departure2 = departures.get(89); - assertThat(departure2.getDirection(), is("Meschenich")); - assertThat(departure2.getWaitTime(), is("64 Min")); + final Departure departure2 = departures.get(46); + assertThat(departure2.getDirection(), is("Bensberg")); + assertThat(departure2.getWaitTime(), is("59 Min")); final Line line2 = departure2.getLine(); - assertThat(line2.getId(), is("132")); + assertThat(line2.getId(), is("1")); }); } } \ No newline at end of file diff --git a/src/test/java/com/dyrosoft/kvbparser/parser/StationsParserFucTest.java b/src/test/java/com/dyrosoft/kvbparser/parser/StationsParserFucTest.java index f59c88e..5b98d5e 100644 --- a/src/test/java/com/dyrosoft/kvbparser/parser/StationsParserFucTest.java +++ b/src/test/java/com/dyrosoft/kvbparser/parser/StationsParserFucTest.java @@ -18,7 +18,7 @@ public void testStationLinesParsingCount() throws Exception { Single.just(TestUtils.getTestHtmlFile(TestPages.STATIONS)) .flatMap(new StationsParserFuc()) .subscribe(stations -> assertThat(stations.size(), - is(979))); + is(75))); } @Test @@ -27,12 +27,12 @@ public void testStationsParsingObjects() throws Exception { .flatMap(new StationsParserFuc()) .subscribe(stations -> { final Station station1 = stations.get(0); - assertThat(station1.getId(), is("178")); - assertThat(station1.getName(), is("Aachener Str./Gürtel")); + assertThat(station1.getId(), is("702")); + assertThat(station1.getName(), is("Weiden West")); - final Station station2 = stations.get(94); - assertThat(station2.getId(), is("542")); - assertThat(station2.getName(), is("Bevingsweg")); + final Station station2 = stations.get(33); + assertThat(station2.getId(), is("667")); + assertThat(station2.getName(), is("Neuenweg")); }); } } \ No newline at end of file diff --git a/src/test/resources/testfiles/departures.html b/src/test/resources/testfiles/departures.html index eb8f3e7..78ea24f 100644 --- a/src/test/resources/testfiles/departures.html +++ b/src/test/resources/testfiles/departures.html @@ -1,1924 +1,363 @@ - - + + + + + + + Kölner Verkehrs-Betriebe AG - - - - - - - - - - - - - - - - - - - - - - - - + - + -
-
- - - +
+
+ +

Fahrplanunregelmässigkeiten

+
 Derzeit liegen an dieser Haltestelle keine Störungen vor.

Heumarkt
Stand: 15:02 Uhr  

LinieZielAbfahrt
1BensbergSofort
106MarienburgSofort
132Breslauer Pl/HbfSofort
7Zündorf2 Min
1Weiden West4 Min
133Zollstock8 Min
133Breslauer Pl/Hbf9 Min
9Königsforst10 Min
7Frechen11 Min
9Sülz12 Min
132Rondorf12 Min
5Am Butzweilerhof13 Min
1Bensberg15 Min
132Breslauer Pl/Hbf17 Min
7Zündorf18 Min
1Weiden West20 Min
133Breslauer Pl/Hbf22 Min
9Königsforst22 Min
7Rudolfplatz23 Min
133Zollstock23 Min
106Marienburg27 Min
9Sülz27 Min
132Meschenich27 Min
5Am Butzweilerhof28 Min
1Bensberg29 Min
7Zündorf33 Min
1Weiden West34 Min
132Breslauer Pl/Hbf35 Min
9Königsforst37 Min
133Breslauer Pl/Hbf37 Min
133Zollstock38 Min
7Frechen38 Min
9Sülz42 Min
132Rondorf42 Min
1Bensberg44 Min
132Breslauer Pl/Hbf47 Min
7Zündorf48 Min
1Weiden West49 Min
9Königsforst52 Min
133Breslauer Pl/Hbf52 Min
133Zollstock53 Min
7Rudolfplatz53 Min
106Marienburg57 Min
9Sülz57 Min
132Meschenich57 Min
5Am Butzweilerhof58 Min
1Bensberg59 Min


-
- VDV - -
- +