/** * Obtain the user information from Twitter. * * @return Response */ public function handleProviderCallback() { $package_from_twitter = Socialite::driver('twitter')->user(); if ($package_from_twitter) { $twitter_user = TwitterUser::where('twitter_id', $package_from_twitter->id)->first(); if (!$twitter_user) { $twitter_user = new TwitterUser(); } $twitter_user->twitter_id = $package_from_twitter->id; $twitter_user->name = $package_from_twitter->name; $twitter_user->screen_name = $package_from_twitter->nickname; $twitter_user->description = $package_from_twitter->user['description']; $twitter_user->utc_offset = $package_from_twitter->user['utc_offset']; if (@$package_from_twitter->user['profile_banner_url']) { $twitter_user->profile_background_image_url = $package_from_twitter->user['profile_banner_url']; } $twitter_user->profile_image_url = $package_from_twitter->user['profile_image_url']; $twitter_user->updated_timestamp_utc = time(); $twitter_user->created_timestamp_utc = time(); $twitter_user->oauth_token = Input::get('oauth_token'); $twitter_user->oauth_token_secret = Input::get('oauth_verifier'); $twitter_user->save(); $user = Auth::user(); if ($user && $user->temporary == 1) { Auth::logout(); } $user = Auth::user(); if ($user) { $user->twitter_user_id = $twitter_user->id; $user->updated_timestamp_utc = time(); $user->most_recent_ip = request()->ip(); $user->save(); } else { $user = User::where('twitter_user_id', $twitter_user->id)->first(); if (!$user) { $user = new User(); $username = $twitter_user->screen_name; $orig_username = $username; $i = 0; $username_exists = User::where('username', $username)->first(); while ($username_exists) { $username = $orig_username . "_" . $i++; $username_exists = User::where('username', $username)->first(); } $user->username = $username; $user->twitter_user_id = $twitter_user->id; $user->name = $twitter_user->name; $user->created_timestamp_utc = time(); } $user->updated_timestamp_utc = time(); $user->most_recent_ip = request()->ip(); $user->save(); } Auth::login($user); return view('auth/killwindow'); } else { return abort(401, 'Apparently, Twitter didn\'t like you.'); } }
/** * フォローしているユーザを登録 * @return [type] [description] */ public function createFrends($cursor = 0) { $param = array('screen_name' => env('SCREEN_NAME'), 'count' => 200); if ($cursor) { $param['cursor'] = $cursor; } $friends = $this->get('friends/list', $param); // var_dump($friends);exit; $now = \Carbon\Carbon::now('utc')->toDateTimeString(); foreach ($friends->users as $key => $value) { $attribute = ["name" => $value->name, "screen_name" => $value->screen_name, "description" => $value->description, 'created_at' => $now, 'updated_at' => $now]; // TODO: 性能はあまり良くない \App\Models\TwitterUser::updateOrCreate(['id' => $value->id], $attribute); } if ($friends->next_cursor) { self::createFrends($friends->next_cursor); } }
/** * いずれかのリストに属している全てのユーザを取得する * 事前にcreateOwnerList()を実行してDBにデータを作っておく * @return [type] [description] */ public function getExistListMember() { $members = \App\Models\TwitterUser::where('list_id', '!=', 0)->lists('screen_name', 'id')->toArray(); return $members; }
/** * Execute the console command. * * @return mixed */ public function handle() { $this->info('Start'); \Log::info("Start"); $list = \Twitter::call("Friend")->createFrends(); exit; // まずはリストとユーザを作成する \Twitter::call("Friend")->createFrends(); \Twitter::call("List")->createOwnerList(); \Twitter::call("List")->createAllListMembers(); $this->info('end'); exit; // 特定のリストから取得 とりあえず保存 $friends = \Twitter::call("List")->getListMembers(791288757311811584); $screen_name = "etc"; foreach ($friends as $user_id => $value) { try { $user = \App\Models\TwitterUser::find($user_id); $since_id = $user->since_id; $list_id = $user->list_id; $filePath = "/vagrant/image/{$screen_name}/{$list_id}/"; // echo $filePath;exit; // $this->info('create:'.$value["screen_name"].":".$user_id.' since_id:'.$since_id); $this->info('create:' . $value . ":" . $user_id . ' since_id:' . $since_id); $timeline = \Twitter::call("Status")->getAllTimeline($user_id, 0, $since_id); // タイムラインが0件 if (!count($timeline)) { continue; } $since_id = $timeline[0]->id; \Twitter::call("Timeline")->setFilePath($filePath); \Twitter::call("Timeline")->createImage($timeline); $user->since_id = $since_id; $user->save(); } catch (\Exception $e) { \Log::error($e->getMessage()); echo $e->getMessage() . "\n"; } } // 有効になっているリストから取得 $friends = \Twitter::call("List")->getValidListMember(); // var_dump($friends);exit; $screen_name = env('SCREEN_NAME'); foreach ($friends as $user_id => $value) { try { $user = \App\Models\TwitterUser::find($user_id); $since_id = $user->since_id; $list_id = $user->list_id; $filePath = "/vagrant/image/{$screen_name}/{$list_id}/"; // echo $filePath;exit; // $this->info('create:'.$value["screen_name"].":".$user_id.' since_id:'.$since_id); $this->info('create:' . $value . ":" . $user_id . ' since_id:' . $since_id); $timeline = \Twitter::call("Status")->getAllTimeline($user_id, 0, $since_id); // タイムラインが0件 if (!count($timeline)) { continue; } $since_id = $timeline[0]->id; \Twitter::call("Timeline")->setFilePath($filePath); \Twitter::call("Timeline")->createImage($timeline); $user->since_id = $since_id; $user->save(); } catch (\Exception $e) { \Log::error($e->getMessage()); echo $e->getMessage() . "\n"; } } \Log::info("end"); $this->info('end'); }