2016-09-08 6 views
0

Ich bin neu in Python und xmlrpc, und ich bin fest mit binären Daten Decodierung von einem öffentlichen Dienst kommen:dekodieren binär aus xmlrpc Python

der Service Request-Response mit diesem Code ist:

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) 

Antwort:

{'id_richiesta': '257a369dbf46e41ba275f8c821c7e1e0', 
'risposta': {'periodi_aggregazione': <xmlrpc.client.Binary object at 0x0000027B7D6E2588>, 
       'tempi_attesa_percorsi': <xmlrpc.client.Binary object at 0x0000027B7D9276D8>}} 

ich diese zwei binäre Objekte entschlüsseln müssen, und ich bin mit diesem Code fest:

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) 

, die in endet:

Traceback (most recent call last): File "stat.py", line 18, in dat = xmlrpc.client.Binary(res) File "C:\Users\Leonardo\AppData\Local\Programs\Python\Python35\lib\xmlrpc\client.py", line 389, in init data.class.name) TypeError: expected bytes or bytearray, not dict

Der einzige doc ich für xmlrpc.client gefunden ist derjenige, bei docs.python.org, aber ich kann nicht herausfinden, wie ich diese Binärdateien entschlüsseln könnte

+1

Es scheint, als ob Sie den richtigen Anruf tätigen, vielleicht ist das Problem auf der Website? 'TypeError: erwartete Bytes oder Bytearray, nicht dict'? Ich würde denken, dass Sie tatsächlich einen 'statt eines' Bytearrays 'erhalten. – NeoVe

+1

Ja, ich denke, es ist ein Diktat. Ich werde versuchen, den Website-Entwickler zu kontaktieren – Forzaferrarileo

Antwort

0

Wenn der Gehalt an res Variable (was Sie aus den 2 nd (s2) Server zu erhalten) ist die Antwort, die Sie in die Frage eingefügt, dann sollten Sie die letzten drei Zeilen Ihres 2 nd snippet (wie Sie ändern haben bereits 2 Binary Objekte im resWörterbuch):

# 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) 

Hinweise:

  • Nach [Python]: Binary Objects:

    Binary objects have the following methods, supported mainly for internal use by the marshalling/unmarshalling code:

  • war ich (und dieser Test der Lösung) verbinden nicht in der Lage , da DEV_KEY ist (offensichtlich) gefälscht