diff --git a/bridges/SteamAppNewsBridge.php b/bridges/SteamAppNewsBridge.php new file mode 100644 index 00000000..3eedc4ab --- /dev/null +++ b/bridges/SteamAppNewsBridge.php @@ -0,0 +1,119 @@ + [ + 'name' => 'App ID', + 'title' => 'App ID (only digits). Find your App ID with steamdb.info', + 'type' => 'number', + 'exampleValue' => '730', + 'required' => true + ], + 'maxlength' => [ + 'name' => 'Max Length', + 'title' => 'Maximum length for the content to return, 0 for full content', + 'type' => 'number', + 'defaultValue' => 0 + ], + 'count' => [ + 'name' => 'Count', + 'title' => '# of posts to retrieve (default 20)', + 'type' => 'number', + 'defaultValue' => 20 + ] + ]]; + + public function collectData() + { + $api = 'https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/'; + // Example with params: https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/?appid=730&maxlength=0&count=20 + // More info at dev docs https://partner.steamgames.com/doc/webapi/ISteamNews + $url = $api . '?appid=' + . $this->getInput('appid') . '&maxlength=' + . $this->getInput('maxlength') . '&count=' + . $this->getInput('count'); + + // Get the JSON content + $json = getContents($url); + $json_list = json_decode($json, true); + + foreach ($json_list['appnews']['newsitems'] as $json_item) { + $this->items[] = $this->collectArticle($json_item); + } + } + + private function collectArticle($json_item) + { + $item = []; + $item['uri'] = preg_replace('[ ]', '%20', $json_item['url']); + $item['title'] = $json_item['title']; + $item['timestamp'] = $json_item['date']; + $item['author'] = $json_item['author']; + + # Fix /n + if (str_contains($item['uri'], 'steam_community_announcements')) { + $item['content'] = $this->replaceBBcodes($json_item['contents']); + } else { + $item['content'] = $json_item['contents']; + } + $item['uid'] = $json_item['gid']; + return $item; + } + + private function replaceBBcodes($text) + { + //$text = strip_tags($text); + $text = nl2br($text); + // BBcode array, all list available: https://steamcommunity.com/comment/ForumTopic/formattinghelp + $find = [ + '~\[h1\](.*?)\[/h1\]~s', + '~\[h2\](.*?)\[/h2\]~s', + '~\[h3\](.*?)\[/h3\]~s', + '~\[list\](.*?)\[/list\]~s', + '~\[olist\](.*?)\[/olist\]~s', + '~\[\*\]~s', + '~\[b\](.*?)\[/b\]~s', + '~\[i\](.*?)\[/i\]~s', + '~\[u\](.*?)\[/u\]~s', + '~\[strike\](.*?)\[/strike\]~s', + '~\[spoiler\](.*?)\[/spoiler\]~s', + '~\[noparse\](.*?)\[/noparse\]~s', + '~\[hr\]~s', + '~\[quote\](.*?)\[/quote\]~s', + '~\[code\](.*?)\[/code\]~s', + '~\{STEAM_CLAN_IMAGE\}~s', + '~\[url=([^"><]*?)\](.*?)\[/url\]~s', + '~\[img\](https?://[^"><]*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s' + ]; + // HTML tags to replace BBcode + $replace = [ + '

$1

', + '

$1

', + '

$1

', + '', + '
    $1
', + '
  • ', + '$1', + '$1', + '$1', + '$1', + '$1', // Just remove spoiler + '$1', // Just remove noparse + '
    ', + '
    $1
    ', + '$1', + 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/clans', + '$2', + '' + ]; + // Replacing the BBcodes with corresponding HTML tags + return preg_replace($find, $replace, $text); + } +}