|
Как в 1С получить данные из Яндекс. | ☑ | ||
---|---|---|---|---|
0
ЭЦ
13.04.17
✎
09:46
|
Господа !
Нужно в 1с 8.3 организовать возможность получать географические координаты точки по адресу из Яндекса или Google. Аналогично тому как это делается в навигаторах. Прошу подсказать какие есть пути для решения этой задачки. С какой стороны к ней подойти. Заранее благодарю за ценные советы. |
|||
1
pablo_escobar
13.04.17
✎
09:51
|
Читайте описание api яндекс карт. Примеры есть на инфостарте.
|
|||
2
Numerus Mikhail
13.04.17
✎
09:58
|
http запрос на апи геокодера яндекс
|
|||
3
ЭЦ
13.04.17
✎
10:28
|
Про http запрос почитал - все понятно.
Не понятно как получить результат в 1С. |
|||
4
rmil
13.04.17
✎
10:34
|
Ответ в виде xml файла. Разбираешь этот файла.
|
|||
5
Numerus Mikhail
13.04.17
✎
10:40
|
Ответ или в Json или XML
Если уж совсем туго пойдет, могу готовый код скинуть |
|||
6
Юрий Лазаренко
13.04.17
✎
10:43
|
&НаСервереБезКонтекста
Функция КоординатыПоАдресу(Адрес) АдресСервера = "geocode-maps.yandex.ru"; ПутьНаСервере = "/1.x/?geocode=" + Адрес + "&results=1"; Попытка ССЛ = Новый ЗащищенноеСоединениеOpenSSL; ИмяВыходногоФайла = ПолучитьимяВременногоФайла(); Соединение = Новый HTTPСоединение(АдресСервера,,,,, 5, ССЛ); Соединение.Получить(ПутьНаСервере, ИмяВыходногоФайла); ЗапросТекстовыйДокумент = Новый ТекстовыйДокумент; ЗапросТекстовыйДокумент.Прочитать(ИмяВыходногоФайла); ТекстОтвета = ЗапросТекстовыйДокумент.ПолучитьТекст(); Исключение //СоздатьСообщениеОбОшибке(РезультатВыполнения, "Загрузка звонков МТС", "Ошибка при выполнении запроса к API: " + ОписаниеОшибки()); КонецПопытки; ПозицияНачала = Найти(ТекстОтвета, "<pos>"); ПозицияКонца = Найти(ТекстОтвета, "</pos>"); Если ЗначениеЗаполнено(ПозицияНачала) И ЗначениеЗаполнено(ПозицияКонца) Тогда ПозицияНачала = ПозицияНачала + 5; Координаты = Сред(ТекстОтвета, ПозицияНачала, ПозицияКонца - ПозицияНачала); Координаты = СтрЗаменить(Координаты, " ", Символы.ПС); Возврат Координаты; Иначе Возврат ""; КонецЕсли; КонецФункции |
|||
7
ЭЦ
13.04.17
✎
10:43
|
Код былобы не плохо.
Не догоняю в каком виде я получу ответ в 1C. Неужели в виде файла? |
|||
8
Юрий Лазаренко
13.04.17
✎
10:44
|
В (6) достаточно тупой вариант - парсит ответ как текст, но в общем-то работает.
Не благодарите. |
|||
9
ЭЦ
13.04.17
✎
10:46
|
(6) За это спасибо - щас спробую
|
|||
10
ЭЦ
13.04.17
✎
10:47
|
(8) Ну пока хоть так.
Хотя конечно лучше бы без файлов обойтись |
|||
11
Numerus Mikhail
13.04.17
✎
10:49
|
Как-то так. Не помню уже зачем обрезал ответ сервера, мб это и не надо. В результате у тебя получается распарсенный джсон.
Процедура ПолучитьАдрес(Элемент) Параметры = Новый Структура; Параметры.Вставить("geocode", ""); Параметры.Вставить("kind", ""); Параметры.Вставить("results", "3"); Параметры.Вставить("format", "json"); Сервер = "geocode-maps.yandex.ru"; Ресурс = "1.x/?"; Параметры.geocode = "Большой+Сампсониевский+Проспект+дом+28"; //Это адрес Геолокация = ВыполнитьЗапрос(Сервер, Ресурс, Параметры); КонецПроцедуры Функция ВыполнитьЗапрос(Сервер, Знач Ресурс, Параметры) Для каждого Стр из Параметры Цикл Ресурс = Ресурс + Стр.Ключ + "=" + Стр.Значение + "&"; КонецЦикла; Ресурс = Лев(Ресурс,СтрДлина(Ресурс)-1); SSL = Новый ЗащищенноеСоединениеOpenSSL; HTTPConnect = Новый HTTPСоединение(Сервер,,,,,5,SSL); HTTPЗапрос = Новый HTTPЗапрос(Ресурс); HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"); ОтветСервера = HTTPConnect.Получить(HTTPЗапрос); РезультатЗапроса = ОтветСервера.ПолучитьТелоКакСтроку(); Если Найти(РезультатЗапроса, "/**/id") = 1 Тогда Пока Лев(РезультатЗапроса, 1) <> "{" Цикл РезультатЗапроса = Сред(РезультатЗапроса, 2); КонецЦикла; РезультатЗапроса = Лев(РезультатЗапроса, СтрДлина(РезультатЗапроса) - 2); КонецЕсли; Попытка Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(РезультатЗапроса); СтрОтвет = ПрочитатьJSON(Чтение); Чтение.Закрыть(); HTTPConnect = Неопределено; HTTPЗапрос = Неопределено; Возврат СтрОтвет; Исключение Сообщить("Ошибка чтения JSON: " + ОписаниеОшибки()); КонецПопытки; КонецФункции |
|||
12
Юрий Лазаренко
13.04.17
✎
11:03
|
(10) Без файлов можно, надо получать тело HTTP-ответа как строку.
В СП написано: HTTPОтвет (HTTPResponse) ПолучитьТелоКакСтроку (GetBodyAsString) Синтаксис: ПолучитьТелоКакСтроку(<Кодировка>) Возвращаемое значение: Тип: Строка; Неопределено. Неопределено - если при вызове методов ОтправитьДляОбработки или Получить был установлен параметр <ИмяВыходногоФайла>. Описание: Получает тело объекта как строку. |
|||
13
ЭЦ
13.04.17
✎
11:09
|
(6) - проверил - все зашибись
|
|||
14
ЭЦ
13.04.17
✎
11:10
|
Щас 11 попробую
|
|||
15
Юрий Лазаренко
13.04.17
✎
11:10
|
ССЛ = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,,5, ССЛ); Запрос = Новый HTTPЗапрос("/1.x/?" + Адрес + "&results=1"; Ответ = Соединение.Получить(Запрос); ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(); Примерно так без файла. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |