link = $link; $this->ip = $ip; $url = "http://ip-api.com/json/$ip?fields=49347"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); $data = json_decode($response, true); if ($data['status'] == 'fail') { $this->latitude = null; $this->longitude = null; $this->country = null; $this->country_code = null; $this->save(); return $this; } $this->latitude = $data['lat'] ?? null; $this->longitude = $data['lon'] ?? null; $this->country = $data['country'] ?? null; $this->country_code = $data['countryCode'] ?? null; $this->save(); return $this; } public function getRecords(string $link) { $link_interaction = []; $link_interaction = Link_interaction::where('link', $link)->get()->toArray(); return $link_interaction; } public function getCount(string $link) { $link_interaction = []; $link_interaction = Link_interaction::where('link', $link)->count(); return $link_interaction; } public function getCountryArray(string $link) { $link_interaction = []; $link_interaction = Link_interaction::where('link', $link)->select('country', Link_interaction::raw('count(*) as total'), 'country_code')->groupBy('country', 'country_code')->get()->toArray(); $country_list = []; foreach ($link_interaction as $country) { if ($country['country_code'] == null) { $country['emoji'] = '❓'; } else { $country['emoji'] = preg_replace_callback('/./', static fn (array $letter) => mb_chr(ord($letter[0]) % 32 + 0x1F1E5), $country['country_code']); } array_push($country_list, $country); } return $country_list; } public function getTotalInteractions(string $link) : int { $link_interaction = Link_interaction::where('link', $link)->count(); return $link_interaction; } public static function getTimes(string $link) { $link_interaction = []; $link_interaction = Link_interaction::where('link', $link)->select('created_at')->get()->toArray(); return $link_interaction; } public static function getCoordinates(string $link) { $coordinates = []; $link_interaction = Link_interaction::where('link', $link)->select('latitude', 'longitude')->get()->toArray(); foreach ($link_interaction as $interaction) { if ($interaction['latitude'] != null && $interaction['longitude'] != null) { array_push($coordinates, $interaction); } } return $coordinates; } }