Страницы: 1
RSS
Запрос к GeoCoder-у Yandex
 
Здравствуйте, помогите пожалуйстав организации запроса и обработки ответа.  
1. Как отправить http запрос?  
2. Как получить ответ?  
2. Как обработать ответ?
 
ответ на все вопросы один: при помощи макроса на VBA.  
 
Вообще, какое отношение ваш вопрос имеет к Excel?
 
Суть такая, у меня есть таблица с координатами, соответственно долгота и шировта. хочу организовать цикл для конвертации этих координат в понятный любому адрес:    
 
страна, облость, район, город, улица, дом.  
 
Ну и далее оформлять в виде таблици с загаловками, пометками и всякими фигнюшками.  
 
А как организовать этот запрос и получить результат с помощью VBA не знаю, прошу помощи!!!  
Вот пример запроса:  
 
http://geocode-maps.yandex.ru/1.x/?geocode=37.611706,55.75862&key=API-ключ  
 
Причем можно как координаты в адрес, так и адрес в координаты
 
Забыл уточнить. эти операции будут производиться многократно. Каждый день
 
Выкладывайте пример файла с исходными данными и результатом,  
придумывайте другой алгоритм получения результата (т.к. API-ключ привязан к определённому имени сайта, и, если запрос идёт с другого сайта, ключ не сработает),  
и, тогда, может быть, за определённую сумму денег мы вам поможем.  
(сложно это всё - лучше даже не начинать)  
 
В принципе, можно и API-ключом попробовать, но нужно много времени на тестирование  
(да и вообще, Яндексом запрещено использовать подобные штуки где угодно, кроме онлайн-проектов)
 
{quote}{login=EducatedFool}{date=03.12.2010 03:45}{thema=}{post}Выкладывайте пример файла с исходными данными и результатом,  
придумывайте другой алгоритм получения результата (т.к. API-ключ привязан к определённому имени сайта, и, если запрос идёт с другого сайта, ключ не сработает),  
и, тогда, может быть, за определённую сумму денег мы вам поможем.  
(сложно это всё - лучше даже не начинать)  
 
В принципе, можно и API-ключом попробовать, но нужно много времени на тестирование  
(да и вообще, Яндексом запрещено использовать подобные штуки где угодно, кроме онлайн-проектов){/post}{/quote}  
API-ключ у меня есть, пробывал я запрос через браузер отправлять, все работает. Я в принцепе знаю что мне надо получить. трудность для меня составляет синтаксис, я незнаю какие методы, функции, процедуры организуют подключение, отправку запроса и получения ответного файла. Кстати говоря в ответ придет XML файл, его структуру я уже изучмил. Взять с него нужную информацию тоже не составит труда.  
В файле несколько столбцов. Нас интересуют два последних. Это долгота и широта, соответственно. В общем то для получения адреса больше ничего и не нужно. Вся остальная информация это уже конечные данные.
 
{quote}{login=Николай}{date=03.12.2010 03:05}{thema=}{post}  
 
http://geocode-maps.yandex.ru/1.x/?geocode=37.611706,55.75862&key=API-ключ  
 
{/post}{/quote}  
 
ActiveWorkbook.XmlImport URL:="http://geocode-maps.yandex.ru/1.x/?geocode=" & Sheets("Лист1").Cells(1, 2) & "&key=" & Sheets("Лист 1").Cells(1, 3), _  
          ImportMap:=Nothing, Overwrite:=True, Destination:=Sheets("Лист2").Range("A1")  
 
Так выглядит импорт XML
 
Sheets("x").Cells(x, x) Лист и ячейки где лежат данные, апи ключ, и координаты а там нужно будет сделать цикл по обработке всех строк
 
Imhost спасибо, а задача то и не так сложна) Получил ответ от сервера, Excel табличку строит на основе ответного xml файла, в которой все ясно раскладывается по полочкам.
 
Sub ZaprosNaYandex()  
Dim APIKey As String  
Dim HTMLzapros As String  
Dim Koordinat As String  
Dim Ogranichenie As String  
Dim Kolichestvo As String  
 
APIKey =" " 'API ключ  
' API ключ можно получить на yandex.ru, как показала практика, на локальных компьютерах проверка API ключей не производиться  
' я юзаю свой API ключ как дома так и на работе, хотя он зарегестрирован на рабочий домен  
HTMLzapros = "http://geocode-maps.yandex.ru/1.x/?geocode=" ' Запрос  
Koordinat = "37.611706,55.75862" ' Координаты которые необходимо перевести в словестное наименования места  
' Так же возможно сделать обратное преобразование, просто подставив "Россия, Москва, улица Тверская, 7" вместо координат  
Ogranichenie = 1 ' Параметр ограничения. Может принимать "0" и "1"  
Kolichestvo = 1  ' Клоичество результатов в ответе  
 
 
ActiveWorkbook.XmlImport _  
  URL:=HTMLzapros & Koordinat & "&rspn=" & Ogranichenie & "&" & "&results=" & Kolichestvo & "&" & "&key=" & APIKey, _  
  ImportMap:=Nothing, Overwrite:=True, Destination:=Sheets("Лист2").Range("A1")  
 
 
End Sub
 
Добавлю еще, Вчера когда юзал вышеуказанный код увидел, что число подключений и XML схем постоянно растет, допислал код. теперь все хорошо, теперь после получения нужной информации XML схема и подключение удоляются.  
 
Sub ZaprosNaYandex()  
Dim APIKey As String  
Dim HTMLzapros As String  
Dim Koordinat As String  
Dim Ogranichenie As String  
Dim Kolichestvo As String  
Dim LastRows As Integer  
Dim i As Integer  
Dim otvet As XmlMaps  
 
APIKey = " " 'API ключ  
' API ключ можно получить на yandex.ru, как показала практика, на локальных компьютерах проверка API ключей не производиться  
' я юзаю свой API ключ как дома так и на работе, хотя он зарегестрирован на рабочий домен  
HTMLzapros = "http://geocode-maps.yandex.ru/1.x/?geocode=" ' Запрос  
Koordinat = "37.611706,55.75862" ' Координаты которые необходимо перевести в словестное наименования места  
' Так же возможно сделать обратное преобразование, просто подставив "Россия, Москва, улица Тверская, 7" вместо координат  
Ogranichenie = 0 ' Параметр ограничения. Может принимать "0" и "1"  
Kolichestvo = 1  ' Клоичество результатов в ответе  
 
Application.ScreenUpdating = False  
 
LastRows = Sheets("Лист1").UsedRange.Rows.Count  
 
For i = 1 To LastRows  
' Здесь форматируються координаты и сохраняются в переменную  
' Для дальнейшей подстановке в запрос  
Koordinat = Replace(Sheets("Лист1").Cells(i, 8), ",", ".") & "," & Replace(Sheets("Лист1").Cells(i, 7), ",", ".")  
 
   If i = 1 Then  
       ActiveWorkbook.XmlImport _  
          URL:=HTMLzapros & Koordinat & "&rspn=" & Ogranichenie & "&" & "&results=" & Kolichestvo & "&" & "&key=" & APIKey, _  
          ImportMap:=Nothing, Overwrite:=True, Destination:=Sheets("Лист2").Cells(i, 1)  
   Else  
       ActiveWorkbook.XmlImport _  
          URL:=HTMLzapros & Koordinat & "&rspn=" & Ogranichenie & "&" & "&results=" & Kolichestvo & "&" & "&key=" & APIKey, _  
          ImportMap:=Nothing, Overwrite:=True  
   End If  
 
   If Sheets("Лист2").Cells(i, 16) <> "other" Then  
       Sheets("Лист1").Cells(i, 9) = Sheets("Лист2").Cells(1, 16)  
   Else  
       Sheets("Лист1").Cells(i, 9) = Sheets("Лист2").Cells(1, 15)  
   End If  
Next i  
 
   ActiveWorkbook.Connections("Подключение").Delete  
   ActiveWorkbook.XmlMaps("ymaps_карта").Delete  
 
Sheets("Лист2").Cells.Delete Shift:=xlUp  
 
Application.ScreenUpdating = True  
 
End Sub
Страницы: 1
Читают тему
Наверх