|
Запуск из 1с js скрипта и получение обратно в 1с результата выполнения. | ☑ | ||
---|---|---|---|---|
0
EvgKolivagin
06.06.22
✎
16:54
|
Добрый день!
Есть api яндекс карт. С помощью этого api я получаю маршрут пешехода поделенный на отрезки между заданными точками. Как мне вернуть данные этого маршрута в 1с? Т.е. есть некая серверная процедура в 1с она должна инициировать построение маршрута через api яндекс, а потом результат построения этого маршрута должн вернуться в эту серверную процедуру, где далее должен быть обработан. Как это возможно сделать? Если это вообще возможно... |
|||
1
Asmody
06.06.22
✎
16:56
|
казалось бы, при чем тут js?
|
|||
2
Asmody
06.06.22
✎
16:57
|
В 1С для обращения к всяким веб api есть HTTPСоединение и Ко
|
|||
3
Выпрь
06.06.22
✎
17:00
|
А зачем на сервере маршрут строить?
В самой задаче маршрутизации главное не маршрут построить, а заказы поделить на рейсы. У Яндекса кстати есть маршрутизация. Не дёшево конечно |
|||
4
EvgKolivagin
06.06.22
✎
17:00
|
(2) Да есть, но обращаясь таким способом я получаю с помощью GET запроса текст html страницы скрипт при этом не выполняется или я не понимаю как этот результат обработать...
|
|||
5
Выпрь
06.06.22
✎
17:01
|
(4) в соседней ветке селениум рекомендуют
|
|||
6
Asmody
06.06.22
✎
17:01
|
(4) Потому что надо смотреть на то, что выполняется "под страницей".
У Яндекса все api неплохо документированы. |
|||
7
EvgKolivagin
06.06.22
✎
17:02
|
(3) У меня есть координаты точек, мне нужно узнать оптимальное время, которое понадобиться пешеходу на перемещение между этими точками, для этого я пытаюсь использовать api яндекс
|
|||
8
EvgKolivagin
06.06.22
✎
17:04
|
(6) Как мне под страницу заглянуть?)) js знаю плохо
|
|||
9
EvgKolivagin
06.06.22
✎
17:06
|
(6) Документацию Яндекс я изучал, но там все примеры заточены на вывод карты с маршрутом на html страницу, с этим я справился, сейчас мне каким- то образом надо возвращать данные о времени между точками маршрута в 1с
|
|||
10
EvgKolivagin
06.06.22
✎
17:11
|
(5) Я так понял, что селениум там рекомендуют для тестирования и тестирования node.js. Мне же надо как-то результат обычного js скрипта обработать и сделать это в 1с.
|
|||
11
EvgKolivagin
06.06.22
✎
17:14
|
Я много чего попробовал, но гдавный затык это как инициировать выполнение js скрипта на html странице программно из серверной процедуры 1с.
|
|||
12
Выпрь
06.06.22
✎
17:33
|
(11) или селениум или напрямую методы апи вызывать
|
|||
13
Asmody
06.06.22
✎
17:37
|
(11) Ты на 146% уверен, что построением маршрута занимается клиентский код на js?
|
|||
14
EvgKolivagin
06.06.22
✎
17:42
|
(13) У меня в js вызывается функция api яндекса, которая формирует маршрут, затем в подписке на событие я получаю данные о времени на каждом участке.
|
|||
15
EvgKolivagin
06.06.22
✎
17:44
|
(13) Вот кусок скрипта с подпиской:
// Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; // Записываем данные о времени на перемещение между точками в файл var xmlhttp = new XMLHttpRequest(); xmlhttp.overrideMimeType("application/json"); xmlhttp.open("POST", "http://127.0.0.1/lift_test_2/hs/YaMapHTTP/v1/route", false); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.send(JsonString); }); // Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; // Записываем данные о времени на перемещение между точками в файл var xmlhttp = new XMLHttpRequest(); xmlhttp.overrideMimeType("application/json"); xmlhttp.open("POST", "http://127.0.0.1/lift_test_2/hs/YaMapHTTP/v1/route", false); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.send(JsonString); }); |
|||
16
EvgKolivagin
06.06.22
✎
17:47
|
(15) Сорян чет фигня какая-то скопировалась в предыдущем посте
// Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; }); |
|||
17
EvgKolivagin
06.06.22
✎
17:59
|
Похоже это ограничение самого api и сохранять данные нельзя. Во всяком случае надо отдельно с яндексом об этом договариваться...
Результаты всех запросов к API должны быть отображены на карте Яндекса. Например, это данные, полученные с помощью сервиса геокодирования или маршрутизации. Если вам необходимо использовать данные API без отображения на карте, напишите нам. Спасибо всем кто учавствовал в обсуждении. |
|||
18
Гений 1С
гуру
06.06.22
✎
21:39
|
(0) хахаха, ты мою ветку видел: Проблема с ID точки (метки) СДЭК на яндекс-картах ?
|
|||
19
Гений 1С
гуру
06.06.22
✎
21:43
|
Попробуй кстати эту: https://infostart.ru/public/877596/
Там что-то про маршруты есть. Я ее использовал для добавления точек на карту. |
|||
20
Бабрак Кармаль
06.06.22
✎
22:31
|
(18) Дебилушко, ему это всё на сервере надо
Хахаха, гыгыгы. |
|||
21
ДедМорроз
06.06.22
✎
22:47
|
Ну а что мешает на сервере запустить браузер как отдельный процесс,а потом "поохотиться" за данными на странице?
То бишь расширение к браузеру приляпать? |
|||
22
EvgKolivagin
07.06.22
✎
09:18
|
(19) Дело в том, что на карту мне не нужно добавлять, мне нужны эти данные для своих вычислений.
|
|||
23
EvgKolivagin
07.06.22
✎
09:20
|
(21) Выглядит слишком не надежно из-за большого числа промежуточных элементов
|
|||
24
Garykom
гуру
07.06.22
✎
09:32
|
1. Почитать про лицензию
https://yandex.ru/dev/maps/commercial/ https://yandex.ru/dev/maps/jsapi/doc/2.1/terms/index.html?from=club 2. JS не надо, все делается через HTTPСоединение прекрасно. Сам проверял |
|||
25
EvgKolivagin
07.06.22
✎
10:20
|
(24) Через HTTPСоединение вы имеете ввиду это? https://yandex.ru/dev/maps/router/doc/concepts/about.html
|
|||
26
Бабрак Кармаль
07.06.22
✎
10:44
|
(21) > что мешает на сервере запустить браузер
Здравый смысл. |
|||
27
Garykom
гуру
07.06.22
✎
10:48
|
(25) Нет
Строка <script src="https://api-maps.yandex.ru/2.1/?apikey=ваш API-ключ&lang=ru_RU" type="text/javascript"> получает js файл внутри которого есть нужный new ymaps.multiRouter.MultiRoute( но если изучить код полученного модуля js от яндекса то там внутри будут обычные вызовы http запросов и вот 1С прекрасно может эмулировать эти запросы напрямую но это не законно на бесплатной версии апи яндекс карт |
|||
28
EvgKolivagin
07.06.22
✎
10:57
|
(27) Я так понял, чтобы все было по закону нужно просто докупить отдельный пакет который называется "Матрица Расстояний и Построение Маршрута". Этот пакет позволяет слать HTTP GET запросы и получать данные маршрута. И не нужно с js извращаться.
|
|||
29
Garykom
гуру
07.06.22
✎
11:01
|
||||
30
Garykom
гуру
07.06.22
✎
11:02
|
(29)+ ну или сразу https://infostart.ru/public/1000836/
|
|||
31
EvgKolivagin
07.06.22
✎
11:41
|
(30) Спасибо за наводку
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |