zend-blog-3-backend
43 строки · 1.0 Кб
1<?php
2
3namespace App\Service\IpInfo;
4
5class IpInfoDbClient implements IpInfoClientInterface
6{
7private string $key;
8
9/**
10* @param string $key
11*/
12public function __construct(string $key)
13{
14$this->key = $key;
15}
16
17public function getLocationInfo(string $ip): ?LocationInfo
18{
19if (filter_var($ip, FILTER_VALIDATE_IP)) {
20$params = http_build_query([
21'key' => $this->key,
22'ip' => $ip,
23'format' => 'json',
24]);
25
26$context = stream_context_create([
27'http' => [
28'timeout' => 5,
29],
30]);
31try {
32$json = file_get_contents('https://api.ipinfodb.com/v3/ip-city/?' . $params, false, $context);
33sleep(2);
34
35return LocationInfo::createFromArray(json_decode($json, true, 512, JSON_THROW_ON_ERROR));
36} catch (\Throwable $e) {
37return null;
38}
39}
40
41return null;
42}
43}
44