• Модуль: 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;
}