26

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

Добрый день, tdt66!

Спасибо за обращение, там была ошибка, а именно - ответ был бинарным, а библиотека пыталась его декодировать как utf8, из-за этого и получался "битый" zip файл. Мы поправили это и Вы можете обновить ее и попробовать снова.

Про импорт - для импорта необходимо послать запрос c content-type: multipart/form-data, на данный момент библиотека этого не позволяет.

27

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

mitu wrote:

Добрый день, tdt66!

Спасибо за обращение, там была ошибка, а именно - ответ был бинарным, а библиотека пыталась его декодировать как utf8, из-за этого и получался "битый" zip файл. Мы поправили это и Вы можете обновить ее и попробовать снова.

Про импорт - для импорта необходимо послать запрос c content-type: multipart/form-data, на данный момент библиотека этого не позволяет.

да , все работает ! спасибо .
и будет ли доработка чтобы импорт был возможен ?
иначе насколько я понимаю надо в обход импорт организовывать ?

подпись сломали .. впрочем не удивительно
28

Python библиотека для Remote Api от Gurtam

(edited by mitu 24/03/2020 18:44:02)

Re: Python библиотека для Remote Api от Gurtam

Добрый день, tdt66!

Да, на данный момент только в обход (про доработку - увы сказать не могу когда будет)

Но это можно быстро реализовать своими руками с помощью библиотеки requests

import requests
import wialon


def upload(api, file, unit_id):
    files = {'file': file}
    base_url = 'https://hst-api.wialon.com/wialon/ajax.html?'

    url = base_url + 'svc=exchange/import_messages&params={"itemId":%s}&sid=%s'
    r = requests.post(url % (unit_id, api.sid), files=files)
    print(r.text)


def main(token):
    api = wialon.Wialon(scheme='https', port=443)
    unit_id = YOUR_UNIT_ID
    response = api.token_login({'token': token})
    api.sid = response['eid']
    try:
        with open('filename.zip', 'rb') as f:
            upload(api, f, unit_id)
    finally:
        api.core_logout()
29

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

понял , спасибо за пример , воспользуемся ..

подпись сломали .. впрочем не удивительно
30

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

В чем преимущество использования данной либы в сравнении с обычным requests?

Independent Expert
31

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

dmytro.yaroshenko wrote:

В чем преимущество использования данной либы в сравнении с обычным requests?

Либа - просто обёртка над RemoteAPI. Из плюсов - она сохраняет сессию (sid) и автоматом подставляет её в запросы.

Если requests решает ваши задачи - используйте его.

32

Python библиотека для Remote Api от Gurtam

(edited by gpe 23/01/2021 13:50:46)

Re: Python библиотека для Remote Api от Gurtam

Здравствуйте.

Помогите пожалуйста отключить проверку SSL,
нужно для работы с Local серверами на которых нет сертификатов, вот ошибка:

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>

Python 3.6.9
urllib3==1.22

Спасибо!

33

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

gpe wrote:

Здравствуйте.

Помогите пожалуйста отключить проверку SSL,
нужно для работы с Local серверами на которых нет сертификатов, вот ошибка:

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>

Python 3.6.9
urllib3==1.22

Спасибо!

Если нет сертификатов, попробуйте обращаться по http вместо https.

34

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

shmi wrote:
gpe wrote:

Здравствуйте.

Помогите пожалуйста отключить проверку SSL,
нужно для работы с Local серверами на которых нет сертификатов, вот ошибка:

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>

Python 3.6.9
urllib3==1.22

Спасибо!

Если нет сертификатов, попробуйте обращаться по http вместо https.

На них закрыт http, только через https, изменить на Local я ничего не могу.

35

Python библиотека для Remote Api от Gurtam

(edited by dmytro.yaroshenko 22/01/2022 19:31:16)

Re: Python библиотека для Remote Api от Gurtam

Сделал асинхронный форк библиотеки на aiohttp
py-aiowialon

Добавил Wialon.start_poling() метод и декоратор Wialon.event_handler() для отслеживания avl_evts,
token теперь можно указать прямо при создании объекта класса Wialon

+ Установка
pip install aiohttp
pip install py-aiowialon
+ Пример использования
import asyncio
from aiowialon import Wialon, WialonEvents, WialonEvent, flags


is_init = True


def run():

    wialon_session = Wialon(host='TEST HOST', token='TEST TOKEN')

    async def add_evts_to_session():
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 100}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        ids = [u['id'] for u in units['items']]

        spec = [
            {
                "type": "col",
                "data": ids,
                "flags": flags.ITEM_DATAFLAG_BASE + flags.ITEM_UNIT_DATAFLAG_POS,
                "mode": 0
            }
        ]
        await wialon_session.core_update_data_flags(spec=spec)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        global is_init
        if is_init:
            await add_evts_to_session()
            is_init = False

        if 116106 in events.data:
            item_event: WialonEvent = events.data[116106]
            print(item_event.item, item_event.e_type, item_event.desc)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 0}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        print(events.__dict__, units['totalItemsCount'])

    wialon_session.start_poling()


if __name__ == '__main__':
    run()
Independent Expert
36

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

Не проще ли используя threading держать сессию в рамках приложения.... И подставлять sid в запросы...

37

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

А в классе Виалон, желательно ещё метод получения токена, путем предоставления логина/пароля/урл_апи.

38

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

developer77 wrote:

А в классе Виалон, желательно ещё метод получения токена, путем предоставления логина/пароля/урл_апи.

этот метод не доступен уже очень давно, токен можно получить только через токен менеджер, через веб-форму авторизации или из уже открытой сессии, в веб-форму не возможно подставить пароль заведомо, только ввести ручками.

Independent Expert
39

Python библиотека для Remote Api от Gurtam

(edited by dmytro.yaroshenko 22/01/2022 19:50:43)

Re: Python библиотека для Remote Api от Gurtam

developer77 wrote:

Не проще ли используя threading держать сессию в рамках приложения.... И подставлять sid в запросы...


Проще с помощью event_handler реагировать на ивенты, если нужно отслеживать изменения в рамках одной сессии, по аналогии с тем как это делает wialon.js.

Если у вас нет необходимости следить за ивентами, то можете поддерживать сессию открытой любым удобным вам способом, вызывать avl_evts ручками, когда вам будет нужно.

Опять же зависит от того какой подход написания кода вы предпочли, мне удобнее работать с async методами объекта, чем держать запущенным еще один поток

Independent Expert
40

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

developer77 wrote:

Не проще ли используя threading держать сессию в рамках приложения.... И подставлять sid в запросы...

к примеру, для приложения на базе PyQt5 правильно будет объявить QThread и внутри него вызывать класс WIalon из wialon-python, на каком-то асинхронном фреймворке типа aiogram - лучше воспользоваться моим форком py-aiowialon

Independent Expert
41

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

dmytro.yaroshenko wrote:

Сделал асинхронный форк библиотеки на aiohttp
py-aiowialon

Добавил Wialon.start_poling() метод и декоратор Wialon.event_handler() для отслеживания avl_evts,
token теперь можно указать прямо при создании объекта класса Wialon

+ Установка
pip install aiohttp
pip install py-aiowialon
+ Пример использования
import asyncio
from aiowialon import Wialon, WialonEvents, WialonEvent, flags


is_init = True


def run():

    wialon_session = Wialon(host='TEST HOST', token='TEST TOKEN')

    async def add_evts_to_session():
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 100}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        ids = [u['id'] for u in units['items']]

        spec = [
            {
                "type": "col",
                "data": ids,
                "flags": flags.ITEM_DATAFLAG_BASE + flags.ITEM_UNIT_DATAFLAG_POS,
                "mode": 0
            }
        ]
        await wialon_session.core_update_data_flags(spec=spec)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        global is_init
        if is_init:
            await add_evts_to_session()
            is_init = False

        if 116106 in events.data:
            item_event: WialonEvent = events.data[116106]
            print(item_event.item, item_event.e_type, item_event.desc)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 0}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        print(events.__dict__, units['totalItemsCount'])

    wialon_session.start_poling()


if __name__ == '__main__':
    run()

а зачем ? виалон же однопоточное изделие . нельзя одновременно несколько запросов делать иначе БАН !

подпись сломали .. впрочем не удивительно
42

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

Почему.....

43

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

tdt66 wrote:

а зачем ? виалон же однопоточное изделие . нельзя одновременно несколько запросов делать иначе БАН !

А как-же batch-запросы?

44

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

Да и sid можно сменить и слать несколько параллельных запросов

45

Python библиотека для Remote Api от Gurtam

Re: Python библиотека для Remote Api от Gurtam

SanderAMC wrote:
tdt66 wrote:

а зачем ? виалон же однопоточное изделие . нельзя одновременно несколько запросов делать иначе БАН !

А как-же batch-запросы?

в чем проблема бача и однопоточности ?

подпись сломали .. впрочем не удивительно