preparing importer for ReparierCafe
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -3,7 +3,6 @@ description = "OpenCloudCal : Importers"
|
||||
dependencies {
|
||||
implementation(project(":de.srsoftware.cal.api"))
|
||||
implementation(project(":de.srsoftware.cal.base"))
|
||||
implementation("de.srsoftware:tools.container:1.0.6")
|
||||
implementation("de.srsoftware:tools.optionals:1.0.0")
|
||||
implementation("de.srsoftware:tools.util:2.1.1")
|
||||
implementation("de.srsoftware:tools.web:1.3.16")
|
||||
|
||||
+4
-4
@@ -2,19 +2,19 @@
|
||||
package de.srsoftware.cal.importer.erfurt;
|
||||
|
||||
import static de.srsoftware.cal.Util.url;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.cal.api.Link;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+4
-4
@@ -3,21 +3,21 @@ package de.srsoftware.cal.importer.erfurt;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.cal.Util.parseLongGermanDate;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.Optionals.nullIfEmpty;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.cal.api.Link;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Strings;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
+4
-4
@@ -2,10 +2,10 @@
|
||||
package de.srsoftware.cal.importer.erfurt;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
@@ -13,9 +13,9 @@ import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.cal.api.Link;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
+4
-4
@@ -2,20 +2,20 @@
|
||||
package de.srsoftware.cal.importer.gera;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
+2
-3
@@ -3,11 +3,11 @@ package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.cal.Util.extractBackgroundImage;
|
||||
import static de.srsoftware.cal.Util.toNumericMonth;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.Optionals.emptyIfNull;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
@@ -16,7 +16,6 @@ import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.*;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+2
-3
@@ -3,10 +3,10 @@ package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanDate;
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
@@ -15,7 +15,6 @@ import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.*;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+1
-2
@@ -2,17 +2,16 @@
|
||||
package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.DIV;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.*;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+4
-4
@@ -1,18 +1,18 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.ID;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import de.srsoftware.cal.SinglePageImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import de.srsoftware.cal.IcalImporter;
|
||||
|
||||
public class ReparierCafe extends IcalImporter {
|
||||
@Override
|
||||
public String url() {
|
||||
return "https://www.reparatur-initiativen.de/events/ical/2553.ics";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Reparier-Café Jena";
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -2,16 +2,16 @@
|
||||
package de.srsoftware.cal.importer.jena;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
-177
@@ -1,177 +0,0 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.leipzig;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Bandhaus extends BaseImporter {
|
||||
private static final Coords COORDS_BANDHAUS = new Coords(51.32498, 12.31578);
|
||||
|
||||
public Bandhaus() throws NoSuchAlgorithmException {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String baseUrl() {
|
||||
return "https://bandcommunity-leipzig.org";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Importer für Veranstaltungen des Bandhaus Leipzig";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractAttachmentsFilter() {
|
||||
return attributeHas(CLASS,"event_description");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractDescriptionFilter() {
|
||||
return attributeEquals("itemprop","description");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<Coords> extractCoords(Tag eventTag) {
|
||||
var list = eventTag.find(attributeHas(CLASS,"evo_location_address"));
|
||||
if (list.isEmpty()) return error("Failed to locate address → failed to locate coords");
|
||||
var loc = list.getFirst().strip();
|
||||
var lower = loc.toLowerCase();
|
||||
if (lower.contains("saarländer")) return Payload.of(COORDS_BANDHAUS);
|
||||
return error("Unknown location: %s",loc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEndDateFilter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEndTimeFilter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEventTagFilter() {
|
||||
return attributeStartsWith(ID, "event_");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<List<String>> extractEventUrls(Container<Tag> programPage) {
|
||||
var opt = programPage.optional();
|
||||
if (opt.isEmpty())return transform(programPage);
|
||||
var list = opt.get().find(attributeEquals(ID, "evcal_list")).stream()
|
||||
.flatMap(tag -> tag.find(IS_ANCHOR).stream())
|
||||
.map(anchor -> anchor.get(HREF))
|
||||
.filter(Objects::nonNull).filter(link-> link.contains("/events/"))
|
||||
.map(link -> link.contains("://") ? link : baseUrl()+link)
|
||||
.distinct().toList();
|
||||
return Payload.of(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractLinksFilter() {
|
||||
return attributeEquals("itemprop","description");
|
||||
}
|
||||
|
||||
protected Container<Tag> extractLocationTag(Tag eventTag){
|
||||
var list = eventTag.find(extractLocationFilter()).stream()
|
||||
.flatMap(tag -> tag.find(IS_PARAGRAPH).stream()).toList();
|
||||
if (list.isEmpty()) return error("Failed to find location tag");
|
||||
return Payload.of(Tag.of(DIV).addAll(list));
|
||||
}
|
||||
|
||||
protected Container<String> extractLocation(Tag eventTag) {
|
||||
var location = eventTag.find(extractLocationFilter()).stream()
|
||||
.flatMap(tag -> tag.find(IS_PARAGRAPH).stream())
|
||||
.map(Tag::strip).collect(Collectors.joining(", "));
|
||||
|
||||
return location.isBlank() ? error("Failed to find location!") : Payload.of(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractLocationFilter() {
|
||||
return attributeContains(CLASS,"data_cell").and(tag -> !tag.find(attributeHas(CLASS,"evo_location_address")).isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalDate> extractStartDate(Tag eventTag) {
|
||||
Container<Tag> startDateTag = extractStartDateTag(eventTag);
|
||||
var opt = startDateTag.optional();
|
||||
if (opt.isEmpty()) return transform(startDateTag);
|
||||
var dateTag = opt.get();
|
||||
Container<Integer> year = dateTag.find(withAttribute("data-syr")).stream()
|
||||
.map(tag -> tag.get("data-syr"))
|
||||
.map(Util::parseInt).findAny().orElseGet(() -> error("Failed to find start date"));
|
||||
Container<Integer> day = dateTag.find(attributeEquals(CLASS, "date")).stream()
|
||||
.map(Tag::strip).map(Util::parseInt).findAny().orElseGet(() -> error("Failed to find start date"));
|
||||
Container<Integer> month = dateTag.find(attributeEquals(CLASS, "month")).stream()
|
||||
.map(Tag::strip).map(Util::toNumericMonth).findAny().orElseGet(() -> error("Failed to find start date"));
|
||||
if (year.optional().isEmpty()) return transform(year);
|
||||
if (month.optional().isEmpty()) return transform(month);
|
||||
if (day.optional().isEmpty()) return transform(day);
|
||||
return Payload.of(LocalDate.of(year.optional().get(),month.optional().get(),day.optional().get()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractStartDateFilter() {
|
||||
return withAttribute("data-syr").and(tag -> !tag.find(attributeContains(CLASS,"evo_start")).isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractStartTimeFilter() {
|
||||
return attributeContains(CLASS,"evo_start");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> extractTags(Tag eventTag) {
|
||||
return List.of("Bandhaus","Leipzig");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractTitleFilter() {
|
||||
return attributeHas(CLASS,"evcal_event_title");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalDate> parseEndDate(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalTime> parseEndTime(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalDate> parseStartDate(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalTime> parseStartTime(String string) {
|
||||
return parseGermanTime(string+" ");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String programURL() {
|
||||
return baseUrl()+"/veranstaltungen";
|
||||
}
|
||||
}
|
||||
-166
@@ -1,166 +0,0 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.neustadt;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanDate;
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static java.util.function.Predicate.not;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class Wotufa extends BaseImporter {
|
||||
|
||||
private static final String DEFAULT_LOCATION = "Wotufa-Saal, Ziegenrücker Str. 6, 07806 Neustadt an der Orla";
|
||||
public static final Coords DEFAULT_COORDS = new Coords(50.73184, 11.74444);
|
||||
private static final LocalTime DEFAULT_TIME = LocalTime.of(19,0);
|
||||
|
||||
public Wotufa() throws NoSuchAlgorithmException {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String baseUrl() {
|
||||
return "http://wotufa.de";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Importer für Events im Wotufa-Saal Neustadt an der Orla";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractAttachmentsFilter() {
|
||||
return ofType("table").and(attributeEquals(CLASS,"kalDetl"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractDescriptionFilter() {
|
||||
return cellWithContext("Details");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<Coords> extractCoords(Tag eventTag) {
|
||||
return Payload.of(DEFAULT_COORDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEndDateFilter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEndTimeFilter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractEventTagFilter() {
|
||||
return ofType("table").and(attributeContains(CLASS,"kalDetl"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<List<String>> extractEventUrls(Container<Tag> programPage) {
|
||||
var opt = programPage.optional();
|
||||
if (opt.isEmpty()) return transform(programPage);
|
||||
List<String> list = opt.get().find(IS_ANCHOR)
|
||||
.stream().map(a -> a.get(HREF))
|
||||
.filter(Objects::nonNull)
|
||||
.filter(url -> url.contains("kal_Aktion=detail"))
|
||||
.map(url -> url.contains("://") ? url : baseUrl() + url)
|
||||
.map(url -> url.replace("&","&")) // glitch on that website
|
||||
.distinct()
|
||||
.toList();
|
||||
return Payload.of(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractLinksFilter() {
|
||||
return ofType("table").and(attributeEquals(CLASS,"kalDetl"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<String> extractLocation(Tag eventTag) {
|
||||
Container<Tag> locationTag = extractLocationTag(eventTag);
|
||||
if (locationTag.optional().isEmpty()) return transform(locationTag);
|
||||
var loc = locationTag.optional().get().strip();
|
||||
|
||||
var wotufa = loc.equals("Neustadt an der Orla") || loc.toLowerCase().contains("wotufa");
|
||||
return Payload.of(wotufa ? DEFAULT_LOCATION : loc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractLocationFilter() {
|
||||
return cellWithContext("Ort");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractStartDateFilter() {
|
||||
return cellWithContext("Datum");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractStartTimeFilter() {
|
||||
return cellWithContext("Zeit").or(cellWithContext("Details"));
|
||||
}
|
||||
|
||||
protected Container<Tag> extractStartTimeTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractStartTimeFilter());
|
||||
if (list.isEmpty()) return error("Failed to find start time tag");
|
||||
return Payload.of(new Tag("group").addAll(list));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> extractTags(Tag eventTag) {
|
||||
return List.of("Wotufa","Neustadt/Orla");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<Tag> extractTitleFilter() {
|
||||
return cellWithContext("Veranstaltung");
|
||||
}
|
||||
|
||||
private Predicate<Tag> cellWithContext(String key){
|
||||
return ofType("td")
|
||||
.and(not(withAttribute("width")))
|
||||
.and(tag -> tag.parent().map(Tag::strip).filter(content -> content.startsWith(key)).isPresent());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalDate> parseEndDate(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalTime> parseEndTime(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalDate> parseStartDate(String string) {
|
||||
return parseGermanDate(string);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container<LocalTime> parseStartTime(String string) {
|
||||
return parseGermanTime(string).map(res -> res.optional().isEmpty() ? Payload.of(DEFAULT_TIME) : res);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String programURL() {
|
||||
return baseUrl()+"/eventkalender/kalender.php";
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -1,10 +1,10 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.weimar;
|
||||
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static java.util.Optional.empty;
|
||||
|
||||
import de.srsoftware.cal.BaseAppointment;
|
||||
@@ -13,9 +13,9 @@ import de.srsoftware.cal.api.Appointment;
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Importer;
|
||||
import de.srsoftware.cal.api.Link;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
|
||||
+3
-3
@@ -3,15 +3,15 @@ package de.srsoftware.cal.importer.weimar;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanDate;
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
+3
-3
@@ -1,17 +1,17 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal.importer.weimar;
|
||||
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
|
||||
Reference in New Issue
Block a user