Локация в ICMS2

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 21 августа 2015 в 15:20
Здравствуйте!

Нужно сделать автоопределения локации пользователей по ip, и исходя из его местоположения показывать контент.
И тут возникла небольшая проблема, айдишники городов которые возвращают api (https://find-ip.info/en/ или Яндекс.Карт) не совпадают с айдишниками городов в базе.

Кто знает откуда качали базу для ICMS2? Возможно там есть и API? Или может где можно слить другую базу?

Спасибо!
#2 21 августа 2015 в 20:26
Функция для InstantCMS 2.X, аргументом опционально передается объект модели. Определяет страну и отдает название и id из бд icms2.
Если надо определение именно города, то по аналогичной схеме модифицируйте данную функцию. Для России ipgeobase.ru отдает данные с точностью до города.

  1. function get_country_by_ip($model=null) {
  2.  
  3. if($model===null){
  4. $model = new cmsModel();
  5. }
  6.  
  7. $cached_geo = cmsUser::sessionGet('cached_geo');
  8. if($cached_geo){ return $cached_geo; }
  9.  
  10. $ch = curl_init();
  11. curl_setopt($ch, CURLOPT_URL, 'http://ipgeobase.ru:7020/geo?ip='.$_SERVER['REMOTE_ADDR']);
  12. curl_setopt($ch, CURLOPT_HEADER, false);
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  14. curl_setopt($ch, CURLOPT_TIMEOUT, 2);
  15. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
  16. curl_setopt($ch, CURLOPT_USERAGENT, 'InstantCMS');
  17.  
  18. $data = array();
  19.  
  20. if($out && is_object($out) && !empty($out->ip[0])){
  21. foreach ($out->ip[0] as $key=>$value) {
  22. $data[$key] = (string)$value;
  23. }
  24. }
  25.  
  26. // для отладки того, что отдает сервис
  27. //dump($data);
  28.  
  29. // определяем страну
  30. if(isset($data['country'])){
  31. $country = $model->getItemByField('geo_countries', 'alpha2', $data['country']);
  32. } else {
  33. $country = array('id'=>null,'name'=>null);
  34. }
  35.  
  36. cmsUser::sessionSet('cached_geo', $country);
  37.  
  38. return $country;
  39.  
  40. }
#3 22 августа 2015 в 11:26
Большое спасибо! smile

Похожие темы

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.