Клуб API Карт

http запрос геокодеру

admin@mig-point.ru
6 августа 2015, 16:03

Пытаюсь получить ответ от геокодера,но ничего не получается.

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://geocode-maps.yandex.ru/1.x/?geocode='.urlencode('Москва,+Тверская+улица,+дом+7'));



$content = curl_exec($ch);
$xml = simplexml_load_file($content);
echo $xml->GeoObjectCollection->metaDataProperty->GeocoderResponseMetaData->found;

В итоге выдает Warning: simplexml_load_file(): I/O warning : failed to load external entity .

 

Код взял от сюда http://clubs.ya.ru/mapsapi/replies.xml?item_no=30004

В статье http://ymapsapi.ya.ru/replies.xml?item_no=81 используют параметр key, т.е API ключ.  Где его взять,и вообще зачем он нужен,если я хочу использовать бесплатную версию API карт ?

18 комментариев
Подписаться на комментарии к посту
http → https

пробовал,результат тот же

Скажите ip-адрес сервера, с которого делаете запрос.

Делаю запрос с сайта mig-point.ru  176.99.7.61

Вряд ли проблема в геокодере.

Предлагаю вам следующее:
1. распечатать массив с информацией от curl. Там будет вся отладочная информация и код ответа от сервера http_code:
print_r( curl_getinfo( $ch ) );
2. использовать rawurlencode() для запаковки адреса при обращении к геокодеру;
3. проверить, не сидите ли вы под прокси (например, если вы с локальной машины). Для прокси в curl необходимы параметры CURLOPT_PROXYPORT, CURLOPT_PROXY, CURLOPT_PROXYUSERPWD.

 [url] => https://geocode-maps.yandex.ru/1.x/?geocode=Москва,+Тверская+улица,+дом+7

    [content_type] => text/xml; charset=utf-8
    [http_code] => 200
    [header_size] => 417
    [request_size] => 225
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.308359
    [namelookup_time] => 3.1E-5
    [connect_time] => 0.208222
    [pretransfer_time] => 0.229907
    [size_upload] => 0
    [size_download] => 12293
    [speed_download] => 39865
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => 0
    [starttransfer_time] => 0.308312
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 77.88.21.106
    [primary_port] => 443
    [local_ip] => 176.99.7.61
    [local_port] => 37471
    [redirect_url] =>
А что в $content в итоге?
Разобрался вместо $xml = simplexml_load_file($content);
использовал new  $xml = SimpleXMLElement($content);
Все работает спасибо.
Еще вопрос, если делать запрос с локального сервера что пишем в параметрах CURLOPT_PROXYPORT, CURLOPT_PROXY, CURLOPT_PROXYUSERPWD?
Это нужно только если вы через прокси-сервер в интернет подключаетесь с вводом логина/пароля.
Нашел реализацию множественного геокодирования на сервере.
http://ymapsapi.ya.ru/replies.xml?item_no=81
Но как я понял из кода,сколько адресов столько и запросов на сервер. Можно ли пачкой отправить список адресов и получить ответ на каждый адрес?
Запускаю скрипт с локального сервера,нет ответа.
А есть данная реализация на php? Не совсем понимаю как совместить php код с модулем  multi-geocode,который использует асинхронную функцию.
Логика программы такая.
1.Принимаем от пользователя файл и формируем из него массив адресов.
2.Определяем координаты адресов.(multi-geocode)
3.Записываем данные в БД.
Т.е процедуры записи данных в БД написанную на php закидываем после then(fuction(res))  ?

Сохранение результатов геокодирования в БД запрещено условиями использования АПИ

 

http://clubs.ya.ru/mapsapi/replies.xml?item_no=58741

 

Вы можете переписать этот модуль на другой языковой стек. У нас пэхапэ не используется

rawurlencode() используем только для адреса вместо urlencode?
Т.е в моем случае
curl_setopt($ch, CURLOPT_URL, 'https://geocode-maps.yandex.ru/1.x/?geocode='.rawurlencode('Москва,+Тверская+улица,+дом+7'));
Если так,то результат тот же.
Как проверить сижу ли я на прокси? Запрос подается с сайта mig-point.ru который находится на хостинге у доброхоста.
Там нет прокси.