1

Экспорт/импорт объектов через remoteAPI с помощью crul

Тема: Экспорт/импорт объектов через remoteAPI с помощью crul

Доброе время суток!
Так как я только начал осваивать remote api возникла проблема с реализацией экспорта/импорта объектов через api запросы. Все это делается у меня в bash скриптах с помощью утилиты curl. Я просто не допонимаю до конца как это нужно сделать с помощью этой утилиты. До этого момента все шло хорошо, создание, удаление учетных записей и объектов например научился делать, но здесь не могу понять как при экспортировании объектов сформировать правильный json запрос. Пробовал типа:

crul -X POST "https://hst-api.wialon.com/wialon/ajax.html?svc=exchange/export_json&params=\{\"fileName\":\"user4\",\"json\":\{\"general\":\{\"n\":unit.getName(),\"uid\":unit.getUniqueId(),\"uid2\": unit.getUniqueId2(),\"ph\":unit.getPhoneNumber(),\"ph2\":unit.getPhoneNumber2(),\"psw\":unit.getAccessPassword(),\"hw\":\"WiaTag\"\}\}\}&sid=21431241241254"

Но понятно что здесь все не правильно, выдает что не верные параметры error 4 reason "WRONG_PARAMS". Не понимаю даже как правильно указать файл куда будет все экспортировано, если бы это был просто ответ то можно было бы его направить в файл "> otvet.wlp".  Импорт я вообще не понял как сделать. Читал wiki но не до конца так и не понимаю. Брал информацию по экспорту из https://forum.gurtam.com/viewtopic.php?id=6553 но как это все сделать с помощью утилиты curl не понял.

2

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Antonocom, try to execute your request like this:
curl -g -X POST 'http://deal.dev.gurtam.net:8004/wialon/ajax.html?svc=exchange/export_json&params={"fileName":"user4","json":{"general":{"n":"qqqqq","uid":"356567","uid2":"","ph":"+3454567567","ph2":"","psw":"","hw":"WiaTag"}}}&sid=018af4f78a3910242814fee654706c7d'

There is no need to escape all double qoutes and braces. Just put in single quotes and pass -g parameter (turn off curl globbing).

Solutions Department
Gurtam
3

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

С кавычками я понимаю, я не понимаю что нужно в параметры вставлять. Там нужно например "n":unit.getName() или до этого отдельным запросом получить имя и потом вставить уже его в параметр "n":"полученное имя отдельным запросом"? То есть сначала нужно отдельными запросами надергать информацию об объекте и потом эту информацию уже вставить в запрос export?  И с импортом я вообще не понял, как потом все эти параметры в запрос import вставлять.

4

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Antonocom, запрос exchange/export_json нужен только для того, чтобы получить в виде файла тот json, который самостоятельно сформировали. Это больше актуально для приложений, использующих Wialon SDK JS, у которых нет своего бэкэнда. Сначала собирается json-строка с соответствующими полями объекта в необходимом формате, затем она передаётся в этот запрос, в ответ сервер отправляет файл с этим json-ом, и в браузере пользователю предлагается его сохранить.
В вашем случае нет необходимости в использовании этого запроса. Можно сразу на серверной стороне сформировать json по объекту с нужными полями и отправить его пользователю в виде файла либо просто сохранить на диске.
Саму информацию по объекту(ам) можно получить одним запросом core/search_item(s) с необходимыми флагами.
Что же касается импорта - запрос exchange/import_json нужен для обратного действия, для того, чтобы из браузера в запрос передать файл, а в ответе получить json-строку из этого файла и затем на фронтенде на основании этого json-а вызвать запросы по созданию объектов.
В вашем случае также можно обойтись без этого запроса и с бэкэнда сразу вызывать запросы по созданию объектов с полями из файла.

Solutions Department
Gurtam
5

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Насчет импорта объектов из файла.
Пробую такую команду: curl -F import_file=@sdhsdhh "https://hst-api.wialon.com/wialon/ajax. … 942345eb78"
sdhsdhh - файл с экспортируемыми данными объекта
Выдает ошибку {"error":4,"reason":"WRONG_PARAMS"}
Curl формирует такой запрос, проверял на локальном компьютере:
POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: 192.168.100.2:8080
Accept: */*
Content-Length: 1804
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------28ffe3529874

------------------------------28ffe3529874
Content-Disposition: form-data; name="import_file"; filename="sdhsdhh"
Content-Type: application/octet-stream

{"advProps":{"label_color":"","monitoring_sensor":"","monitoring_sensor_id":"","motion_state_sensor_id":"","msgFilter":{"enabled":0,"lbsCorrection":0,"maxHdop":0,"maxSpeed":0,"minSats":0,"skipInvalid":0},"sensors_colors":"","sensors_colors_id":"","solid_colors":"","speed_colors":"","track_sensor":"","track_solid":"","track_speed":"","use_sensor_color":""},"afields":[],"aliases":[],"counters":{"cfl":16,"cneh":0,"cnkb":0,"cnm":0},"driving":{"error":0},"fields":[],"fuel":{"calcTypes":0,"fuelConsImpulse":{"maxImpulses":0,"skipZero":0},"fuelConsMath":{"idling":2,"suburban":7,"urban":10},"fuelConsRates":{"consSummer":10,"consWinter":12,"winterDayFrom":1,"winterDayTo":30,"winterMonthFrom":11,"winterMonthTo":1},"fuelLevelParams":{"extraFillingTimeout":0,"fillingsJoinInterval":300,"filterQuality":0,"flags":1,"ignoreStayTimeout":20,"minFillingVolume":20,"minTheftTimeout":0,"minTheftVolume":10,"theftsJoinInterval":300}},"general":{"hw":"WiaTag","n":"sdhsdhh","ph":"","ph2":"","psw":"","uid":"112321423536767","uid2":""},"hwConfig":{"fullData":1,"hw":"WiaTag","params":{}},"icon":{"lib":"5","url":"default.png"},"imgRot":"0","intervals":[],"mu":0,"profile":[],"reportProps":{"dailyEngineHoursRate":0,"driver_activity":{"type":0},"fuelRateCoefficient":0,"maxMessagesInterval":0,"mileageCoefficient":0,"speedLimit":0,"speedingMinDuration":1,"speedingMode":0,"speedingTolerance":10,"urbanMaxSpeed":0},"sensors":[],"trip":{"gpsCorrection":1,"maxMessagesDistance":10000,"minMovingSpeed":1,"minSat":2,"minStayTime":300,"minTripDistance":100,"minTripTime":60,"type":1},"type":"avl_unit","version":"b4"}

------------------------------28ffe3529874--
Подскажите как правильно с помощью curl сделать import из файла.

6

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

deal пишет:

В вашем случае также можно обойтись без этого запроса и с бэкэнда сразу вызывать запросы по созданию объектов с полями из файла.

Теперь понял. Просто создаем объект и потом присваиваем ему необходимые параметры которые берем из ранее сохраненного файла. В общем я не туда смотреть начал изначально.

7

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Появилась проблема с импортом сообщений во вновь созданный объект. В теме Помогите подобрать правильно запросы предложили такой вариант:

Remote API:
- речь обо всех настройках объекта?
- svc=render/create_messages_layer (timeFrom и timeTo задавайте соответственно, чтобы попали все сообщения - стандартно они хранятся 90 дней на хостинге), затем svc=exchange/export_messages
- svc=core/create_unit
- тоже уточните, что именно под этим понимается, новая конфигурация для прибора или импорт настроек объекта?
- svc=exchange/import_messages

import_messages импортирует только из файла
В теме https://forum.gurtam.com/viewtopic.php?pid=49373#p49373 написали что:

В виалон импортировать сообщения можно только из файла, как вы создадите этот файл не имеет значения: можете экспортировать сообщения из объекта, можете отредактировать файл хоть в ручную.

Тут и возникает проблема, я делаю Remote API запросы в bash скрипте с помощью утилиты curl, в этой теме мне объяснили что например импортировать объект придется вновь создавая его запросом svc=core/create_unit&params и другими запросами типа svc=unit/update_phone&params добавлять уже нужные параметры. Как здесь мне поступить, если указывается что импорт только из файла?

8

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Antonocom, можно поступить так:
1. первым curl-запросом создать объект и в ответе получить его id.
2. вторым curl-запросом задать все необходимые параметры объекта передав в параметрах id созданного объекта (телефонный номер, уникальный id, и т.д.). Несколько запросов можно объединить в батч.
3. третьим curl-запросом отправить файл с сообщениями передав id созданного объекта. Подробнее

Solutions Department
Gurtam
9

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

По первым двум пунктам у меня все работает но:

deal пишет:

3. третьим curl-запросом отправить файл с сообщениями передав id созданного объекта. Подробнее

вот тут и возникает у меня проблема я не могу понять как curl запросом передать файл. Не подскажите какой шаблон должен быть. Пробую такой вариант:

curl -F 'messages_filter_import_file=@/home/cent/objects/param' "https://hst-api.wialon.com/wialon/ajax.html?svc=exchange/import_messages&params={"itemId":12345678}&sid=098bab4adfd2e18254e2114cbe9f9eac"

Выдет ошибку
{"error":4,"reason":"WRONG_PARAMS"}

10

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Antonocom, sid лучше на форуме не показыват. Мало ли добрая душа зайдет под ним и бед понаделает...

Follow us on http://www.facebook.com/Gurtam
And take a look at new IoT backend by Gurtam.
11

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

shal пишет:

Antonocom, sid лучше на форуме не показыват. Мало ли добрая душа зайдет под ним и бед понаделает...

Спасибо, в следующий раз буду внимательней.
Но все таки возможно с помощью утилиты curl установленной в linux'е загрузить файл или нужно как то по другому?

12

Экспорт/импорт объектов через remoteAPI с помощью crul

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Antonocom, попробуйте так сформировать curl-запрос:

curl "https://hst-api.wialon.com/wialon/ajax.html?svc=exchange/import_messages&sid=<your_sid>&params=%7B\"itemId\":<your_item_id>%7D" -F "name=messages_filter_import_file" -F "filename=msgs.wln" -F "file=@/home/msgs.wln"
Solutions Department
Gurtam
13

Экспорт/импорт объектов через remoteAPI с помощью crul

(25/04/2018 12:39:45 отредактировано Antonocom)

Re: Экспорт/импорт объектов через remoteAPI с помощью crul

Благодарю вас за ответ, импорт теперь работает.
Экспорт я делаю через пару запросов
1. render/create_messages_layer
2. exchange/export_messages  в формате wln
результат в файл. Как я понимаю через командную строку утилитой curl это самый простой вариант.