diff --git a/bridges/RoosterTeethBridge.php b/bridges/RoosterTeethBridge.php new file mode 100644 index 00000000..496c7de8 --- /dev/null +++ b/bridges/RoosterTeethBridge.php @@ -0,0 +1,107 @@ + array( + 'channel' => array( + 'type' => 'list', + 'name' => 'Channel', + 'title' => 'Select a channel to filter by', + 'values' => array( + 'All channels' => 'all', + 'Achievement Hunter' => 'achievement-hunter', + 'Cow Chop' => 'cow-chop', + 'Death Battle' => 'death-battle', + 'Funhaus' => 'funhaus', + 'Inside Gaming' => 'inside-gaming', + 'JT Music' => 'jt-music', + 'Kinda Funny' => 'kinda-funny', + 'Rooster Teeth' => 'rooster-teeth', + 'Sugar Pine 7' => 'sugar-pine-7' + ) + ), + 'sort' => array( + 'type' => 'list', + 'name' => 'Sort', + 'title' => 'Select a sort order', + 'values' => array( + 'Newest -> Oldest' => 'desc', + 'Oldest -> Newest' => 'asc' + ), + 'defaultValue' => 'desc' + ), + 'first' => array( + 'type' => 'list', + 'name' => 'RoosterTeeth First', + 'title' => 'Select whether to include "First" videos before they are public', + 'values' => array( + 'True' => true, + 'False' => false + ) + ), + 'limit' => array( + '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) + or returnServerError('Could not contact Rooster Teeth: ' . $uri); + } else { + $uri = self::API + . '/api/v1/episodes?per_page=' + . $this->getInput('limit') + . '&filter=all&order=' + . $this->getInput('sort') + . '&page=1'; + + $htmlJSON = getSimpleHTMLDOM($uri) + or returnServerError('Could not contact Rooster Teeth: ' . $uri); + } + + $htmlArray = json_decode($htmlJSON, true); + + foreach($htmlArray['data'] as $key => $value) { + $item = array(); + + 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']; + + $this->items[] = $item; + } + } +}