Вход | Регистрация

1С:Предприятие ::

Метки: 

Как в 1С получить данные из Яндекс.

Я
   ЭЦ
 
13.04.17 - 09:46
Господа !

Нужно в 1с 8.3 организовать возможность получать географические координаты точки по адресу из Яндекса или Google.
Аналогично тому как это делается в навигаторах.

Прошу подсказать какие есть пути для решения этой задачки.
С какой стороны к ней подойти.

Заранее благодарю за ценные советы.
 
  Рекламное место пустует
   pablo_escobar
 
1 - 13.04.17 - 09:51
Читайте описание api яндекс карт. Примеры есть на инфостарте.
   Numerus Mikhail
 
2 - 13.04.17 - 09:58
http запрос на апи геокодера яндекс
   ЭЦ
 
3 - 13.04.17 - 10:28
Про http запрос почитал - все понятно.
Не понятно как получить результат в 1С.
   rmil
 
4 - 13.04.17 - 10:34
Ответ в виде xml файла. Разбираешь этот файла.
   Numerus Mikhail
 
5 - 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) Ну пока хоть так.
Хотя конечно лучше бы без файлов обойтись
 
  Рекламное место пустует
   Numerus Mikhail
 
11 - 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";
Ответ = Соединение.Получить(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();

Примерно так без файла.


Список тем форума
  Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует