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 } }