[ '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 ], 'tags' => [ 'name' => 'Tag Filter', 'title' => 'Comma-separated list of tags to filter by', 'type' => 'text', 'exampleValue' => 'patchnotes' ] ]]; public function collectData() { $apiTarget = '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 = $apiTarget . '?appid=' . $this->getInput('appid') . '&maxlength=' . $this->getInput('maxlength') . '&count=' . $this->getInput('count') . '&tags=' . $this->getInput('tags'); // 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); } }