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