[ 'channel' => [ 'type' => 'list', 'name' => 'Channel', 'title' => 'Select a channel to filter by', 'values' => [ 'All channels' => 'all', 'Achievement Hunter' => 'achievement-hunter', 'Camp Camp' => 'camp-camp', 'Cow Chop' => 'cow-chop', 'Death Battle' => 'death-battle', 'Friends of RT' => 'friends-of-rt', 'Funhaus' => 'funhaus', 'Inside Gaming' => 'inside-gaming', 'JT Music' => 'jt-music', 'Kinda Funny' => 'kinda-funny', 'Red vs. Blue Universe' => 'red-vs-blue-universe', 'Rooster Teeth' => 'rooster-teeth', 'RWBY Universe' => 'rwby-universe', 'Squad Team Force' => 'squad-team-force', 'Sugar Pine 7' => 'sugar-pine-7', 'The Yogscast' => 'the-yogscast', ] ], 'sort' => [ 'type' => 'list', 'name' => 'Sort', 'title' => 'Select a sort order', 'values' => [ 'Newest -> Oldest' => 'desc', 'Oldest -> Newest' => 'asc' ], 'defaultValue' => 'desc' ], 'first' => [ 'type' => 'list', 'name' => 'RoosterTeeth First', 'title' => 'Select whether to include "First" videos before they are public', 'values' => [ 'True' => true, 'False' => false ] ], 'episodeImage' => [ 'name' => 'Episode Image', 'type' => 'checkbox', 'defaultValue' => 'checked', 'title' => 'Select whether to include an episode image (if available)', ], 'limit' => [ 'name' => 'Limit', 'type' => 'number', 'required' => false, 'title' => 'Maximum number of items to return', 'defaultValue' => 10 ] ] ]; public function collectData() { if ($this->getInput('channel') !== 'all') { $uri = self::API . 'api/v1/episodes?per_page=' . $this->getInput('limit') . '&channel_id=' . $this->getInput('channel') . '&order=' . $this->getInput('sort') . '&page=1'; $htmlJSON = getSimpleHTMLDOM($uri); } else { $uri = self::API . '/api/v1/episodes?per_page=' . $this->getInput('limit') . '&filter=all&order=' . $this->getInput('sort') . '&page=1'; $htmlJSON = getSimpleHTMLDOM($uri); } $htmlArray = json_decode($htmlJSON, true); foreach ($htmlArray['data'] as $key => $value) { $item = []; if (!$this->getInput('first') && $value['attributes']['is_sponsors_only']) { continue; } $publicDate = date_create($value['attributes']['member_golive_at']); $dateDiff = date_diff($publicDate, date_create(), false); if (!$this->getInput('first') && $dateDiff->invert == 1) { continue; } $item['uri'] = self::URI . $value['canonical_links']['self']; $item['title'] = $value['attributes']['title']; $item['timestamp'] = $value['attributes']['member_golive_at']; $item['author'] = $value['attributes']['show_title']; $item['content'] = $this->getItemContent($value); $this->items[] = $item; } } protected function getItemContent(array $value): string { $content = nl2br($value['attributes']['description']); if (isset($value['attributes']['length'])) { $duration_format = $value['attributes']['length'] > 3600 ? 'G:i:s' : 'i:s'; $content = sprintf( 'Duration: %s

%s', gmdate($duration_format, $value['attributes']['length']), $content ); } if ($this->getInput('episodeImage') === true) { foreach ($value['included']['images'] ?? [] as $image) { if ($image['type'] == 'episode_image') { $content = sprintf( '

%s', $image['attributes']['medium'], $content, ); break; } } } return $content; } }