• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/service/geoip/geoip2.php
  • Класс: BitrixMainServiceGeoIpGeoIP2
  • Вызов: GeoIP2::getDataResult
public function getDataResult($ip, $lang = '')
{
	$dataResult = $this->initReader();
	if (!$dataResult->isSuccess())
	{
		return $dataResult;
	}

	$geoData = new Data();
	$geoData->lang = ($lang != '' ? $lang : 'en');

	try
	{
		$type = $this->config['TYPE'] ?? 'city';

		if ($type == 'city')
		{
			$record = static::$reader->city($ip);
		}
		else
		{
			$record = static::$reader->country($ip);
		}

		$geoData->ipNetwork = $record->traits->network;

		$geoData->continentCode = $record->continent->code;
		$geoData->continentName = Encoding::convertEncodingToCurrent(($record->continent->names[$geoData->lang] ?? $record->continent->name));

		$geoData->countryCode = $record->country->isoCode;
		$geoData->countryName = Encoding::convertEncodingToCurrent(($record->country->names[$geoData->lang] ?? $record->country->name));

		if ($record instanceof GeoIp2ModelCity)
		{
			if (isset($record->subdivisions[0]))
			{
				/** @var GeoIp2RecordSubdivision $subdivision */
				$subdivision = $record->subdivisions[0];
				$geoData->regionCode = $subdivision->isoCode;
				$geoData->regionName = Encoding::convertEncodingToCurrent(($subdivision->names[$geoData->lang] ?? $subdivision->name));
				$geoData->regionGeonameId = $subdivision->geonameId;

				if ($subdivision->geonameId)
				{
					$geoData->geonames[$subdivision->geonameId] = $subdivision->names;
				}
			}

			if (isset($record->subdivisions[1]))
			{
				/** @var GeoIp2RecordSubdivision $subdivision */
				$subdivision = $record->subdivisions[1];
				$geoData->subRegionCode = $subdivision->isoCode;
				$geoData->subRegionName = Encoding::convertEncodingToCurrent(($subdivision->names[$geoData->lang] ?? $subdivision->name));
				$geoData->subRegionGeonameId = $subdivision->geonameId;

				if ($subdivision->geonameId)
				{
					$geoData->geonames[$subdivision->geonameId] = $subdivision->names;
				}
			}

			$geoData->cityName = Encoding::convertEncodingToCurrent(($record->city->names[$geoData->lang] ?? $record->city->name));
			$geoData->cityGeonameId = $record->city->geonameId;

			if ($record->city->geonameId)
			{
				$geoData->geonames[$record->city->geonameId] = $record->city->names;
			}

			$geoData->latitude = $record->location->latitude;
			$geoData->longitude = $record->location->longitude;
			$geoData->timezone = $record->location->timeZone;

			$geoData->zipCode = $record->postal->code;

			$geoData->ispName = $record->traits->isp;
			$geoData->organizationName = $record->traits->organization;
			$geoData->asn = $record->traits->autonomousSystemNumber;
			$geoData->asnOrganizationName = $record->traits->autonomousSystemOrganization;
		}

		$dataResult->setGeoData($geoData);
	}
	catch(ExceptionAddressNotFoundException $e)
	{
		// is it an error?
	}
	catch(ReaderInvalidDatabaseException $e)
	{
		$dataResult->addError(new Error(Loc::getMessage("geoip_geoip2_err_reading")));
	}

	return $dataResult;
}