Декодировать двоичный файл из xmlrpc python
Я новичок в python и xml-rpc, и я застрял с декодированием двоичных данных, поступающих из публичной службы:
ответ на запрос сервиса с этим кодом:
from xmlrpc.client import Server
import xmlrpc.client
from pprint import pprint
DEV_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
logFile = open('stat.txt', 'w')
s1 = Server('http://muovi.roma.it/ws/xml/autenticazione/1')
s2 = Server('http://muovi.roma.it/ws/xml/paline/7')
token = s1.autenticazione.Accedi(DEV_KEY, '')
res = s2.paline.GetStatPassaggi(token)
pprint(res, logFile)
ответ:
{'id_richiesta': '257a369dbf46e41ba275f8c821c7e1e0',
'risposta': {'periodi_aggregazione': <xmlrpc.client.Binary object at 0x0000027B7D6E2588>,
'tempi_attesa_percorsi': <xmlrpc.client.Binary object at 0x0000027B7D9276D8>}}
Мне нужно декодировать эти два двоичных объекта, и я застрял с этим кодом:
from xmlrpc.client import Server
import xmlrpc.client
from pprint import pprint
DEV_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx'
logFile = open('stat.txt', 'w')
s1 = Server('http://muovi.roma.it/ws/xml/autenticazione/1')
s2 = Server('http://muovi.roma.it/ws/xml/paline/7')
token = s1.autenticazione.Accedi(DEV_KEY, '')
res = s2.paline.GetStatPassaggi(token)
dat = xmlrpc.client.Binary(res)
out = xmlrpc.client.Binary.decode(dat)
pprint(out, logFile)
что заканчивается в:
Traceback (последний вызов был последним): файл "stat.py", строка 18, в файле dat = xmlrpc.client.Binary(res) "C:\Users\Leonardo\AppData\Local\Programs\Python\Python35\lib\xmlrpc\client.py", строка 389, в данных инициализации.классname) TypeError: ожидаемые байты или байтовые массивы, а не dict
Единственный документ, который я нашел для xmlrpc.client, это документ на docs.python.org, но я не могу понять, как я могу декодировать эти двоичные файлы
1 ответ
Если содержание res
переменная (что вы получаете от 2- го (s2
) server) - это ответ, который вы вставили в вопрос, тогда вам следует изменить последние 3 строки вашего второго фрагмента (так как у вас уже есть 2 Binary
объекты в res
словарь):
# Existing code
res = s2.paline.GetStatPassaggi(token)
answer = res.get("risposta", dict())
aggregation_periods = answer.get("periodi_aggregazione", xmlrpc.client.Binary())
timeout_paths = answer.get("tempi_attesa_percorsi", xmlrpc.client.Binary())
print(aggregation_periods.data)
print(timeout_paths.data)
Примечания:
- Согласно [Python]: Бинарные объекты:
Двоичные объекты имеют следующие методы, поддерживаемые в основном для внутреннего использования кодом маршаллинга / демаршаллинга:
- Я не смог подключиться (и это проверить решение), так как
DEV_KEY
(очевидно) подделка