|
v7: Получение данных ВСД через веб интерфейс Меркурий | ☑ | ||
---|---|---|---|---|
0
avgsr
12.08.18
✎
08:27
|
Хочу печатную форму ВСД по УИД но не умею парсить хтмл.
Так пойдет? Предложения/пожелания/критика/тестирование приветствуется. Функция Норм(с) с1=СтрЗаменить(с,""",""""); с1=СтрЗаменить(с," "," "); с1=СтрЗаменить(с1,"</br/>",РазделительСтрок); с1=СтрЗаменить(с1,"<br/>",РазделительСтрок); с1=СтрЗаменить(с1,"<br>",РазделительСтрок); с1=СтрЗаменить(с1,"<span class="""">",""); с1=СтрЗаменить(с1,"<span class=""label label-warning"">",""); с1=СтрЗаменить(с1,"</span>",""); с1=СтрЗаменить(с1,"<span>",""); //юникод Пока Рез="" Цикл п=Найти(с1,"&#"); Если п=0 Тогда Прервать;КонецЕсли; п2=Найти(с1,";"); с2=Сред(с1,п+2,п2-п-2); ч2=Число(с2); Если ч2=0 Тогда Сообщить(с2);с1=СтрЗаменить(с1,"&#"+с2+";","");КонецЕсли; с3=?(ч2=8470,"№",с2); с3=?((ч2>31)и(ч2<127),Симв(ч2),с3);//" "-~ с3=?((ч2>1039)и(ч2<1104),Симв(ч2-848),с3);//А-я с1=СтрЗаменить(с1,"&#"+с2+";",с3); КонецЦикла; Возврат СокрЛП(с1); КонецФункции Функция УИД2сз(уид) сз = СоздатьОбъект("СписокЗначений"); хттп.open("POST","http://mercury.vetrf.ru/pub/operatorui?_language=ru&_action=showVetDocumentFormByUuid&uuid="+уид, 0); Попытка хттп.send(); Исключение Сообщить(ОписаниеОшибки(),"!!!"); КонецПопытки; Если сокрлп(хттп.status)<>"200" Тогда Сообщить(хттп.StatusText); Возврат сз;КонецЕсли; ис = хттп.responseText; Пока 1=1 Цикл ш="profile-info-name";//17 п=Найти(ис,ш); Если п=0 Тогда Прервать; КонецЕсли; ис=Сред(ис,п+19); ш="</div>"; п1=Найти(ис,ш); н=Лев(ис,п1-1); ш="profile-info-value"; п1=Найти(ис,ш); ис=Сред(ис,п1+20); ш="</div>"; п1=Найти(ис,ш); з=Лев(ис,п1-1); сз.ДобавитьЗначение(Норм(з),н); КонецЦикла; Возврат сз; КонецФункции |
|||
1
big
12.08.18
✎
17:50
|
а если просто получить ВСД через API Меркурия? Собссно, в штатном режиме получите всю информацию
|
|||
2
spectre1978
12.08.18
✎
18:03
|
(0) если у вас есть UUID ветеринарки, вы можете просто показать в браузере ее печатную форму, вызвав на исполнение URL вида
"http://mercury.vetrf.ru/pub/operatorui?_language=ru&_action=printVetDocumentByUuid&uuid=" + UUID |
|||
3
spectre1978
12.08.18
✎
18:03
|
точка с запятой после закрывающей " лишняя, забыл удалить
|
|||
4
spectre1978
12.08.18
✎
18:04
|
(1) почти всю. Не будет человекочитаемого номера.
|
|||
5
kupec
12.08.18
✎
18:47
|
А как этот файл через 1С 7.7 сохранить на жесткий диск компьютера? Может через curl? Что нужно прописать?
Пробовал вот так "curl.exe "+Строчка+" -O "+СокрЛП("C:\123.pdf"); вместо строчки адрес, в браузере открывается нормально, а вот курл молчит |
|||
6
kupec
12.08.18
✎
18:50
|
+(5) получилось....
"curl.exe -o C:\123.pdf "+Строчка |
|||
7
spectre1978
12.08.18
✎
19:24
|
(6) хм... А вот это полезное знание. Может пригодиться.
|
|||
8
avgsr
13.08.18
✎
03:05
|
(1) нету Ветис API в условиях задачи. Геморно это через апи все данные для печати вытаскивать, а тут в публичном доступе и всего почти одной строчкой кода...
(2) не хочу полную печатную форму, хочу свою укороченную, одна накладная = один лист с ВСД А вообще, интересовало мнение по поводу того как лучше распарсить. Тут пришла мысль что надо пройтись ещё по группам, сделать ирархию. Пока не придумал как лучше списки , вложенные списки и таблицы парсить :( |
|||
9
spectre1978
13.08.18
✎
06:30
|
(8) парсить дело неблагодарное. Поменяют HTML и отвалится полностью или частично ваш разбор, а вы даже и знать об этом не будете, пока не попробуете.
|
|||
10
big
13.08.18
✎
06:58
|
(9) парсинг в задачу не входит, а значит всё будет хорошо ;)
|
|||
11
avgsr
13.08.18
✎
08:23
|
(9) (10) а вообще зачем им было заморачиваться на QR коды и пихать туда ссылку на сайт?
Что бы любой мог получить информацию о ВСД? Так я это и пытаюсь реализовать, получить информацию о ВСД предложенными им методами, т.е. парсить хтмл. |
|||
12
spectre1978
13.08.18
✎
09:14
|
(11) ссылка может остаться неизменной. А вот HTML по этой ссылке на моей памяти менялся как минимум один раз.
|
|||
13
avgsr
13.08.18
✎
09:29
|
(12) я понял.
на моей памяти в ветис каждый день какие-то изменения... лечь и умереть и ничего не делать.... один раз для себя сделать алгоритм разбора, дальше проще будет его поменять. лучше бы пример дали рекурсивной функции разбора. |
|||
14
spectre1978
13.08.18
✎
10:34
|
(13) изменения есть, но они худо-бедно документируются, а серьезных, которые требуют изменения кода, не так много и о них обычно объявляют сильно заранее. Та же версия 2.0 апи была в состоянии беты очень долго, и никто не мешал при этом пользоваться предыдущей версией. И даже сейчас можно. А страницы сайта могут меняться совершенно спонтанно по желанию левой пятки разработчиков, и уведомлять об этом они никого не обязаны. Вы просто утром можете запустить свою утилиту, а она не будет работать, и все.
|
|||
15
big
13.08.18
✎
11:31
|
(13) Версия API и версия WEB - это разные вещи. Согласен, что получить страницу в html, это вполне рабочий вариант, но оставлять его основным ИМХО неверно. Кстати, распарсить ответ API совершенно не сложно, а скорее даже проще.
Из минусов варианта API это то, что запрос может тянуть довольно большой объем данных. 20 строк накладной весят около 1,5 Мб электронного ВСД |
|||
16
avgsr
13.08.18
✎
17:46
|
https://avatars.mds.yandex.net/get-pdb/1050037/72b0af25-a790-4816-8cb3-08a216e12bbe/s1200
кактотак, результат на 70% устраивает, тему можно закрывать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |