diff --git a/GrabfeldGeschichteBridge.php b/GrabfeldGeschichteBridge.php new file mode 100644 index 0000000..b625cb2 --- /dev/null +++ b/GrabfeldGeschichteBridge.php @@ -0,0 +1,112 @@ +find('table#tablepress-1', 0); + if (!$table) { + throw new \Exception('Konnte die Ausgaben-Tabelle nicht finden.'); + } + + // Durchlaufe alle Tabellenzeilen + foreach ($table->find('tbody tr') as $row) { + $columns = $row->find('td'); + if (count($columns) < 3) { + continue; // Überspringe Zeilen ohne ausreichend Spalten + } + + $column1 = $columns[0]->plaintext; + + // Nur Zeilen verarbeiten, die "Ausgabe" enthalten + if (!preg_match('/Ausgabe\s+(\d+)/u', $column1, $ausgabeMatch)) { + continue; + } + + $ausgabeNummer = $ausgabeMatch[1]; + + // Extrahiere das Datum (z.B. "November 2025") + $datum = null; + if (preg_match('/(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s+(\d{4})/u', $column1, $datumMatch)) { + $monat = $datumMatch[1]; + $jahr = $datumMatch[2]; + $datum = $this->parseGermanDate($monat, $jahr); + } + + // Extrahiere Cover-Bild URL + $coverImg = $columns[1]->find('img', 0); + $coverUrl = $coverImg ? $coverImg->src : null; + + // Baue absoluten URL falls nötig + if ($coverUrl && strpos($coverUrl, 'http') !== 0) { + $coverUrl = 'http://grabfeld-geschichte.de' . $coverUrl; + } + + // Erstelle RSS-Item + $item = []; + $item['title'] = 'Das Grabfeld Ausgabe ' . $ausgabeNummer; + $item['uri'] = self::URI; + $item['author'] = 'Verein für Heimatgeschichte im Grabfeld e.V.'; + $item['timestamp'] = $datum ?: time(); + + // Cover als Content einbinden (mit Proxy für HTTP-Bilder) + if ($coverUrl) { + $proxiedUrl = 'https://akamaru.de/scripts/img.php?url=' . urlencode($coverUrl); + $item['content'] = 'Cover Ausgabe ' . $ausgabeNummer . ''; + $item['enclosures'] = [$proxiedUrl]; + } else { + $item['content'] = 'Ausgabe ' . $ausgabeNummer; + } + + $this->items[] = $item; + } + } + + /** + * Konvertiert deutsches Datum (Monat + Jahr) zu Unix-Timestamp + * Setzt den Tag immer auf den 1. des Monats + */ + private function parseGermanDate($monat, $jahr) + { + $monate = [ + 'Januar' => '01', + 'Februar' => '02', + 'März' => '03', + 'April' => '04', + 'Mai' => '05', + 'Juni' => '06', + 'Juli' => '07', + 'August' => '08', + 'September' => '09', + 'Oktober' => '10', + 'November' => '11', + 'Dezember' => '12', + ]; + + if (isset($monate[$monat])) { + $monatNummer = $monate[$monat]; + return strtotime($jahr . '-' . $monatNummer . '-01'); + } + + return time(); // Fallback auf aktuelles Datum + } +} diff --git a/README.md b/README.md index fbcbf89..2c1484a 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,14 @@ Diese Sammlung enthält verschiedene Bridge-Implementierungen für RSS-Bridge, u ### [Girls' Frontline 2: Exilium News Bridge](https://bridge.ponywave.de/#bridge-GirlsFrontline2ExiliumNewsBridge) (Von Akamaru) - **Beschreibung**: Zeigt die neuesten Nachrichten von Girls' Frontline 2: Exilium +### [Grabfeld Geschichte Bridge](https://bridge.ponywave.de/#bridge-GrabfeldGeschichteBridge) (Von Akamaru) +- **Beschreibung**: Neue Ausgaben des Heimatsblatts "Das Grabfeld" als RSS-Feed +- **Hinweise**: + - Extrahiert Ausgaben aus der TablePress-Tabelle + - Cover-Bilder werden über HTTPS-Proxy geladen + - Datum wird auf den 1. des Monats gesetzt + - Autor ist auf "Verein für Heimatgeschichte im Grabfeld e.V." gesetzt + ### [GronkhTV Bridge](https://bridge.ponywave.de/#bridge-GronkhTVBridge) (Von Akamaru) - **Beschreibung**: Neue Uploads auf GronkhTV - **Parameter**: