Füge EverSD News Bridge hinzu
This commit is contained in:
142
EverSDBridge.php
Normal file
142
EverSDBridge.php
Normal file
@ -0,0 +1,142 @@
|
||||
<?php
|
||||
class EverSDBridge extends BridgeAbstract {
|
||||
const NAME = 'EverSD News Bridge';
|
||||
const URI = 'https://eversd.com/news';
|
||||
const DESCRIPTION = 'EverSD News und Changelog.';
|
||||
const MAINTAINER = 'Akamaru';
|
||||
const CACHE_TIMEOUT = 3600; // 1 Stunde
|
||||
|
||||
public function getIcon() {
|
||||
return 'https://eversd.com/____impro/1/onewebmedia/favico.png';
|
||||
}
|
||||
|
||||
public function collectData() {
|
||||
$html = getSimpleHTMLDOM(self::URI);
|
||||
if (!$html) {
|
||||
die('Die Seite konnte nicht geladen werden.');
|
||||
}
|
||||
|
||||
$sections = $html->find('div[data-kind="SECTION"]');
|
||||
if (empty($sections)) {
|
||||
die('Keine Beiträge gefunden.');
|
||||
}
|
||||
|
||||
foreach ($sections as $section) {
|
||||
// Extrahiere Datum
|
||||
$dateElement = $section->find('h3.textheading3', 0);
|
||||
if (!$dateElement) {
|
||||
continue; // Überspringe, wenn kein Datum vorhanden ist
|
||||
}
|
||||
$date = trim($dateElement->plaintext);
|
||||
|
||||
// Suche nach dem Textbereich mit dem Hauptinhalt
|
||||
$textComponents = $section->find('div[data-specific-kind="TEXT"]');
|
||||
if (empty($textComponents)) {
|
||||
continue; // Überspringe, wenn kein Textbereich gefunden wurde
|
||||
}
|
||||
|
||||
// Finde die Komponente mit dem Titel und Link
|
||||
$titleElement = null;
|
||||
$mainContent = null;
|
||||
|
||||
foreach ($textComponents as $textComponent) {
|
||||
$linkElement = $textComponent->find('a.link4', 0);
|
||||
if ($linkElement) {
|
||||
$titleElement = $linkElement;
|
||||
$mainContent = $textComponent;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$titleElement) {
|
||||
continue; // Überspringe, wenn kein Titel gefunden wurde
|
||||
}
|
||||
|
||||
$title = trim($titleElement->plaintext);
|
||||
$uri = urljoin(self::URI, $titleElement->href);
|
||||
|
||||
// Extrahiere Changelog-Inhalt aus dem Haupttextbereich
|
||||
$content = '';
|
||||
|
||||
// Füge den Titel zum Content hinzu
|
||||
$content .= '<h1>' . $title . '</h1>';
|
||||
$content .= '<p>Datum: ' . $date . '</p>';
|
||||
|
||||
if ($mainContent) {
|
||||
// Suche nach allen Überschriften, Listen und Absätzen im Haupttextbereich
|
||||
$contentElements = $mainContent->find('h1, h2, h3, ul, p');
|
||||
|
||||
foreach ($contentElements as $element) {
|
||||
// Überspringe den Titel, den wir bereits hinzugefügt haben
|
||||
if ($element->tag == 'h1' && strpos($element->plaintext, $title) !== false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Überspringe spezielle Absätze am Ende
|
||||
if ($element->tag == 'p' &&
|
||||
(strpos($element->plaintext, 'not only for EverSD') !== false ||
|
||||
strpos($element->plaintext, 'Everyone can enjoy') !== false)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Füge andere Elemente zum Inhalt hinzu
|
||||
if ($element->tag == 'h2' || $element->tag == 'h3') {
|
||||
$content .= '<' . $element->tag . '>' . trim($element->plaintext) . '</' . $element->tag . '>';
|
||||
} elseif ($element->tag == 'ul') {
|
||||
$content .= $element->outertext;
|
||||
} elseif ($element->tag == 'p' && !empty(trim($element->plaintext))) {
|
||||
$content .= '<p>' . trim($element->plaintext) . '</p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Suche nach eingebetteten Videos
|
||||
$videoComponents = $section->find('div[data-specific-kind="VIDEO"]');
|
||||
if (!empty($videoComponents)) {
|
||||
foreach ($videoComponents as $videoComponent) {
|
||||
$iframe = $videoComponent->find('iframe', 0);
|
||||
if ($iframe && isset($iframe->src)) {
|
||||
$videoSrc = $iframe->src;
|
||||
$content .= '<p><iframe width="480" height="270" src="' .
|
||||
$videoSrc . '" frameborder="0" allowfullscreen></iframe></p>';
|
||||
// In der Regel gibt es nur ein Video pro Beitrag
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Suche nach Bildern/Galleries
|
||||
$galleryComponents = $section->find('div[data-specific-kind="GALLERY"]');
|
||||
if (!empty($galleryComponents)) {
|
||||
foreach ($galleryComponents as $galleryComponent) {
|
||||
$images = $galleryComponent->find('img');
|
||||
if (!empty($images)) {
|
||||
$content .= '<div class="gallery">';
|
||||
foreach ($images as $img) {
|
||||
if (isset($img->src)) {
|
||||
$content .= '<p><img src="' . $img->src . '" alt="' .
|
||||
(isset($img->alt) ? $img->alt : 'EverSD Bild') . '"></p>';
|
||||
}
|
||||
}
|
||||
$content .= '</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Erstelle ein neues Item
|
||||
$item = [];
|
||||
$item['title'] = $title;
|
||||
$item['uri'] = $uri;
|
||||
$item['timestamp'] = strtotime($date);
|
||||
$item['content'] = $content;
|
||||
$item['author'] = 'EverSD Team';
|
||||
|
||||
$this->items[] = $item;
|
||||
}
|
||||
|
||||
// Sortiere die Beiträge nach Datum (neueste zuerst)
|
||||
usort($this->items, function ($a, $b) {
|
||||
return $b['timestamp'] - $a['timestamp'];
|
||||
});
|
||||
}
|
||||
}
|
@ -16,6 +16,10 @@ Diese Sammlung enthält verschiedene Bridge-Implementierungen für RSS-Bridge, u
|
||||
### Evercade Bridge
|
||||
- **Beschreibung**: Generiert einen RSS-Feed für Evercade-Nachrichten
|
||||
|
||||
### EverSD News Bridge
|
||||
- **Beschreibung**: Generiert einen RSS-Feed für EverSD News und Changelogs
|
||||
- **Besonderheiten**: Extrahiert vollständige Changelog-Inhalte, Videos und Bilder
|
||||
|
||||
### Kemono Friends Music News Bridge
|
||||
- **Beschreibung**: Generiert einen RSS-Feed für Kemono Friends Musik Neuigkeiten
|
||||
|
||||
|
Reference in New Issue
Block a user