maintainer = "logmanoriginal"; $this->name = "Twitch API Bridge"; $this->uri = "http://www.twitch.tv"; $this->description = "Returns the newest broadcasts or highlights by channel name using the Twitch API (v3)"; $this->parameters["Get channel without limit"] = array( 'channel'=>array( 'name'=>'Channel', 'required'=>true ), 'broadcasts'=>array( 'name'=>'Broadcasts', 'type'=>'list', 'values'=>array( 'Show broadcasts'=>'true', 'Show highlights'=>'false' ) ) ); $this->parameters["Get channel with limit"] = array( 'channel'=>array( 'name'=>'Channel', 'required'=>true ), 'limit'=>array( 'name'=>'Limit', 'type'=>'number' ), 'broadcasts'=>array( 'name'=>'Broadcasts', 'type'=>'list', 'values'=>array( 'Show broadcasts'=>'true', 'Show highlights'=>'false' ) ) ); } public function collectData(){ $param=$this->parameters[$this->queriedContext]; /* In accordance with API description: * "When specifying a version for a request to the Twitch API, set the Accept HTTP header to the API version you prefer." * Now we prefer v3 right now and need to build the context options. */ $opts = array('https' => array( 'method' => 'GET', 'header' => 'Accept: application/vnd.twitchtv.v3+json' ) ); $context = stream_context_create($opts); $channel = ''; $limit = TWITCH_LIMIT; $broadcasts = TWITCH_BROADCASTS; $requests = 1; if(isset($param['channel']['value'])) { $channel = $param['channel']['value']; } else { $this->returnClientError('You must specify a valid channel name! Received: &channel=' . $param['channel']['value']); } $this->channel = $channel; if(isset($param['limit']['value'])) { try { $limit = (int)$param['limit']['value']; } catch (Exception $e){ $this->returnClientError('The limit you specified is not valid! Received: &limit=' . $param['limit']['value'] . ' Expected: &limit= where is any integer number.'); } } else { $limit = TWITCH_LIMIT; } // The Twitch API allows a limit between 1 .. 100. Therefore any value below must be set to 1, any greater must result in multiple requests. if($limit < 1) { $limit = 1; } if($limit > 100) { $requests = (int)($limit / 100); if($limit % 100 != 0) { $requests++; } } if(isset($param['broadcasts']['value']) && ($param['broadcasts']['value'] == 'true' || $param['broadcasts']['value'] == 'false')) { $broadcasts = $param['broadcasts']['value']; } else { $this->returnClientError('The value for broadcasts you specified is not valid! Received: &broadcasts=' . $param['broadcasts']['value'] . ' Expected: &broadcasts=false or &broadcasts=true'); } // Build the initial request, see also: https://github.com/justintv/Twitch-API/blob/master/v3_resources/videos.md#get-channelschannelvideos $request = ''; if($requests == 1) { $request = 'https://api.twitch.tv/kraken/channels/' . $channel . '/videos?limit=' . $limit . '&broadcasts=' . $broadcasts; } else { $request = 'https://api.twitch.tv/kraken/channels/' . $channel . '/videos?limit=100&broadcasts=' . $broadcasts; } /* Finally we're ready to request data from the API. Each response provides information for the next request. */ for($i = 0; $i < $requests; $i++) { $response = $this->getSimpleHTMLDOM($request, false, $context); if($response == false) { $this->returnServerError('Request failed! Check if the channel name is valid!'); } $data = json_decode($response); foreach($data->videos as $video) { $item = array(); $item['id'] = $video->_id; $item['uri'] = $video->url; $item['title'] = htmlspecialchars($video->title); $item['timestamp'] = strtotime($video->recorded_at); $item['content'] = '
' . $item['title'] . ''; $this->items[] = $item; // Stop once the number of requested items is reached if(count($this->items) >= $limit) { break; } } // Get next request (if available) if(isset($data->_links->next)) { $request = $data->_links->next; } else { break; } } } public function getName(){ return (!empty($this->channel) ? $this->channel . ' - ' : '') . 'Twitch API Bridge'; } public function getCacheDuration(){ return 10800; // 3 hours } } ?>