Szukajwarchiwach Downloader zur Verfügung stellen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • OlliL
    Erfahrener Benutzer
    • 11.02.2017
    • 5804

    Szukajwarchiwach Downloader zur Verfügung stellen?

    Moin zusammen,

    ich habe mir einen kleinen Szukajwarchiwach Downloader geschrieben, der es erleichtert Serien oder Gruppen mit vielen Einheiten runterzuladen. Wenn man z.B. alle Bücher eines Standesamtes herunterladen will, ist man schon ziemlich am rumclicken bis man die alle auf Platte bekommen hat.

    Nun frage ich mich - soll ich den veröffentlichen oder zieht man damit eher den Zorn von szukajwarchiwach auf sich? Bzw.: Schalten die, wenn es zu einer großen Nutzung kommt, dann sogar eher Funktionalitäten auf ihrer Webseite ab?

    Was meint ihr? Gerne ein paar möglichst objektive Meinungen, also Meinungen ohne dabei die "ooooh ich brauch das Tool" Brille aufzusetzen....

    add_units.png main_screen.png

    Zuletzt geändert von OlliL; 06.04.2025, 18:49.
    Mein Ortsfamilienbuch Güstow, Kr. Randow: https://ofb.genealogy.net/guestow/
    Website zum Familienname Vollus: http://www.familie-vollus.de/
  • sonki
    Erfahrener Benutzer
    • 10.05.2018
    • 5611

    #2
    Ich würde vermuten das es keinen Unterschied macht. Und wenn man im Request-Header noch ein fake Agent einträgt, statt "superduper massendownloader" wird es je nach Umsetzung auch schwierig das überhaupt zu erkennen. Aber klar, wissen tut man das nie, im Zweifel das Tool einfach für sich behalten, würde aber die Wahrscheinlichkeit eher gering einschätzen das sie das merken und überhaupt reagieren. Ok, die Antwort hilft vermutlich jetzt nicht weiter...ein Restrisiko ist immer vorhanden bei Bereitstellung solcher Tools. (ich habe mir z.B. auch Downloader für andere Portale geschrieben die ich 100% nicht bereitstellen werde, aber da sind das auch Bezahl-Portale statt dem öffentlichen szukaj...)
    Zuletzt geändert von sonki; 06.04.2025, 19:24.
    ¯\_(ツ)_/¯

    Kommentar

    • sonki
      Erfahrener Benutzer
      • 10.05.2018
      • 5611

      #3
      OlliL
      Darf ich mal fragen wie du die urls parsed? Haben die da mittlerweile dynamisches HTML was per js nachgeladen wird?
      Bin grad noch etwas ratlos, weil meine ersten (python) Versuche mit requests und playwright (headless chrome) Probleme haben und nicht den vollen Content der Seite sehen.

      Update: Ok, habe das Problem/Lösung gefunden, muss die URL Anfangs 2x laden....(cookie Kram oder was weiß ich)
      Zuletzt geändert von sonki; Gestern, 12:02.
      ¯\_(ツ)_/¯

      Kommentar

      • OlliL
        Erfahrener Benutzer
        • 11.02.2017
        • 5804

        #4
        Genau,

        ich habe eine initMethode die einmal https://www.szukajwarchiwach.gov.pl/de/strona_glowna aufruft und die Cookies die von diesem Aufruf zurückkommen dann allen weiteren Aufrufen mitgibt.

        init() wird am Anfang einmal aufgerufen
        getDocument lädt die Seite der Serie oder der Gruppe
        downloadFile lädt das ZIP File mit allen Bildern runter

        Code:
        public final class WebDelegate {
        
            private static Map<String, String> cookies;
            private static final int TIMOUT_MILLIES = 10000;
        
            private WebDelegate() {
                // NO-OP
            }
        
            public static void init() {
                Response res;
                try {
                    res = Jsoup.connect("https://www.szukajwarchiwach.gov.pl/de/strona_glowna").timeout(TIMOUT_MILLIES)
                            .execute();
                    cookies = res.cookies();
                } catch (final IOException e) {
                    e.printStackTrace();
                    throw new SzukajwarchiwachException(e);
                }
            }
        
            public static Document getDocument(final String url) {
                for (int i = 0; i < 3; i++) {
                    try {
                        return Jsoup.connect(url).timeout(TIMOUT_MILLIES).cookies(cookies).get();
                    } catch (final HttpStatusException e) {
                        if (e.getStatusCode() != 500 || i >= 3) {
                            e.printStackTrace();
                            throw new SzukajwarchiwachException(e);
                        }
                    } catch (final IOException e) {
                        e.printStackTrace();
                        throw new SzukajwarchiwachException(e);
                    }
                }
                return null;
            }
        
            public static CompletableFuture<HttpResponse<Path>> downloadFile(final HttpClient httpClient, final URI uri,
                    final Path targetFile) {
                final HttpRequest req = HttpRequest.newBuilder()
                        .uri(uri)
                        .version(HttpClient.Version.HTTP_2)
                        .header("Content-Type", "application/x-www-form-urlencoded")
                        .POST(getFormBody())
                        .build();
        
                return httpClient.sendAsync(req, HttpResponse.BodyHandlers.ofFile(targetFile));
            }
        
            public static synchronized HttpClient getHttpClient(final URI uri) {
                final CookieManager cm = new CookieManager();
                CookieHandler.setDefault(cm);
        
                for (final var cookie : cookies.entrySet()) {
                    final HttpCookie sessionCookie = new HttpCookie(cookie.getKey(), cookie.getValue());
                    sessionCookie.setPath("/");
                    sessionCookie.setVersion(0);
        
                    cm.getCookieStore().add(uri, sessionCookie);
                }
        
                return HttpClient.newBuilder()
                        .cookieHandler(CookieHandler.getDefault())
                        .connectTimeout(Duration.ofMillis(TIMOUT_MILLIES))
                        .build();
            }
        
            private static HttpRequest.BodyPublisher getFormBody() {
                return HttpRequest.BodyPublishers.ofString(
                        Map.of(
                                "_Jednostka_formDate", String.valueOf(System.currentTimeMillis()),
                                "_Jednostka_wyborSkanow", "wszystkie",
                                "_Jednostka_downloadType", "basic")
                                .entrySet().stream()
                                .map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8)
                                        + "="
                                        + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
                                .collect(Collectors.joining("&")
                                ));
            }
        }
        
        ​
        Mein Ortsfamilienbuch Güstow, Kr. Randow: https://ofb.genealogy.net/guestow/
        Website zum Familienname Vollus: http://www.familie-vollus.de/

        Kommentar

        • sonki
          Erfahrener Benutzer
          • 10.05.2018
          • 5611

          #5

          Ja, danke für den Schnippsel, das hilft - auch wenn es java ist . Ich hatte es inwischen gemerkt, das ich erst einmal die Seite aufrufen muss und ab da an kann ich mit der Session arbeiten und die eigentlichen Seiten aufrufen. Baue mir grad mal rein aus Übungszwecken einen python cli client zum downloaden. Bis auf den nervigen Fall das manchmal die "zips" aus einer Serie generiert werden und manchmal erst aus der "Aktenliste" ist inzwischen allles klar.
          ¯\_(ツ)_/¯

          Kommentar

          • OlliL
            Erfahrener Benutzer
            • 11.02.2017
            • 5804

            #6
            Ich habe manchmal (sehr selten, aber kommt vor) auch ZIPs, die kaputt sind und sich nicht entpacken lassen. Entweder ist bei meinem Downloader noch ein Bug, oder der ZIP-Generator bei denen auf der Seite hat einen Fehler.
            Mein Ortsfamilienbuch Güstow, Kr. Randow: https://ofb.genealogy.net/guestow/
            Website zum Familienname Vollus: http://www.familie-vollus.de/

            Kommentar

            Lädt...
            X