";
+ private static final String MUSTER_START_FILM_SUCHEN1 = "Beiträge der Sendung";
+ private final ArrayList
liste = new ArrayList<>();
+ private MSStringBuilder seite1 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER);
+ private MSStringBuilder seite2 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER);
+ private MSStringBuilder seite3 = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER);
@Override
- protected void addToList() {
- listeThemen.clear();
- addThema();
- listeThemen.addUrl(new String[]{THEMA_TAGE, ""});
- if (Config.getStop() || listeThemen.isEmpty()) {
- meldungThreadUndFertig();
- } else {
- meldungAddMax(listeThemen.size());
- listeSort(listeThemen, 1);
- for (int t = 0; t < getMaxThreadLaufen(); ++t) {
- Thread th = new ThemaLaden();
- th.setName(SENDERNAME + t);
- th.start();
- }
+ public void run() {
+ try {
+ meldungAddThread();
+ String[] link;
+ while (!Config.getStop() && (link = listeThemen.getListeThemen()) != null) {
+ meldungProgress(link[0]);
+ if (link[0].equals(THEMA_TAGE)) {
+ addTage();
+ } else {
+ filmSuchen1(link[0] /* url */, link[1], true);
+ }
}
+ } catch (final Exception ex) {
+ Log.errorLog(487326921, ex);
+ }
+ meldungThreadUndFertig();
}
-
- private void addThema() {
- listeThemen.clear();
- MSStringBuilder seite = new MSStringBuilder(Const.STRING_BUFFER_START_BUFFER);
- meldungStart();
- GetUrl getUrlIo = new GetUrl(getWartenSeiteLaden());
- seite = getUrlIo.getUri(SENDERNAME, ADRESSE_THEMA, StandardCharsets.UTF_8, 5 /* versuche */, seite, "" /* Meldung */);
- if (seite.length() == 0) {
- Log.sysLog("ARD: Versuch 2");
- warten(2 * 60 /*Sekunden*/);
- seite = getUrlIo.getUri(SENDERNAME, ADRESSE_THEMA, StandardCharsets.UTF_8, 5 /* versuche */, seite, "" /* Meldung */);
- if (seite.length() == 0) {
- Log.errorLog(104689736, "wieder nichts gefunden");
- }
+ private void addTage() {
+ // http://www.ardmediathek.de/tv/sendungVerpasst?tag=0 ... 6
+ for (int i = 0; i <= 6; ++i) {
+ if (Config.getStop()) {
+ break;
+ }
+ final String urlTage = "http://www.ardmediathek.de/tv/sendungVerpasst?tag=" + i;
+ final GetUrl getUrl = new GetUrl(getWartenSeiteLaden());
+ seite1 = getUrl.getUri(SENDERNAME, urlTage, StandardCharsets.UTF_8, 2, seite1, "");
+ if (seite1.length() == 0) {
+ Log.errorLog(765323214, "Leere Seite: " + urlTage);
+ return;
}
int pos = 0;
- String url = "";
- while (!Config.getStop() && (pos = seite.indexOf(MUSTER_URL_THEMA, pos)) != -1) {
+ String url, datum, zeit = "", titel, dauer, urlSendung, thema;
+ long d = 0;
+ while (!Config.getStop() && (pos = seite1.indexOf(MUSTER_ADD_TAGE, pos)) != -1) {
+ zeit = seite1.extract("", "<", pos) + ":00";
+ pos += MUSTER_ADD_TAGE.length();
+
+ url = seite1.extract("documentId=", "&", pos);
+ if (url.contains("\"")) {
+ url = url.substring(0, url.indexOf('\"'));
+ }
+ if (!url.isEmpty()) {
+ url = url.replace("&", "&");
+ thema = seite1.extract("", "<", pos);
+ if (thema.endsWith("Uhr") && thema.contains(",")) {
+ // tagesschau, 09:00 Uhr
+ thema = thema.substring(0, thema.indexOf(','));
+ }
+ datum = seite1
+ .extract("Videos (TV-Sendungen) des Senders Das Erste vom", "- ARD").trim();
+ titel = seite1.extract("", "<", pos);
+ dauer = seite1.extract("
", "<", pos);
try {
- pos += MUSTER_URL_THEMA.length();
- int pos1 = pos;
- int pos2 = seite.indexOf("\"", pos);
- if (pos1 != -1 && pos2 != -1) {
- url = seite.substring(pos1, pos2);
- }
- if (!url.isEmpty()) {
- url = "http://www.ardmediathek.de/tv/sendungen-a-z?buchstabe=" + url;
- feedSuchen1(url);
- }
- } catch (Exception ex) {
- Log.errorLog(698732167, ex, "kein Thema");
+ final Matcher dauerMatcher = Pattern.compile(DAUER_REGEX_PATERN).matcher(dauer);
+ if (dauerMatcher.find()) {
+ d = Long.parseLong(dauerMatcher.group()) * 60;
+ }
+ } catch (final Exception ignored) {
+ }
+ if (d == 0) {
+ Log.errorLog(915263621, "Dauer==0: " + urlTage);
}
+ urlSendung = seite1.extract("",
+ "", "<");
+ }
+ }
- private void feedSuchen1(String strUrlFeed) {
- GetUrl getUrlIo = new GetUrl(getWartenSeiteLaden());
- seiteFeed = getUrlIo.getUri(SENDERNAME, strUrlFeed, StandardCharsets.UTF_8, 2/*max Versuche*/, seiteFeed, "");
- if (seiteFeed.length() == 0) {
- Log.errorLog(207956317, "Leere Seite: " + strUrlFeed);
- return;
- }
- int pos;
- String url, thema;
- pos = seiteFeed.indexOf(MUSTER_FEED_SUCHEN);
- pos += MUSTER_FEED_SUCHEN.length();
- while (!Config.getStop() && (pos = seiteFeed.indexOf(MUSTER_FEED_SUCHEN, pos)) != -1) {
- try {
- pos += MUSTER_FEED_SUCHEN.length();
- url = seiteFeed.extract("", "<", pos);
- if (thema.isEmpty()) {
- thema = seiteFeed.extract("title=\"", "\"", pos);
- Log.errorLog(132326564, "Thema: " + strUrlFeed);
- }
- String[] add = new String[]{url, thema};
- listeThemen.addUrl(add);
- }
- } catch (Exception ex) {
- Log.errorLog(732154698, ex, "Weitere Seiten suchen");
+ // Aus der bisherigen URL mögliche HD-URLs bauen
+ // Beispiele für normale URLs: 960-1.mp4, 960-1_1.mp4, 960-3.mp4
+ // Beispiele für HD-URLs: 1280-1.mp4, 1280-1_1.mp4, 1280-3.mp4
+ // Leider existiert aber keine 1:1-Abbildung von normaler URL auf HD-URL
+ // Deshalb werden mehrere mögliche Urls erstellt und dann durchprobiert
+ private Set buildPossibleHdUrls(final String path, final String fileName) {
+ // erste Url: 960 durch 1280 ersetzen
+ final String hdFileName1 = fileName.replace(URL_PART_NORMAL, URL_PART_HD);
+ // zweite Url: wenn URL _1.mp4 lautet => _1 entfernen, sonst _1 hinzufügen
+ final String hdFileName2 = hdFileName1.endsWith("_1.mp4") ? hdFileName1.replace("_1", "")
+ : hdFileName1.replace(".mp4", "_1.mp4");
+
+ final Set urls = new HashSet<>();
+ urls.add(path + hdFileName1);
+ urls.add(path + hdFileName2);
+
+ return urls;
+ }
+
+ // Versucht aus der normalen Url eine HD-Url zu bauen
+ private String determineHdFromNormal(final String urlNormal) {
+ String urlHd = "";
+
+ // Dateiname extrahieren
+ final int indexLastSlash = urlNormal.lastIndexOf('/');
+ if (indexLastSlash > 0) {
+ final String fileName = urlNormal.substring(indexLastSlash + 1);
+ final String path = urlNormal.substring(0, indexLastSlash + 1);
+
+ // für URLs, die mit 960 beginnen, prüfen ob eine mit 1280 auch existiert
+ if (fileName.startsWith(URL_PART_NORMAL)) {
+ final Set urls = buildPossibleHdUrls(path, fileName);
+
+ for (final String url : urls) {
+ if (urlExists(url)) {
+ urlHd = url;
+ break;
}
+ }
}
+ }
+
+ return urlHd;
}
- private void warten(long i) {
- // Sekunden warten
+ private void filmSuchen_old(final String urlSendung, final String thema, final String titel,
+ final long dauer, final String datum, final String zeit) {
+ try {
+ meldung(urlSendung);
+ final GetUrl getUrl = new GetUrl(getWartenSeiteLaden());
+ seite2 = getUrl.getUri(SENDERNAME, urlSendung, StandardCharsets.UTF_8, 1, seite2, "");
+ if (seite2.length() == 0) {
+ Log.errorLog(612031478, "Leere Seite: " + urlSendung);
+ return;
+ }
+ String url = seite2.extract(" 5
+ && !thema.equalsIgnoreCase(THEMA_ALPHA_CENTAURI)) {
+ break;
+ }
+ pos += MUSTER_FILM_SUCHEN1.length();
+ url = seite1.extract("documentId=", "&", pos);
+ if (url.contains("\"")) {
+ url = url.substring(0, url.indexOf('"'));
+ }
+ if (url.equals("")) {
+ continue;
+ }
+ url = url.replace("&", "&");
+ datum = seite1.extract("", "<", pos);
+ datum = datum.replace("Uhr", "").trim();
+ if (datum.contains("|")) {
+ zeit = datum.substring(datum.indexOf("|") + 1).trim();
+ zeit = zeit + ":00";
+ datum = datum.substring(0, datum.indexOf("|")).trim();
+ }
+ titel = seite1.extract("
", "<", pos);
+ dauer = seite1.extract("
", "<", pos);
try {
- // war wohl nix, warten und dann nochmal
- // timeout: the maximum time to wait in milliseconds.
- Thread.sleep(i * 1000);
- } catch (Exception ex) {
- Log.errorLog(369502367, ex, "2. Versuch");
+ final Matcher dauerMatcher = Pattern.compile(DAUER_REGEX_PATERN).matcher(dauer);
+ if (dauerMatcher.find()) {
+ d = Long.parseLong(dauerMatcher.group()) * 60;
+ }
+ } catch (final Exception ex) {
+ LOG.debug("Die dauer konnte nicht als long geparsed werden.", ex);
+ }
+ if (d == 0) {
+ Log.errorLog(915263621, "Dauer==0: " + strUrlFeed);
+ }
+ urlSendung = seite1.extract("";
- private static final String MUSTER_FILM_SUCHEN1 = "