token = TwitchToken::firstWhere('nick', 'localhorsttv'); if (!$this->token) { $this->line('please acquire a token for localhorsttv first'); return 1; } if ($this->token->hasExpired()) { $this->line('access token has expired, refreshing'); $this->token->refresh(); } $channels = Channel::where('twitch_chat', '!=', '')->where('twitch_id', '=', '')->get(); foreach ($channels as $channel) { try { $this->updateChannelId($channel); } catch (RequestException $e) { if ($e->response->status() == 401) { $this->token->refresh(); $this->updateChannel($channel); } } } Channel::where('twitch_id', '!=', '') ->where(function($query) { $query->where('join', true); $query->orWhere('chat', true); }) ->chunk(100, function ($channels) { $this->updateChannelInfos($channels); }); return Command::SUCCESS; } private function updateChannelId(Channel $channel) { $this->line($channel->twitch_chat); $login = substr($channel->twitch_chat, 1); $rsp = $this->token->request() ->get('/users', Query::build([ 'login' => $login, ])) ->throw(); foreach ($rsp['data'] as $user) { if ($user['login'] != $login) continue; $channel->twitch_id = $user['id']; $channel->save(); } } private function updateChannelInfos($channels) { $ids = $channels->pluck('twitch_id')->toArray(); $rsp = $this->token->request() ->get('/streams', Query::build([ 'user_id' => $ids, ])) ->throw(); foreach ($channels as $channel) { $data = null; foreach ($rsp['data'] as $info) { if ($info['user_id'] == $channel->twitch_id) { $data = $info; break; } } if (is_null($data)) { $channel->twitch_live = false; $channel->twitch_viewers = 0; } else { $channel->twitch_live = true; $channel->twitch_category = $data['game_id']; $channel->twitch_viewers = $data['viewer_count']; } $channel->save(); } } private $token; }