- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/service/geoip/maxmind.php
- Класс: BitrixMainServiceGeoIpMaxMind
- Вызов: MaxMind::getDataResult
public function getDataResult($ip, $lang = '')
{
$dataResult = new Result();
$geoData = new Data();
$geoData->lang = ($lang <> '' ? $lang : 'en');
if($this->config['USER_ID'] == '' || $this->config['LICENSE_KEY'] == '')
{
$dataResult->addError(new Error(Loc::getMessage('MAIN_SRV_GEOIP_MM_SETT_EMPTY')));
return $dataResult;
}
$res = $this->sendRequest($ip, $this->config['USER_ID'], $this->config['LICENSE_KEY']);
if($res->isSuccess())
{
$lang = $geoData->lang;
$data = $res->getData();
if (strtolower(SITE_CHARSET) != 'utf-8')
{
$data = Encoding::convertEncoding($data, 'UTF-8', SITE_CHARSET);
}
$geoData->ipNetwork = $data['traits']['network'] ?? null;
$geoData->continentCode = $data['continent']['code'] ?? null;
$geoData->continentName = $data['continent']['names'][$lang] ?? $data['continent']['name'] ?? null;
$geoData->countryCode = $data['country']['iso_code'] ?? null;
$geoData->countryName = $data['country']['names'][$lang] ?? $data['country']['name'] ?? null;
$geoData->regionCode = $data['subdivisions'][0]['iso_code'] ?? null;
$geoData->regionGeonameId = $data['subdivisions'][0]['geoname_id'] ?? null;
$geoData->regionName = $data['subdivisions'][0]['names'][$lang] ?? $data['subdivisions'][0]['name'] ?? null;
if ($geoData->regionGeonameId)
{
$geoData->geonames[$geoData->regionGeonameId] = $res->getData()['subdivisions'][0]['names'] ?? [];
}
$geoData->subRegionCode = $data['subdivisions'][1]['iso_code'] ?? null;
$geoData->subRegionGeonameId = $data['subdivisions'][1]['geoname_id'] ?? null;
$geoData->subRegionName = $data['subdivisions'][1]['names'][$lang] ?? $data['subdivisions'][1]['name'] ?? null;
if ($geoData->subRegionGeonameId)
{
$geoData->geonames[$geoData->subRegionGeonameId] = $res->getData()['subdivisions'][1]['names'] ?? [];
}
$geoData->cityName = $data['city']['names'][$lang] ?? $data['city']['name'] ?? null;
$geoData->cityGeonameId = $data['city']['geoname_id'] ?? null;
if ($geoData->cityGeonameId)
{
$geoData->geonames[$geoData->cityGeonameId] = $res->getData()['city']['names'] ?? [];
}
$geoData->latitude = $data['location']['latitude'] ?? null;
$geoData->longitude = $data['location']['longitude'] ?? null;
$geoData->timezone = $data['location']['time_zone'] ?? null;
$geoData->zipCode = $data['postal']['code'] ?? null;
$geoData->ispName = $data['traits']['isp'] ?? null;
$geoData->organizationName = $data['traits']['organization'] ?? null;
$geoData->asn = $data['traits']['autonomous_system_number'] ?? null;
$geoData->asnOrganizationName = $data['traits']['autonomous_system_organization'] ?? null;
}
else
{
$dataResult->addErrors($res->getErrors());
}
$dataResult->setGeoData($geoData);
return $dataResult;
}