Release 1.1

XML-сервис

Добавлено: Пятница, 13 Марта, 2009 16:07       Размещено в: Новости проекта

Убедительная просьба, если Вам надо прокачать большое количество адресов, просьба заключать их в один запрос (не более 4000 Ip в одном запросе). В скором времени будет выложен пример скрипта на perl для прокачки лога Apache.
Теперь мы подключили XML-сервис обработки запросов на определение местонахождения российских IP-адресов. Сервис обслуживается специальным сервером. Сервер получает запрос в формате XML через POST HTTP запрос, отдает ответ также в формате XML.

Сервер расположен по адресу 194.85.91.253, порт 8090, работает по протоколу HTTP. Метод GET сервером не поддерживается. Минимальный заголовок HTTP запроса выглядит следующим образом:

POST /geo/geo.html HTTP/1.1
Content-length: CL
,где CL - длина тела запроса

Формат тела запроса выглядит следующим образом:
<ipquery [id="123456"]>
<fields>
[<all/>]
[<inetnum/>]
[<inet-descr/>]
[<inet-status/>]
[<city/>]
[<region/>]
[<district/>]
[<lat/>]
[<lng/>]
</fields>
<ip-list>
<ip>62.5.128.0</ip>
<ip>144.206.192.23</ip>
….
<ip>85.44.33.22</ip>
</ip-list>
</ipquery>
,где id=”123456″ - необязательный параметр. Это идентификатор запроса, в кавычках - любые числа и буквы, ответ сервера будет содержать указанный вами id; тег <fields> содержит поля, которые вы хотите получить:
<inetnum/> - блок адресов, к которому относится искомый ip-адрес
<inet-descr/> - описание блока по базе RIPE (www.ripe.net)
<inet-status/> - статус блока по базе RIPE
<city/> - город, к которому относится искомый ip
<region/> - регион, к которому относится искомый ip
<district/> - федеральный округ РФ, к которому относится искомый ip
<lat/> - географическая широта города
<lng/> - географическая долгота города
<all/> - все вышеперечисленные поля
В теге <ip-list> содержится список ip, которые надо прокачать. Это может быть один ip, или несколько. Максимальное количество 4000 ip в одном запросе. Каждый ip обрамляется тегами <ip> и </ip>.
Формат ответа сервера:
<ip-answer id=”123456″>
<ip value=”62.5.128.0″>
<inetnum>62.5.128.0 - 62.5.128.15</inetnum>
<inet-descr>Subnetwork for VA159-RIPE</inet-descr>
<inet-status>ASSIGNED PA</inet-status>
<city>Москва</city>
<region>Москва</region>
<district>Центральный</district>
<lat>55.755787</lat>
<lng>37.617634</lng>
</ip>
….
</ip-answer>
По каждому адресу, мы получаем список полей, которые мы указали в <fields> в запросе. В вышеуказанном примере ответа в запросе был указан <all/>.
Для обращения к серверу с вашего сайта, можно использовать стандартную библиотеку HTTP (имеется практически во всех языках программирования). Подключаемся к 194.85.91.253:8090, отправляем POST запрос на /geo/geo.html, в котором содержится <ipquery>…</ipquery>. В скором времени будут выложены примеры на различных языках.

Для обращения к серверу через форму нужно вставить такой HTML код:

<form name = “index” action = “http://194.85.91.253:8090/geo/geo.html” method = “post”>
<textarea name=”address”></textarea>
<input type=”submit” value=”OK”>
</form>

Названия формы и поля <textarea> не важны. В поле textarea вставляется запрос в формате XML, указанный выше. Например:

150 комментариев на тему “XML-сервис”:

Страницы: « 1 2 [3] 4 5 » Показать все комментарии

  1. 61
    bezhenez ответил:

    поправка

    $data = ” “.$_SERVER["REMOTE_ADDR"].”";

  2. 62
    Jozzyk ответил:

    чтото изменили в сервисе штоли? вчера (14мая) примерно с обеда у меня сервис перестал работать :-(

  3. 63
    Роман ответил:

    Администрация, почему изменяется код?
    Функция выводит город в обход прокси-сервера. Ещё одно условие, функция работает на сессиях, чтобы сократить постоянные запросы к серверу (в ихбежание бана) и ускорить выполнение скрипта.
    http://img33.imageshack.us/img33/5683/51773719.jpg

  4. 64
    Роман ответил:

    Функция выводит город в обход прокси-сервера. Ещё одно условие, функция работает на сессиях, чтобы сократить постоянные запросы к серверу (в ихбежание бана) и ускорить выполнение скрипта.

    http://teams7.narod.ru/geoip.zip

    п.с. извиняюсь за предыдущие ответы :)

  5. 65
    Администратор ответил:
    чтото изменили в сервисе штоли? вчера (14мая) примерно с обеда у меня сервис перестал работать

    Вчера были технические проблемы на хостинге, весь проект лежал. Сейчас все поправили.

  6. 66
    Администратор ответил:
    Администрация, почему изменяется код?
    Функция выводит город в обход прокси-сервера. Ещё одно условие, функция работает на сессиях, чтобы сократить постоянные запросы к серверу (в ихбежание бана) и ускорить выполнение скрипта.
    http://img33.imageshack.us/img33/5683/51773719.jpg

    Теги в коментах вырезаются из соображений безопасности. Спасибо за ваш пример.

  7. 67
    Администратор ответил:
    $data = “”.$_SERVER["REMOTE_ADDR"].””;
    $url = “http://194.85.91.253:8090/geo/geo.html”;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s
    curl_setopt($ch, CURLOPT_POST, 1); // set POST method
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // add POST fields
    $result = curl_exec($ch); // run the whole process
    curl_close($ch);

    возвращает пустоту((( хотя до майских выходных возвращал верно

    Вчера были течнические проблемы на хостинге, поэтому сервис не работал.

  8. 68
    Администратор ответил:

    phphel, спасибо за Ваш пример.

  9. 69
    Роман ответил:

    Уважаемая Администрация. Исходя исходя из моего примера с сессиями ( http://teams7.narod.ru/geoip.zip ), как быть с ботами, ведь они не принимают куки т.е. будут идти постоянные запросы на сервер и явно что их частота будет более 2 раз за секунду. Так как быть?

  10. 70
    Администратор ответил:
    Уважаемая Администрация. Исходя исходя из моего примера с сессиями ( http://teams7.narod.ru/geoip.zip ), как быть с ботами, ведь они не принимают куки т.е. будут идти постоянные запросы на сервер и явно что их частота будет более 2 раз за секунду. Так как быть?

    А Вы просто кешируйте адреса всех посетителей (и ботов и не ботов), а потом отправляйте нам в одном запросе, скажем каждые 3000 адресов. И все, никаких проблем.

  11. 71
    Андрей ответил:

    В каком смысле кешируйте? зашел посетитель на сайт и ему сразу же нужно показать информацию, относящуюся к его городу. Т.е. прям на первой странице. И он не будет ждать, пока в кэше накопится 3000 адресов. какой смысл в этом кэше? или как им пользоваться?
    и почему в последнее время стала появляться ошибка: Warning: fsockopen() [function.fsockopen]: unable to connect to 194.85.91.253:8090???
    и еще такой вопрос - в самом начал вы писали про бан диапазонов ip-адресов. как узнать, какие адреса там находятся?

  12. 72
    Администратор ответил:
    В каком смысле кешируйте? зашел посетитель на сайт и ему сразу же нужно показать информацию, относящуюся к его городу. Т.е. прям на первой странице. И он не будет ждать, пока в кэше накопится 3000 адресов. какой смысл в этом кэше? или как им пользоваться?
    и почему в последнее время стала появляться ошибка: Warning: fsockopen() [function.fsockopen]: unable to connect to 194.85.91.253:8090???
    и еще такой вопрос - в самом начал вы писали про бан диапазонов ip-адресов. как узнать, какие адреса там находятся?

    В вашем случае кэширование не нужно. Смысл в кеше - если вы собираете гео-статистику для своих нужд. Для онлайн показа нет другого выхода, кроме как обращаться к сервису по одному запросу. Пока бана нет. В какое время и какого числа возникла эта ошибка?

  13. 73
    Павел ответил:

    «Для онлайн показа нет другого выхода, кроме как обращаться к сервису по одному запросу.»

    Но в этом случае надо сохранять полученные данные в сессию или лучше в БД, чтобы пока юзер ходит по сайту не долбить сервер одинаковыми запросами…

    Предложение к администрации: было бы неплохо, если бы сервер отдавал еще такие данные:
    - кроме названия региона, его двухцифровой код;
    - телефонный код города

  14. 74
    Администратор ответил:
    «Для онлайн показа нет другого выхода, кроме как обращаться к сервису по одному запросу.»

    Но в этом случае надо сохранять полученные данные в сессию или лучше в БД, чтобы пока юзер ходит по сайту не долбить сервер одинаковыми запросами…

    Предложение к администрации: было бы неплохо, если бы сервер отдавал еще такие данные:
    - кроме названия региона, его двухцифровой код;
    - телефонный код города

    Мы рассмотрим ваше предложение. По какому стандарту Вы предлагаете показывать двухцифровой код?

  15. 75
    Павел ответил:

    Коды, которые используются в автомобильных номерах, ИНН и др. - на основе алфавитного порядка регионов в Конституции. http://ru.wikipedia.org/wiki/Коды_регионов п.3.1, только первые числа.

  16. 76
    Андрей ответил:

    Подскажите пожалуйста как можно получить весь список городов и регионов которые можно определить при помощи вашего XML-сервиса? Очень важно их получить. Заранее спасибо.

  17. 77
    Администратор ответил:
    Коды, которые используются в автомобильных номерах, ИНН и др. - на основе алфавитного порядка регионов в Конституции. http://ru.wikipedia.org/wiki/Коды_регионов п.3.1, только первые числа.

    Ясно, мы обязательно подумаем над Вашим предложением

  18. 78
    Администратор ответил:
    Подскажите пожалуйста как можно получить весь список городов и регионов которые можно определить при помощи вашего XML-сервиса? Очень важно их получить. Заранее спасибо.

    Пока никак. Единственный способ, скачать базу http://ipgeobase.ru/files/db/Main/db_files.tar.gz и ,пропарсив ее, выделить список всех городов и регионов.

  19. 79
    Roman ответил:

    Вот обновлённая версия скрипта на PHP. Добавлена функция определения, является ли клиент “ботом” или браузером. Это так сказать оптимизация скрипта, если боты заходят на сайт, чтобы попусту не долбить сервер IPGEOBASE одними и теми же запросами.
    скачать скрипт можно отсюда - http://teams7.narod.ru/geo.zip

  20. 80
    Александр ответил:

    Написал класс для получения данных с XML-сервиса. Класс имеет следующие возможности:
    - выбор данных, которые нужно получить;
    - принимает IP-адреса из строки или массива;
    - использует все возможности сервиса и легко расширяется;
    - конвертирование кодировки (windows-1251, koi8-r, utf-8);
    - проверка IP на корректность до запроса и варианты завершить работу или игнорировать;
    - возвращает данные в массиве или в XML;
    - проверяет используется ли proxy-сервер если данные нужно получить об IP с которого зашел посетитель;
    - настраивается максимальное кол-во IP-адресов, которое нужно проверить (по умолчанию 4000)

    В архиве две версии обычная (geo_ip.class.inc) и облегченная (geo_ip_light.class.inc). В облегченной нет проверки IP, нет конвертирования кодировки, нет проверки на proxy, в качестве IP может принимать массив IP и строку из одного IP-адреса и еще некоторых настроек нет.

    Ссылка для скачивания: http://narod.ru/disk/11507102000/geo_ip_class_v.0.92b.rar.html

  21. 81
    Макс ответил:

    Спасибо! Замечательный сервис!
    Ждем с нетерпением возможности смены кодировки на utf-8

  22. 82
    С.Тарасов ответил:

    Во-первых спасибо за возможность пользоваться вашей базой.

    Во-вторых подскажите пожалуйста, если у меня реализована схема при которой по ip каждого нового посетителя первоначально запрашивается информация с вашего сервера и вносится в собственную аналогичную базу, для того чтобы в последующем брать эту инф. из собственной бд. - правильна ли это или в дальнейшем собственная бд будет выдавать не верную информацию. Т.е. может ли происходить такая ситуация когда одному и томуже ip в разное время будет принадлежать разная гео.информация?

  23. 83
    Egor N Zuskin ответил:

    Класс на php для использования IPGeo в своих скриптах
    http://www.it2k.ru/projects/class-ipgeo/

  24. 84
    Nick ответил:

    Делаю запрос через jQuery ajax:
    function GetCurrentRegion(ip)
    {
    var xmlDocument = createXMLDocument(’81.176.18.63′);
    alert(xmlDocument);
    $j.ajax({
    url: “http://194.85.91.253:8090/geo/geo.html”,
    type: “POST”,
    processData: false,
    data: xmlDocument,
    dataType: “xml”,
    success: function(xml){
    var region = $j(xml).find(’region’).text();
    alert(’ip detecting - ‘+ region);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert(tesxtStatus);
    }
    })
    }
    //——————————————-
    function createXMLDocument(xml)
    {
    if( window.ActiveXObject && window.GetObject ) {
    var dom = new ActiveXObject( ‘Microsoft.XMLDOM’ );
    dom.loadXML( xml );
    return dom;
    }
    if( window.DOMParser )
    return new DOMParser().parseFromString( xml, ‘text/xml’ );
    }

    при вызове функции GetCurrentRegion из IE отрабатывает корректно, из других браузеров(FireFox, Opera, Chrome) получаю сообщение “error” (alert(tesxtStatus);) в мозилке Firebug 1.4.1 показывает результат запроса как “503 Method not implemented”

    я предполагаю что дело в том, что я подаю некорректный xml…
    Если это так, то как правильно его сформировать в javascript ?
    и если есть работающие во всех браузерах варианты запросов, не могли бы дать пример?

  25. 85
    Администратор ответил:
    Делаю запрос через jQuery ajax:
    function GetCurrentRegion(ip)
    {
    var xmlDocument = createXMLDocument(’81.176.18.63′);
    alert(xmlDocument);
    $j.ajax({
    url: “http://194.85.91.253:8090/geo/geo.html”,
    type: “POST”,
    processData: false,
    data: xmlDocument,
    dataType: “xml”,
    success: function(xml){
    var region = $j(xml).find(’region’).text();
    alert(’ip detecting - ‘+ region);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert(tesxtStatus);
    }
    })
    }
    //——————————————-
    function createXMLDocument(xml)
    {
    if( window.ActiveXObject && window.GetObject ) {
    var dom = new ActiveXObject( ‘Microsoft.XMLDOM’ );
    dom.loadXML( xml );
    return dom;
    }
    if( window.DOMParser )
    return new DOMParser().parseFromString( xml, ‘text/xml’ );
    }

    при вызове функции GetCurrentRegion из IE отрабатывает корректно, из других браузеров(FireFox, Opera, Chrome) получаю сообщение “error” (alert(tesxtStatus);) в мозилке Firebug 1.4.1 показывает результат запроса как “503 Method not implemented”

    я предполагаю что дело в том, что я подаю некорректный xml…
    Если это так, то как правильно его сформировать в javascript ?
    и если есть работающие во всех браузерах варианты запросов, не могли бы дать пример?

    “503 Method not implemented” - это сообщение отдается сервером в случае неподдерживаемого HTTP запроса. Сервер поддерживает только POST запросы. Соответственно все другие методы, в том числе и GET не обрабатываются, а выдается ошибка 503. Ajax-примеров, к сожалению, пока нет.

  26. 86
    Администратор ответил:
    Во-первых спасибо за возможность пользоваться вашей базой.

    Во-вторых подскажите пожалуйста, если у меня реализована схема при которой по ip каждого нового посетителя первоначально запрашивается информация с вашего сервера и вносится в собственную аналогичную базу, для того чтобы в последующем брать эту инф. из собственной бд. - правильна ли это или в дальнейшем собственная бд будет выдавать не верную информацию. Т.е. может ли происходить такая ситуация когда одному и томуже ip в разное время будет принадлежать разная гео.информация?

    База обновляется ежедневно. Поэтому описанная Вами ситуация имеет место быть. Сегодня какой-либо ip будет соответствовать одному городу, а завтра другому. Именно поэтому мы открыли такой сервис. Делая запрос, Вам не надо напрягаться насчет достоверности данных. Если же вы будут хранить данные у Вас, то необходим некий механизм синхронизации.

  27. 87
    Nick ответил:

    Присоединяясь к другим - огромное спасибо за ваш сервис!

    может быть кому потребуется, вот код на C#:

    const string ServiceUrl = “http://194.85.91.253:8090/geo/geo.html”;
    const string RequestData = “{0}”;
    string ip = “213.142.32.63″;

    // делаем сам запрос
    WebRequest req = WebRequest.Create(ServiceUrl);
    req.Method = “POST”;

    byte[] data = Encoding.Default.GetBytes(string.Format(RequestData,ip));
    req.ContentLength = data.Length;
    req.GetRequestStream().Write(data, 0, data.Length);
    WebResponse resp = req.GetResponse();

    StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.Default);
    string resString = reader.ReadToEnd();
    resp.Close();
    reader.Close();

    // парсим ответ (вытаскиваю имя региона)
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(resString);
    MyRegion = doc.SelectSingleNode(”ip-answer/ip/region”).InnerText;

  28. 88
    cCube ответил:

    База обновляется ежедневно в какое-то определенное время, или просто обновляется не реже чем раз в сутки? Это важно знать чтобы правильно сделать кэширование результатов, которые возвращает Ваш сервис, и соответственно, уменьшить нагрузку на него.

    П.С. у Вас на кнопке «Комментировать» одна буква «м».

  29. 89
    Шамиль ответил:

    Посоветуйте
    Как часто следует проводить валидацию ip адреса?
    То есть если запросы кешируются в моей базе, через какое время их желательно перепроверять у вас?

  30. 90
    Gennady ответил:

    хотелось бы увидеть следующую возможность:
    а именно постоянную ссылку
    http://194.85.91.253:8090/geo/ но!!! которая работает следующим образом:

    1. скрипт передает вашему сервису только 1 параметр, номер версии моей базы в формате скажем текущей даты(скажем 04102009:1700)
    2. если я еще не имею полную базу(первое обращение), то получаю полную базу
    3. если имею то получаю только изменения скажем между
    04102009:1700 (моя версия) и 06102009:0330 (актуальная ваша версия)
    скрипт импорта изменений (отработавший без ошибок), актуализирует дату, до скачанной, полная весит “копейки”, а изменения вообще крохи
    4. м.б данный функционал разрешать не всем а только зарегистрированным в системе сайтам

    получится, что фактически единожды скачав полную базу, я работаю с ней на своем сайте, с оптимальным интервалом скрипт по “крону” синхронизируется с вашей актуальной базой..
    конечно речь идет о сайтах с многотысячной аудиторией в день, которым не хочется быть забаненным или зависеть от временной недоступности вашего сервиса, (т.е с вероятностью ~99+% на основании своей версии от “вчера”) я смогу правильно определить регион пользователя, да и ваша нагрузка , думаю, существенно упадет.

    спасибо!

Страницы: « 1 2 [3] 4 5 » Показать все комментарии

Комментировать:

© 2007-2015 IpGeoBase