From 5ae3a7903cbdb1512161b8fdb5275da9fa051429 Mon Sep 17 00:00:00 2001 From: pidoubleyou <22942659+pidoubleyou@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:14:41 +0100 Subject: [PATCH 1/5] wait till SR+PHOENIX-Crawler finishes - fix necessary because SR+PHOENIX also included in ARD-Crawler --- src/main/java/mServer/crawler/GetUrl.java | 43 +- .../java/mServer/crawler/ListeRunSender.java | 4 +- .../mServer/crawler/sender/MediathekBr.java | 692 ------------------ .../crawler/sender/MediathekCrawler.java | 2 +- .../mServer/crawler/sender/MediathekOrf.java | 330 --------- .../crawler/sender/MediathekReader.java | 32 +- .../crawler/sender/MediathekSrfPod.java | 4 +- .../crawler/sender/ard/ArdCrawler.java | 28 +- .../arte/tasks/ArteDtoVideo2FilmTask.java | 2 +- .../sender/base/AbstractJsonRestTask.java | 4 +- .../crawler/sender/base/AbstractUrlTask.java | 7 +- .../sender/dw/tasks/DWOverviewTask.java | 4 +- .../sender/dw/tasks/DwFilmDetailTask.java | 4 +- .../crawler/sender/zdf/ZdfCrawler.java | 6 +- .../crawler/sender/zdf/tasks/ZdfTaskBase.java | 8 +- 15 files changed, 74 insertions(+), 1096 deletions(-) delete mode 100644 src/main/java/mServer/crawler/sender/MediathekBr.java delete mode 100644 src/main/java/mServer/crawler/sender/MediathekOrf.java diff --git a/src/main/java/mServer/crawler/GetUrl.java b/src/main/java/mServer/crawler/GetUrl.java index 65480df26..a75474fd9 100644 --- a/src/main/java/mServer/crawler/GetUrl.java +++ b/src/main/java/mServer/crawler/GetUrl.java @@ -57,26 +57,19 @@ public void setDelay(long delay, TimeUnit delayUnit) { } @Deprecated - public MSStringBuilder getUri_Utf(String sender, String addr, MSStringBuilder seite, String meldung) { - return getUri(sender, addr, StandardCharsets.UTF_8, 1 /* versuche */, seite, meldung); + public MSStringBuilder getUri_Utf(String runIdentifier, String sender, String addr, MSStringBuilder seite, String meldung) { + return getUri(runIdentifier, sender, addr, StandardCharsets.UTF_8, 1 /* versuche */, seite, meldung); } - public MSStringBuilder getUri_Iso(String sender, String addr, MSStringBuilder seite, String meldung) { - return getUri(sender, addr, StandardCharsets.ISO_8859_1, 1 /* versuche */, seite, meldung); + public MSStringBuilder getUri_Iso(String runIdentifier, String sender, String addr, MSStringBuilder seite, String meldung) { + return getUri(runIdentifier, sender, addr, StandardCharsets.ISO_8859_1, 1 /* versuche */, seite, meldung); } - public MSStringBuilder getUri(String sender, String addr, Charset encoding, int maxVersuche, MSStringBuilder seite, String meldung) { - return getUri(sender, addr, encoding, maxVersuche, seite, meldung, ""); + public MSStringBuilder getUri(String runIdentifier, String sender, String addr, Charset encoding, int maxVersuche, MSStringBuilder seite, String meldung) { + return getUri(runIdentifier, sender, addr, encoding, maxVersuche, seite, meldung, ""); } - public MSStringBuilder getUriWithDelay(String sender, String addr, Charset encoding, int maxVersuche, MSStringBuilder seite, String meldung, - long delay, TimeUnit delayUnit) { - setDelay(delay, delayUnit); - - return getUri(sender, addr, encoding, maxVersuche, seite, meldung); - } - - public MSStringBuilder getUri(String sender, String addr, Charset encoding, int maxVersuche, MSStringBuilder seite, String meldung, String token) { + public MSStringBuilder getUri(String runIdentifier, String sender, String addr, Charset encoding, int maxVersuche, MSStringBuilder seite, String meldung, String token) { int aktVer = 0; boolean letzterVersuch; @@ -96,7 +89,7 @@ public MSStringBuilder getUri(String sender, String addr, Charset encoding, int TimeUnit.MILLISECONDS.sleep(PAUSE); } letzterVersuch = (aktVer >= maxVersuche); - seite = getUriNew(sender, addr, seite, encoding, meldung, maxVersuche, letzterVersuch, token); + seite = getUriNew(runIdentifier, sender, addr, seite, encoding, meldung, maxVersuche, letzterVersuch, token); if (seite.length() > 0) { // und nix wie weiter if (Config.debug && aktVer > 1) { @@ -104,14 +97,14 @@ public MSStringBuilder getUri(String sender, String addr, Charset encoding, int Log.sysLog(text); } // nur dann zählen - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.ANZAHL); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.ANZAHL); return seite; } else { - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.FEHLVERSUCHE); - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.WARTEZEIT_FEHLVERSUCHE, delayVal); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.FEHLVERSUCHE); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.WARTEZEIT_FEHLVERSUCHE, delayVal); if (letzterVersuch) { // dann wars leider nichts - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.FEHLER); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.FEHLER); } } } catch (Exception ex) { @@ -121,11 +114,11 @@ public MSStringBuilder getUri(String sender, String addr, Charset encoding, int return seite; } - private void updateStatistics(final String sender, final long bytesWritten) { - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.SUM_DATA_BYTE, bytesWritten); - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.SUM_TRAFFIC_BYTE, bytesWritten); + private void updateStatistics(final String runIdentifier, final long bytesWritten) { + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.SUM_DATA_BYTE, bytesWritten); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.SUM_TRAFFIC_BYTE, bytesWritten); - FilmeSuchen.listeSenderLaufen.inc(sender, RunSender.Count.SUM_TRAFFIC_LOADART_NIX, bytesWritten); + FilmeSuchen.listeSenderLaufen.inc(runIdentifier, RunSender.Count.SUM_TRAFFIC_LOADART_NIX, bytesWritten); } private long transferData(ResponseBody body, Charset encoding, MSStringBuilder seite) throws IOException { @@ -165,7 +158,7 @@ private Request.Builder createRequestBuilder(String addr, String token) { return builder; } - private MSStringBuilder getUriNew(String sender, String addr, MSStringBuilder seite, + private MSStringBuilder getUriNew(String runIdentifier, String sender, String addr, MSStringBuilder seite, Charset encoding, String meldung, int versuch, boolean lVersuch, String token) { @@ -192,7 +185,7 @@ private MSStringBuilder getUriNew(String sender, String addr, MSStringBuilder se Log.errorLog(973969801, ex, ""); } - updateStatistics(sender, load); + updateStatistics(runIdentifier, load); return seite; } diff --git a/src/main/java/mServer/crawler/ListeRunSender.java b/src/main/java/mServer/crawler/ListeRunSender.java index 67153e4fc..a98ed6984 100644 --- a/src/main/java/mServer/crawler/ListeRunSender.java +++ b/src/main/java/mServer/crawler/ListeRunSender.java @@ -28,7 +28,7 @@ public class ListeRunSender extends LinkedList { private final static String TRENNER = " | "; - private static final String SENDER = " Sender "; + private static final String SENDER = " Sender "; public boolean listeFertig() { // liefert true wenn alle Sender fertig sind @@ -151,7 +151,7 @@ public ArrayList getTextCount(ArrayList ret) { public void getTextSum(ArrayList retArray) { //wird ausgeführt wenn Sender beendet ist - final String[] titel1 = {" Sender ", " [min] ", " [kB/s] ", "s/Seite", "Threads", "Wait"}; + final String[] titel1 = {" Sender ", " [min] ", " [kB/s] ", "s/Seite", "Threads", "Wait"}; String zeile = ""; String[] names = new String[titel1.length]; for (int i = 0; i < titel1.length; ++i) { diff --git a/src/main/java/mServer/crawler/sender/MediathekBr.java b/src/main/java/mServer/crawler/sender/MediathekBr.java deleted file mode 100644 index fb239dbec..000000000 --- a/src/main/java/mServer/crawler/sender/MediathekBr.java +++ /dev/null @@ -1,692 +0,0 @@ -/* - * MediathekView - * Copyright (C) 2008 W. Xaver - * W.Xaver[at]googlemail.com - * http://zdfmediathk.sourceforge.net/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package mServer.crawler.sender; - -import java.nio.charset.StandardCharsets; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.Locale; - -import de.mediathekview.mlib.Config; -import de.mediathekview.mlib.Const; -import de.mediathekview.mlib.daten.DatenFilm; -import de.mediathekview.mlib.tool.Log; -import de.mediathekview.mlib.tool.MSStringBuilder; -import mServer.crawler.CrawlerTool; -import mServer.crawler.FilmeSuchen; -import mServer.crawler.GetUrl; -import mServer.tool.MserverDaten; -import org.apache.commons.text.StringEscapeUtils; - -public class MediathekBr extends MediathekReader { - - public final static String SENDERNAME = Const.BR; - private final SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm", Locale.ENGLISH);//08.11.2013, 18:00 - private final SimpleDateFormat sdfOutTime = new SimpleDateFormat("HH:mm:ss"); - private final SimpleDateFormat sdfOutDay = new SimpleDateFormat("dd.MM.yyyy"); - private final LinkedListUrl listeTage = new LinkedListUrl(); - private static final String PATTERN_VERY_SMALL = ""; - private static final String PATTERN_SMALL = ""; - private static final String PATTERN_NORMAL = ""; - private static final String PATTERN_HD = ""; - private static final String PATTERN_DLURL = ""; - private static final String PATTERN_END = "<"; - private final LinkedList listeAlleThemen = new LinkedList<>(); - private final LinkedList listeAlleThemenCount = new LinkedList<>(); - private final LinkedList listeAlleThemenCount_ = new LinkedList<>(); - - public MediathekBr(FilmeSuchen ssearch, int startPrio) { - super(ssearch, SENDERNAME, 4, 100, startPrio); - } - - private void startArchiveThreads() { - if (CrawlerTool.loadLongMax()) { - // Archiv durchsuchen - Thread thArchiv; - thArchiv = new ArchivLaden(1, 50); - thArchiv.start(); - thArchiv = new ArchivLaden(51, 100); - thArchiv.start(); - thArchiv = new ArchivLaden(101, 150); - thArchiv.start(); - thArchiv = new ArchivLaden(151, 200); - thArchiv.start(); - } - if (CrawlerTool.loadMax()) { - // Archiv durchsuchen - Thread thArchiv; - thArchiv = new ArchivLaden(201, 250); - thArchiv.start(); - thArchiv = new ArchivLaden(251, 300); - thArchiv.start(); - thArchiv = new ArchivLaden(301, 350); - thArchiv.start(); - thArchiv = new ArchivLaden(351, 400); - thArchiv.start(); - } - } - - private void startKlassikThread() { - Thread thKlassik = new KlassikLaden(); - thKlassik.setName(SENDERNAME + "-Klassik"); - thKlassik.start(); - } - - private void startCrawlerThreads() { - for (int t = 0; t <= getMaxThreadLaufen(); ++t) { - Thread th = new ThemaLaden(); - th.setName(SENDERNAME + t); - th.start(); - } - } - - @Override - protected void addToList() { - mlibFilmeSuchen.listeFilmeAlt.getThema(getSendername(), listeAlleThemenCount_); - meldungStart(); - getTheman(); // Themen suchen - getTage(); // Programm der letzten Tage absuchen - if (Config.getStop()) { - meldungThreadUndFertig(); - } else if (listeThemen.isEmpty() && listeTage.isEmpty()) { - meldungThreadUndFertig(); - } else { - meldungAddMax(listeThemen.size() + listeTage.size()); - // erst hier starten (Archiv, Klassik), sonst beendet er sich/und sucht doch! - startArchiveThreads(); - startKlassikThread(); - startCrawlerThreads(); - } - } - - private void getTheman() { - final String ADRESSE = "http://www.br.de/mediathek/video/sendungen/index.html"; - final String MUSTER_URL = "")) != -1) { - while ((pos1 = seite.indexOf(MUSTER_URL, pos1)) != -1) { - if (Config.getStop()) { - break; - } - - try { - pos1 += MUSTER_URL.length(); - if ((pos2 = seite.indexOf("\"", pos1)) != -1) { - url = seite.substring(pos1, pos2); - } - String thema = seite.extract("", "<", pos1); - thema = StringEscapeUtils.unescapeXml(thema.trim()); - thema = StringEscapeUtils.unescapeHtml4(thema.trim()); - if (!listeAlleThemen.contains(thema)) { - listeAlleThemen.add(thema); - } - if (url.isEmpty() - || (!url.startsWith(MUSTER_URL_1) && !url.startsWith(MUSTER_URL_2))) { - continue; - } - /// der BR ist etwas zu langsam dafür???? -// // in die Liste eintragen -// String[] add; -// if (MSearchConfig.senderAllesLaden) { -// add = new String[]{"http://www.br.de/mediathek/video/sendungen/" + url + "#seriesMoreCount=10", ""}; -// } else { -// add = new String[]{"http://www.br.de/mediathek/video/sendungen/" + url, ""}; -// } - // in die Liste eintragen - String[] add = new String[]{"http://www.br.de/mediathek/video/" + url, thema}; - listeThemen.addUrl(add); - } catch (Exception ex) { - Log.errorLog(821213698, ex); - } - } - } - } - - private void getTage() { - // - String date; - final String ADRESSE = "http://www.br.de/mediathek/video/programm/index.html"; - final String MUSTER = "http://www.br.de/mediathek/video/programm/mediathek-programm-100~_date-"; - listeTage.clear(); - MSStringBuilder seite1 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - MSStringBuilder seite2 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - ArrayList al = new ArrayList<>(); - try { - //seite1 = getUrlIo.getUri_Utf(SENDERNAME, ADRESSE, seite1, ""); - GetUrl getUrlIo = new GetUrl(getWartenSeiteLaden()); - seite1 = getUrlIo.getUri(SENDERNAME, ADRESSE, StandardCharsets.UTF_8, 5 /* versuche */, seite1, ""); - String url; - int max_; - if (CrawlerTool.loadLongMax()) { - max_ = 21; - } else { - max_ = 7; - } - for (int i = 0; i < max_; ++i) { - if ((Config.getStop())) { - break; - } - date = new SimpleDateFormat("yyyy-MM-dd").format(new Date().getTime() - i * (1000 * 60 * 60 * 24)); - url = seite1.extract("/mediathek/video/programm/mediathek-programm-100~_date-" + date, "\""); - if (url.isEmpty()) { - continue; - } - // in die Liste eintragen - url = MUSTER + date + url; - seite2 = getUrlIo.getUri_Utf(SENDERNAME, url, seite2, ""); - // public void extractList(String abMuster, String bisMuster, String musterStart, String musterEnde, String addUrl, ArrayList result) { - seite2.extractList("
Legende", "Zur Sendung \"") != -1 - && seite.indexOf("\" liegen momentan keine Videos vor

") != -1) { - // dann gibts keine Videos - // MSearchLog.fehlerMeldung(-120364780, MSearchLog.FEHLER_ART_MREADER, "MediathekBr.laden", "keine Videos: " + urlThema); - return; - } - thema_ = seite.extract("

", "<").trim(); //

Abendschau

,

Film und Serie

- if (thema.isEmpty()) { - thema = checkThema(thema_); - } - if (!thema.equals(thema_)) { - // dann wird das Thema der Titel - titel = thema_; - } else { - titel = seite.extract("
  • ", "<"); //
  • Spionageabwehr auf Bayerisch! - Folge 40
  • - } // - datum = seite.extract("
    - urlXml = seite.extract("{dataURL:'", "'"); - if (urlXml.isEmpty()) { - Log.errorLog(915263478, "keine URL: " + urlThema); - } else { - urlXml = "http://www.br.de" + urlXml; - loadXml(seiteXml, urlXml, urlSeite, thema, titel, description, datum, zeit); - } - if (!weitersuchen) { - return; - } - // und jetzt noch nach weiteren Videos auf der Seite suchen - //

    Mehr von Abendschau

    - //
    - int pos1, count = 0; - int max = (CrawlerTool.loadLongMax() ? 20 : 0); - final String STOP = "

    Besucher, die dieses Video angesehen haben, sahen auch

    "; - int stop = seite.indexOf(STOP); - if (max > 0) { - // einzelne Themen verlängern - if (urlThema.equals("http://www.br.de/mediathek/video/sendungen/spielfilme-im-br/spielfilme-im-br110.html") - || urlThema.equals("http://www.br.de/mediathek/video/sendungen/alpha-centauri/alpha-centauri104.html")) { - max = 60; - } - // dann mit der ganzen Seite arbeiten - String u = seite.extract("
    Mehr von ")) != -1) { - while (!Config.getStop() && (pos1 = seite.indexOf(MUSTER_URL, pos1)) != -1) { - if (stop > 0 && pos1 > stop) { - break; - } - String urlWeiter = seite.extract(MUSTER_URL, "\"", pos1); - pos1 += MUSTER_URL.length(); - if (!urlWeiter.isEmpty()) { - urlWeiter = "http://www.br.de/mediathek/video/" + urlWeiter; - if (urlWeiter.contains("livestream")) { - continue; // ist der Livestream - } - ++count; - if (count > max) { -// MSearchLog.debugMeldung("MediathekBr.laden" + " ------> count max erreicht: " + urlThema); - break; - } - laden(urlWeiter, thema, seite2, false); - } - } - } - } - - private String convertDatum(String datum) { - // - try { - Date filmDate = sdf.parse(datum); - datum = sdfOutDay.format(filmDate); - } catch (ParseException ex) { - if (MserverDaten.debug) { - Log.errorLog(915364789, ex, "Datum: " + datum); - } - } - return datum; - } - - private String convertTime(String zeit) { - // - try { - Date filmDate = sdf.parse(zeit); - zeit = sdfOutTime.format(filmDate); - } catch (ParseException ex) { - if (MserverDaten.debug) { - Log.errorLog(312154879, ex, "Time: " + zeit); - } - } - return zeit; - } - } - - private class KlassikLaden extends Thread { - - private final MSStringBuilder seite1 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - private final MSStringBuilder seite2 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - private final MSStringBuilder seite3 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - private final MSStringBuilder seiteXml = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER); - - @Override - public void run() { - try { - meldungAddThread(); - laden(); - } catch (Exception ex) { - Log.errorLog(954123458, ex); - } - meldungThreadUndFertig(); - } - - private void laden() { - MSStringBuilder seite = seite1; - GetUrl getUrlIo = new GetUrl(getWartenSeiteLaden()); - getUrlIo.getUri_Utf(SENDERNAME, "http://www.br.de/mediathek/video/br-klassik-mediathek-100.html", seite, ""); - if (seite.length() == 0) { - return; - } - String urlXml; - final String thema = "BR-Klassik"; - String datum; - String zeit = ""; - String description1, description2; - String titel; - - String u = seite.extract(" result = new ArrayList<>(); - seite.extractList("

    Inhalt

    " /*abMuster*/, - "
    " /*bisMuster*/, - " 20) { - break; - } - } - meldungProgress(url); - getUrlIo.getUri_Utf(SENDERNAME, url, seite3, url); - titel = seite3.extract("

    ", "<"); //

    U21-VERNETZT

    - datum = seite3.extract("