diff --git a/BrownDust2Bridge.php b/BrownDust2Bridge.php new file mode 100644 index 0000000..93cf758 --- /dev/null +++ b/BrownDust2Bridge.php @@ -0,0 +1,114 @@ + [ + 'name' => 'Language', + 'type' => 'list', + 'values' => [ + 'English' => 'en', + 'Japanese' => 'jp', + 'Korean' => 'kr', + 'Traditional Chinese (Taiwan)' => 'tw', + 'Simplified Chinese' => 'cn' + ], + 'defaultValue' => 'en' + ], + 'tag' => [ + 'name' => 'Category', + 'type' => 'list', + 'values' => [ + 'All' => 'all', + 'Notice' => 'notice', + 'Event' => 'event', + 'Maintenance' => 'maintenance', + 'Known Issues' => 'issue', + 'Developer Notes' => 'dev_note', + 'Package Deals' => 'package_deal' + ], + 'defaultValue' => 'all' + ], + 'limit' => [ + 'name' => 'Items Limit', + 'type' => 'number', + 'defaultValue' => 20 + ] + ] + ]; + + public function collectData() + { + $lang = $this->getInput('language'); + $tag = $this->getInput('tag'); + $limit = $this->getInput('limit') ?: 20; + + // Fetch JSON from API + $url = "https://www.browndust2.com/api/newsData_{$lang}.json"; + $json = getContents($url); + $data = json_decode($json, true); + + if (!isset($data['data']) || !is_array($data['data'])) { + throw new \Exception('Invalid API response'); + } + + $items = $data['data']; + + // Filter by tag if not "all" + if ($tag !== 'all') { + $items = array_filter($items, function ($item) use ($tag) { + return isset($item['attributes']['tag']) && $item['attributes']['tag'] === $tag; + }); + } + + // Reverse array for newest first + $items = array_reverse($items); + + // Limit items + $items = array_slice($items, 0, $limit); + + // Build feed items + foreach ($items as $newsItem) { + $attr = $newsItem['attributes']; + + $item = [ + 'title' => $attr['subject'] ?? 'No Title', + 'uri' => $this->getItemUrl($newsItem['id'], $lang), + 'timestamp' => isset($attr['publishedAt']) ? strtotime($attr['publishedAt']) : time(), + 'content' => $attr['NewContent'] ?? $attr['content'] ?? '', + 'categories' => isset($attr['tag']) ? [$attr['tag']] : [], + 'uid' => (string)$newsItem['id'], + 'author' => 'Neowiz' + ]; + + $this->items[] = $item; + } + } + + private function getItemUrl($id, $lang) + { + $localeMap = [ + 'en' => 'en-us', + 'jp' => 'ja-jp', + 'kr' => 'ko-kr', + 'tw' => 'zh-tw', + 'cn' => 'zh-cn' + ]; + + $locale = $localeMap[$lang] ?? 'en-us'; + return "https://www.browndust2.com/{$locale}/news/view?id={$id}"; + } +} diff --git a/README.md b/README.md index fe22d60..ae7f3b8 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,17 @@ Diese Sammlung enthält verschiedene Bridge-Implementierungen für RSS-Bridge, u - **Parameter**: - **Kategorie**: All, Announcements, Updates, Events +### [Brown Dust 2 News Bridge](https://bridge.ponywave.de/#bridge-BrownDust2Bridge) (Von Akamaru) +- **Beschreibung**: Zeigt die neuesten Nachrichten von Brown Dust 2 +- **Parameter**: + - **Language**: English, Japanese, Korean, Traditional Chinese (Taiwan), Simplified Chinese + - **Category**: All, Notice, Event, Maintenance, Known Issues, Developer Notes, Package Deals + - **Items Limit**: Maximale Anzahl an News-Items (Standard: 20) +- **Hinweise**: + - Unterstützt HTML-Content für neuere Artikel + - Autor ist auf "Neowiz" gesetzt + - Direktlinks zu den Artikeln auf der offiziellen Website + ### [BSI Cert Bridge](https://bridge.ponywave.de/#bridge-BSICertBridge) (Von Brawl) - **Beschreibung**: Sicherheitshinweise des Bürger-CERT vom Bundesministerium für Internetsicherheit