public function execute(LoggerInterface $log) { $cacheDriver = Application::instance()->getCacheDriver(); $response = TwitchApiService::instance()->getStreamInfo()->getResponse(); if (!empty($response)) { $cacheDriver->save('streaminfo', $response); } }
public function execute(LoggerInterface $log) { $app = Application::instance(); $response = TwitchApiService::instance()->getPastBroadcasts()->getResponse(); if (!empty($response)) { $app->getCacheDriver()->save('pastbroadcasts', $response); } }
/** * @return ApiConsumer */ public function getStreamInfo(array $options = array()) { return new CurlBrowser(array_merge(array('url' => new String('https://api.twitch.tv/kraken/streams/{user}/', array('user' => Config::$a['twitch']['user'])), 'contentType' => MimeType::JSON, 'onfetch' => function ($json) { if (empty($json) || isset($json['status']) && $json['status'] == 503) { throw new Exception('Twitch api down'); } // Last broadcast if the stream is offline // Called via static method, because we are in a closure $channel = TwitchApiService::instance()->getChannel()->getResponse(); if (empty($channel) || !is_array($channel)) { throw new Exception(sprintf('Invalid stream channel response %s', $channel)); } if (is_object($json) && isset($json['stream']) && $json['stream'] != null) { $json['stream']['channel']['updated_at'] = Date::getDateTime($json['stream']['channel']['updated_at'])->format(Date::FORMAT); } $json['lastbroadcast'] = Date::getDateTime($channel['updated_at'])->format(Date::FORMAT); $json['video_banner'] = $channel['video_banner']; $json['previousbroadcast'] = null; $json['status'] = $channel['status']; $json['game'] = $channel['game']; // Previous broadcast $app = Application::instance(); $broadcasts = $app->getCacheDriver()->fetch('pastbroadcasts'); if (!empty($broadcasts) && !empty($broadcasts['videos'])) { $broadcast = array(); $broadcast['length'] = $broadcasts['videos'][0]['length']; $broadcast['preview'] = $broadcasts['videos'][0]['preview']; $broadcast['url'] = $broadcasts['videos'][0]['url']; $broadcast['recorded_at'] = $broadcasts['videos'][0]['recorded_at']; $broadcast['views'] = $broadcasts['videos'][0]['views']; $json['previousbroadcast'] = $broadcast; // If there are previous broadcasts, base the last broadcast time on it, twitch seems to update the channel at random $json['lastbroadcast'] = Date::getDateTime($broadcast['recorded_at'])->add(new \DateInterval('PT' . $broadcast['length'] . 'S'))->format(Date::FORMAT); } // Just some clean up if (isset($json['_links'])) { unset($json['_links']); } return $json; }), $options)); }