Example #1
0
 public function execute(LoggerInterface $log)
 {
     $cacheDriver = Application::instance()->getCacheDriver();
     $response = TwitchApiService::instance()->getStreamInfo()->getResponse();
     if (!empty($response)) {
         $cacheDriver->save('streaminfo', $response);
     }
 }
Example #2
0
 public function execute(LoggerInterface $log)
 {
     $app = Application::instance();
     $response = TwitchApiService::instance()->getPastBroadcasts()->getResponse();
     if (!empty($response)) {
         $app->getCacheDriver()->save('pastbroadcasts', $response);
     }
 }
Example #3
0
 /**
  * @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));
 }