{"id":21330498,"url":"https://github.com/friendsofredaxo/feeds","last_synced_at":"2025-10-28T20:50:48.206Z","repository":{"id":37588034,"uuid":"53517176","full_name":"FriendsOfREDAXO/feeds","owner":"FriendsOfREDAXO","description":" Importiert Daten aus API-Quellen wie RSS","archived":false,"fork":false,"pushed_at":"2025-07-03T12:57:08.000Z","size":6147,"stargazers_count":44,"open_issues_count":0,"forks_count":15,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-03T13:51:13.271Z","etag":null,"topics":["aggregator","php","redaxo","redaxo-addon","rss","youtube"],"latest_commit_sha":null,"homepage":"https://friendsofredaxo.github.io/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FriendsOfREDAXO.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-03-09T17:25:19.000Z","updated_at":"2025-07-03T12:57:11.000Z","dependencies_parsed_at":"2024-04-22T11:31:49.780Z","dependency_job_id":"cdfa26fd-44c7-4e08-b1c7-70f58955bbd1","html_url":"https://github.com/FriendsOfREDAXO/feeds","commit_stats":null,"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/FriendsOfREDAXO/feeds","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Ffeeds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Ffeeds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Ffeeds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Ffeeds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FriendsOfREDAXO","download_url":"https://codeload.github.com/FriendsOfREDAXO/feeds/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FriendsOfREDAXO%2Ffeeds/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264962490,"owners_count":23689821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aggregator","php","redaxo","redaxo-addon","rss","youtube"],"created_at":"2024-11-21T22:19:38.140Z","updated_at":"2025-10-28T20:50:48.186Z","avatar_url":"https://github.com/FriendsOfREDAXO.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Feeds\n\nREDAXO Feed Aggregator\n\n![Screenshot](https://raw.githubusercontent.com/FriendsOfREDAXO/feeds/assets/screen.png)\n\n## Features\n\n* Abruf von YouTube-, Vimeo- und RSS-Streams.\n* Dauerhaftes Speichern der Beiträge\n* Speicherung des Hauptmediums Im data-Ordner des AddOns\n* Nachträgliche Aktualisierung der Beiträge (z.B. nach einem Update / einer Korrektur)\n* Erweiterbar durch eigene Feed-Provider\n* Feeds können in Watson gesucht werden `feed suchbegriff`\n* Abruf aller oder einzelner Feeds per Cronjob\n\n## Migration zu Namespaces (REDAXO 6 Vorbereitung)\n\nDas Feeds-AddOn wurde für REDAXO 6 vorbereitet und nutzt jetzt moderne PHP-Namespaces. Die alten `rex_` Klassen sind weiterhin verfügbar, werden aber als deprecated markiert.\n\n### Neue Namespace-Struktur\n\nAlle Klassen wurden in den `FriendsOfRedaxo\\Feeds` Namespace migriert:\n\n| Alte Klasse | Neue Klasse |\n|-------------|-------------|\n| `rex_feeds_stream` | `FriendsOfRedaxo\\Feeds\\Stream` |\n| `rex_feeds_item` | `FriendsOfRedaxo\\Feeds\\Item` |\n| `rex_feeds_stream_abstract` | `FriendsOfRedaxo\\Feeds\\Stream\\AbstractStream` |\n| `rex_cronjob_feeds` | `FriendsOfRedaxo\\Feeds\\Cronjob` |\n| `rex_feeds_helper` | `FriendsOfRedaxo\\Feeds\\Helper` |\n\nStream-Implementierungen befinden sich im `FriendsOfRedaxo\\Feeds\\Stream` Namespace:\n- `rex_feeds_stream_rss` → `FriendsOfRedaxo\\Feeds\\Stream\\Rss`\n- `rex_feeds_stream_youtube_playlist` → `FriendsOfRedaxo\\Feeds\\Stream\\YoutubePlaylist`\n- `rex_feeds_stream_youtube_channel` → `FriendsOfRedaxo\\Feeds\\Stream\\YoutubeChannel`\n- `rex_feeds_stream_ics` → `FriendsOfRedaxo\\Feeds\\Stream\\Ics`\n- `rex_feeds_stream_vimeo_pro` → `FriendsOfRedaxo\\Feeds\\Stream\\VimeoPro`\n\n### Sanfte Migration\n\nDie alten Klassennamen funktionieren weiterhin, sind aber als deprecated markiert:\n\n```php\n// ✅ Funktioniert weiterhin (deprecated)\n$stream = rex_feeds_stream::get($stream_id);\n\n// ✅ Moderne Schreibweise (empfohlen)\n$stream = \\FriendsOfRedaxo\\Feeds\\Stream::get($stream_id);\n```\n\n**Empfehlung:** Migrieren Sie Ihren Code schrittweise zu den neuen Namespace-Klassen. Die alten Klassen werden in zukünftigen Versionen entfernt.\n\n## Installation\n\nIm REDAXO-Backend unter `Installer` abrufen und installieren\n\n## Verwendung\n\n### Einen neuen Feed einrichten\n\n1. Im REDAXO-Backend `AddOns` \u003e `Feeds` aufrufen,\n2. dort auf das `+`-Symbol klicken,\n3. den Anweisungen der Stream-Einstellungen folgen und\n4. anschließend speichern.\n\n\u003e **Hinweis:** Ggf. müssen zusätzlich in den Einstellungen von Feeds Zugangsdaten (bspw. API-Schlüssel) hinterlegt werden, bspw. bei Vimeo und YouTube.\n\n### Feed aktualisieren\n\nDie Feeds können manuell unter `AddOns` \u003e `Feeds` abgerufen werden, oder in regelmäßigen Intervallen über einen Cronjob abgerufen werden:\n\n1. Im REDAXO-Backend unter `AddOns` \u003e `Cronjob` aufrufen,\n2. dort auf das `+`-Symbol klicken,\n3. als Umgebung z.B. `Frontend` auswählen,\n4. als Typ `Feeds: Feeds abrufen` auswählen,\n5. den Zeitpunkt festlegen (bspw. täglich, stündlich, ...) und\n6. mit `Speichern` bestätigen.\n\nJetzt werden Feeds-Streams regelmäßig dann abgerufen, wenn die Website aufgerufen wird. [Weitere Infos zu REDAXO-Cronjobs](https://www.redaxo.org/doku/master/cronjobs).\n\n### Feed ausgeben\n\nUm ein Feed auszugeben, können die Inhalte in einem Modul oder Template per SQL oder mit nachfolgender Methode abgerufen werden, z.B.:\n\n```php\n\u003c?php \nuse FriendsOfRedaxo\\Feeds\\Stream;\n\n$stream_id = 1;\n// Mediamanager Typ mit feeds als erster Effekt\n$media_manager_type = 'feeds_thumb';\n\n// Moderne Schreibweise (empfohlen)\n$stream = Stream::get($stream_id);\n// Alternativ: $stream = rex_feeds_stream::get($stream_id); // Weiterhin möglich, aber deprecated\n\n$items = $stream-\u003egetPreloadedItems(); // Standard gibt 5 Einträge zurück, sonst gewünschte Anzahl übergeben\n    foreach($items as $item) {\n        // Titel ermitteln und alles verlinken\n        print '\u003ca href=\"'. $item-\u003egetUrl() .'\" title=\"'. rex_escape($stream-\u003egetTitle()) .'\"\u003e';\n        // Bild ausgeben\n        if($item-\u003egetMediaFilename()) {\n        print '\u003cimg src=\"'.rex_media_manager::getUrl($media_manager_type,$item-\u003egetId() .'.feeds').'\"  alt=\"'. rex_escape($item-\u003egetTitle()) .'\" title=\"'. rex_escape($item-\u003egetTitle()) .'\"\u003e';\n        }\n       print '\u003cp\u003e'.rex_escape($item-\u003egetContent()).'\u003c/p\u003e';\n       print '\u003c/a\u003e';\n    }\n?\u003e\n```\n\n## Bilder ausgeben mit dem Media Manager\n\nDie Bilder eines Feeds werden im AddOn-Data-Ordner unter `data/addons/feeds/media` gespeichert. Für die Ausgabe der Bilder stehen zwei gleichwertige Möglichkeiten zur Verfügung.\n\n### 1. Methode des Feed-Items\n\nNeu seit 5.0.0\n\n```php\n// Mit Media Manager Effekt\n$media_url = $item-\u003egetMediaManagerUrl('feeds_thumb');\necho '\u003cimg src=\"'.$media_url.'\" alt=\"Mein Bild\"\u003e';\n```\n\nErmitteln der Medien-Infos: \n\n```php\n$mediaInfo = $item-\u003egetMediaInfo('mein_media_type'); \nif ($mediaInfo) {\n    echo \"Breite: \" . $mediaInfo['width'];\n    echo \"Höhe: \" . $mediaInfo['height'];\n    echo \"Format: \" . $mediaInfo['format'];\n}\n```\n\n\n### 2. Direkt über den Mediamanager\n\nDies ist die traditionelle Methode zur Ausgabe des Mediums.\nWichtig hierbei die Endung `.feeds`. \n\n```php\n// $item ist ein rex_feeds_item Objekt\n$media_url = rex_media_manager::getUrl('feeds_thumb', $item-\u003egetId() .'.feeds');\necho '\u003cimg src=\"'.$media_url.'\" alt=\"Mein Bild\"\u003e';\n```\n\n\n## Komplettes Beispiel\n\n```php\n\u003c?php \nuse FriendsOfRedaxo\\Feeds\\Stream;\n\n$stream_id = 1;\n// Media Manager Typ wo der Feeds-Effekt als erster Effekt eingerichtet ist\n$media_manager_type = 'feeds_thumb';\n\n// Moderne Schreibweise (empfohlen)\n$stream = Stream::get($stream_id);\n// Alternativ: $stream = rex_feeds_stream::get($stream_id); // Weiterhin möglich, aber deprecated\n\n$items = $stream-\u003egetPreloadedItems(); // Standard gibt 5 Einträge zurück\n\nforeach($items as $item) {\n    // Titel ermitteln und verlinken\n    echo '\u003ca href=\"'. $item-\u003egetUrl() .'\" title=\"'. rex_escape($stream-\u003egetTitle()) .'\"\u003e';\n    \n    // Variante 1: Klassische Methode\n    echo '\u003cimg src=\"'.rex_media_manager::getUrl($media_manager_type, $item-\u003egetId() .'.feeds').'\" \n              alt=\"'. rex_escape($item-\u003egetTitle()) .'\"\u003e';\n              \n    // ODER Variante 2: Neue Methode\n    echo '\u003cimg src=\"'.$item-\u003egetMediaManagerUrl($media_manager_type).'\" \n              alt=\"'. rex_escape($item-\u003egetTitle()) .'\"\u003e';\n    \n    echo '\u003cp\u003e'.rex_escape($item-\u003egetContent()).'\u003c/p\u003e';\n    echo '\u003c/a\u003e';\n}\n?\u003e\n```\n\n## Media Manager Effekt einrichten\n\n1. Im REDAXO-Backend unter Media Manager einen neuen Typ anlegen\n2. Als ersten Effekt \"Datei: Aus Feeds einlesen\" auswählen\n3. Weitere gewünschte Effekte wie Resize, Crop etc. hinzufügen\n\n\u003e **Wichtig:** Der Feed-Effekt muss immer als erster Effekt in der Effektkette eingerichtet sein.\n\n\u003e **Hinweis:** Beide Methoden der Bildausgabe sind in ihrer Funktionalität identisch. Die klassische Methode wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt.\n\n\n## Einträge entfernen\n\nÜber das Cronjob-Addon lässt sich ein PHP-Cronjob ausführen, um nicht mehr benötigte Einträge aus der Datenbank zu entfernen. Dazu diese Codezeile ausführen und ggf. die Werte für `stream_id` und `INTERVAL` anpassen.\n\n```php\n\u003c?php rex_sql::factory()-\u003esetQuery(\"DELETE FROM rex_feeds_item WHERE stream_id = 4 AND createdate \u003c (NOW() - INTERVAL 2 MONTH)\"); ?\u003e\n```\n\nAlternativ: \n\n`\u003c?php rex_sql::factory()-\u003esetQuery(\"DELETE t1 FROM rex_feeds_item t1 JOIN (SELECT id FROM rex_feeds_item WHERE stream_id = 1 ORDER BY id DESC LIMIT 50,500) t2 ON t1.id = t2.id\"); ?\u003e`\n\nDies löscht nicht nach Datum, sondern nach Anzahl.\nVorteil: Wenn viele Posts immer geladen werden, kann sich die die DB sehr schnell aufblähen und Probleme beim Backup machen.\n\n\n\n## Eigenen Provider anmelden\n\nFeeds kann Inhalte auch anderer Quellen als die der mitglieferten Provider annehmen.\n\n### Moderne Schreibweise (empfohlen)\n\nHierzu erstellt man eine extended Class der `FriendsOfRedaxo\\Feeds\\Stream\\AbstractStream` im lib Ordner des eigenen AddOns oder des project-AddOns an, z.B.: `MyCustomStream`. Man kann sich dabei an die mitgelieferten Classes im Ordner `/lib/Stream` halten.\n\n```php\n\u003c?php\nuse FriendsOfRedaxo\\Feeds\\Stream\\AbstractStream;\n\nclass MyCustomStream extends AbstractStream\n{\n    // Ihre Implementierung hier\n}\n```\n\nAnschließend meldet man den neuen Provider wie folgt in der boot.php an:\n\n```php \nuse FriendsOfRedaxo\\Feeds\\Stream;\n\nStream::addStream(\"MyCustomStream\");\n```\n\n### Legacy-Schreibweise (deprecated)\n\nDie alte Schreibweise funktioniert weiterhin:\n\n```php\n// Erstellen einer extended Class der `rex_feeds_stream_abstract`\nclass rex_feeds_stream_my_class extends rex_feeds_stream_abstract\n{\n    // Ihre Implementierung hier\n}\n\n// Anmelden in der boot.php\nrex_feeds_stream::addStream(\"rex_feeds_stream_my_class\");\n```\n\n\n## Extension Points nutzen\n\nFeeds kommt mit 2 Extension Points, namentlich `FEEDS_STREAM_FETCHED` nach Abruf eines Streams sowie `FEEDS_ITEM_SAVED` nach dem Speichern eines neuen Eintrags.\n\nSo lassen sich nach Abruf eines oder mehrerer Streams bestimmte Aktionen ausführen.\n\nWeitere Infos zu Extension Points in REDAXO unter https://www.redaxo.org/doku/master/extension-points\n\n[Zum GitHub-Repository von Feeds](github.com/FriendsOfREDAXO/feeds/)\n\n\n## RSS Feed\n\nGebe einfach die URL zum Feed ein. ;-) \n\n\u003e Tipp: Mastodon-Feed auslesen: https://phpc.social/@REDAXO.rss \n\n\n## Vimeo Pro\n\nZum Auslesen des Streams werden User-ID, Access Token und ein Client Secret benötigt. \n\nAlle Infos dazu unter: https://developer.vimeo.com/api/guides/start\n\n\n## Feeds und YForm\n\nDie Stream-Tabelle lässt sich im YForm-Tablemanager importieren. Dadurch ist es möglich eine eigene Oberfläche für die Redakteure bereitzustellen. \n\n## Lizenz\n\nAddOn, siehe [LICENSE](https://github.com/FriendsOfREDAXO/feeds/blob/master/LICENCE.md)\n\nVendoren, siehe Vendors-Ordner des AddOns\n\n## Autor\n\n[Friends Of REDAXO](https://github.com/FriendsOfREDAXO)\n\n## Credits\n[Contributors](https://github.com/FriendsOfREDAXO/feeds/graphs/contributors)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendsofredaxo%2Ffeeds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffriendsofredaxo%2Ffeeds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendsofredaxo%2Ffeeds/lists"}