Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 8, 2018 09:08:11

CoLoR
Зарегистрирован: 2018-02-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

python soap zeen где данные?

Всем здравствуйте.

Есть скрипт на php который через сервис soap получает определённые данные, этот скрипт я писал несколько лет назад, решил в целях знакомства с python и ускорения работы переписать его.

Выбрал Zeep для python3.6
и, собственно, простой запрос:

 from zeep import Client
client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False)
result = client.service.GetData()
- выполняется, никаких ошибок, всё ок, но в result нет нужных данных.
Разбираюсь, вижу, что фактически приходит правильный пакет и сервер отвечает - всё как надо.
Включаю опцию raw_response=True, что бы zeep выдавал исходный ответ, не обрабатывая его:
 from zeep import Client
client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False)
with client.options(raw_response=True):
    result = client.service.GetData()

Таким образом в result.content строка типа {bytes} в которой ответ сервера с данными, которые я ожидаю.

На php ни чего такого не делал, там использую nusoap, который просто после запроса возвращает мне ассоциативный массив с данными.

Подскажете в чём подвох?
Очень хочется перейти на python, т.к. скорость работы не сравнима с php в данном контексте задачи.

зы: сервис soap не в интернете, не общедоступен.

Офлайн

#2 Фев. 8, 2018 11:13:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8424
Репутация: +  756  -
Профиль   Отправить e-mail  

python soap zeen где данные?

Через Wireshark сравни, что посылает скрипт на PHP и скрипт на питоне.



Офлайн

#3 Фев. 8, 2018 16:05:41

CoLoR
Зарегистрирован: 2018-02-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

python soap zeen где данные?

py.user.next
Через Wireshark сравни, что посылает скрипт на PHP и скрипт на питоне.
так я вижу, что данные мне приходят, я писал в стартовом сообщении это, но, такое ощущение что zeep их НЕ разбирает и не показывает мне. А если я включаю опцию raw_response=True то мне всё отображается.

Но, может я что не правильно делаю(и скорее всего это так). Смотрите, нашёл в интернете аналогичный сервис и ситуация точь-в-точь.
Сервис от центробанка: https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
Пишу скрипт:
 from zeep import Client
from datetime import datetime, timedelta
from pprint import pprint
cl = Client("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl")
# test 1 (GetLatestDate возвращает: <GetLatestDateResult>string</GetLatestDateResult> )
result = cl.service.GetLatestDate()
print(result)   # выводит 20180209
# test 2 (GetLatestDate возвращает: <GetLatestDateResult>string</GetLatestDateResult> c опцией raw_response
with cl.options(raw_response=True):
    result = cl.service.GetLatestDate()
pprint(result.text)
# test 3 (Ruonia возвращает: <xsd:schema>schema</xsd:schema>xml</RuoniaResult>
start = datetime.now() - timedelta(days=30)
end = datetime.now()
result = cl.service.Ruonia(start,end)
print(result)
# test 3 (Ruonia возвращает: <xsd:schema>schema</xsd:schema>xml</RuoniaResult>  c опцией raw_response
with cl.options(raw_response=True):
    result = cl.service.Ruonia(start,end)
pprint(result.text)

test1 возвращает дату 20180209
test2 возвращает raw данные:
 ('<?xml version="1.0" encoding="utf-8"?><soap:Envelope '
 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" '
 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetLatestDateResponse '
 'xmlns="http://web.cbr.ru/"><GetLatestDateResult>20180209</GetLatestDateResult></GetLatestDateResponse></soap:Body></soap:Envelope>')

Но здесь возвращаемое значение - <GetLatestDateResult>string</GetLatestDateResult>, с этим проблем не возникает.

test3 возвращает:
 {
    'schema': <Schema(location=None, tns=None)>,
    '_value_1': <Element {urn:schemas-microsoft-com:xml-diffgram-v1}diffgram at 0x3433418>
}

test4 возвращает:
 ('<?xml version="1.0" encoding="utf-8"?><soap:Envelope '
 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" '
 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><RuoniaResponse '
 'xmlns="http://web.cbr.ru/"><RuoniaResult><xs:schema id="Ruonia" xmlns="" '
 'xmlns:xs="http://www.w3.org/2001/XMLSchema" '
 'xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element '
 'name="Ruonia" msdata:IsDataSet="true" '
 'msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" '
 'maxOccurs="unbounded"><xs:element '
 'name="ro"><xs:complexType><xs:sequence><xs:element name="D0" '
 'msdata:Caption="Дата" type="xs:dateTime" minOccurs="0" /><xs:element '
 'name="ruo" msdata:Caption="Ставка, %" type="xs:decimal" minOccurs="0" '
 '/><xs:element name="vol" msdata:Caption="Объем сделок,по которым произведен '
 'расчет ставки RUONIA, млрд. руб." type="xs:decimal" minOccurs="0" '
 '/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram '
 'xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" '
 'xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><Ruonia '
 'xmlns=""><ro diffgr:id="ro1" '
 'msdata:rowOrder="0"><D0>2018-01-10T00:00:00+03:00</D0><ruo>7.1600</ruo><vol>151.1200</vol></ro><ro '
 'diffgr:id="ro2" '
 'msdata:rowOrder="1"><D0>2018-01-11T00:00:00+03:00</D0><ruo>7.0400</ruo><vol>157.4100</vol></ro><ro '
 'diffgr:id="ro3" '
 'msdata:rowOrder="2"><D0>2018-01-12T00:00:00+03:00</D0><ruo>7.0000</ruo><vol>162.7000</vol></ro><ro '
 'diffgr:id="ro4" '
 'msdata:rowOrder="3"><D0>2018-01-15T00:00:00+03:00</D0><ruo>7.0000</ruo><vol>141.1800</vol></ro><ro '
 'diffgr:id="ro5" '
 'msdata:rowOrder="4"><D0>2018-01-16T00:00:00+03:00</D0><ruo>7.0200</ruo><vol>172.0400</vol></ro><ro '
 'diffgr:id="ro6" '
 'msdata:rowOrder="5"><D0>2018-01-17T00:00:00+03:00</D0><ruo>6.9800</ruo><vol>159.9800</vol></ro><ro '
 'diffgr:id="ro7" '
 'msdata:rowOrder="6"><D0>2018-01-18T00:00:00+03:00</D0><ruo>7.0700</ruo><vol>142.0500</vol></ro><ro '
 'diffgr:id="ro8" '
 'msdata:rowOrder="7"><D0>2018-01-19T00:00:00+03:00</D0><ruo>7.0100</ruo><vol>176.5600</vol></ro><ro '
 'diffgr:id="ro9" '
 'msdata:rowOrder="8"><D0>2018-01-22T00:00:00+03:00</D0><ruo>7.0100</ruo><vol>172.2000</vol></ro><ro '
 'diffgr:id="ro10" '
 'msdata:rowOrder="9"><D0>2018-01-23T00:00:00+03:00</D0><ruo>6.9500</ruo><vol>214.0000</vol></ro><ro '
 'diffgr:id="ro11" '
 'msdata:rowOrder="10"><D0>2018-01-24T00:00:00+03:00</D0><ruo>6.9300</ruo><vol>227.0700</vol></ro><ro '
 'diffgr:id="ro12" '
 'msdata:rowOrder="11"><D0>2018-01-25T00:00:00+03:00</D0><ruo>7.2100</ruo><vol>248.8700</vol></ro><ro '
 'diffgr:id="ro13" '
 'msdata:rowOrder="12"><D0>2018-01-26T00:00:00+03:00</D0><ruo>7.2500</ruo><vol>201.9400</vol></ro><ro '
 'diffgr:id="ro14" '
 'msdata:rowOrder="13"><D0>2018-01-29T00:00:00+03:00</D0><ruo>7.3500</ruo><vol>144.7300</vol></ro><ro '
 'diffgr:id="ro15" '
 'msdata:rowOrder="14"><D0>2018-01-30T00:00:00+03:00</D0><ruo>7.3700</ruo><vol>193.1800</vol></ro><ro '
 'diffgr:id="ro16" '
 'msdata:rowOrder="15"><D0>2018-01-31T00:00:00+03:00</D0><ruo>7.1200</ruo><vol>148.3900</vol></ro><ro '
 'diffgr:id="ro17" '
 'msdata:rowOrder="16"><D0>2018-02-01T00:00:00+03:00</D0><ruo>7.2600</ruo><vol>118.3500</vol></ro><ro '
 'diffgr:id="ro18" '
 'msdata:rowOrder="17"><D0>2018-02-02T00:00:00+03:00</D0><ruo>7.0900</ruo><vol>127.5000</vol></ro><ro '
 'diffgr:id="ro19" '
 'msdata:rowOrder="18"><D0>2018-02-05T00:00:00+03:00</D0><ruo>7.1900</ruo><vol>134.5300</vol></ro><ro '
 'diffgr:id="ro20" '
 'msdata:rowOrder="19"><D0>2018-02-06T00:00:00+03:00</D0><ruo>7.2300</ruo><vol>102.0000</vol></ro><ro '
 'diffgr:id="ro21" '
 'msdata:rowOrder="20"><D0>2018-02-07T00:00:00+03:00</D0><ruo>7.0700</ruo><vol>159.2000</vol></ro></Ruonia></diffgr:diffgram></RuoniaResult></RuoniaResponse></soap:Body></soap:Envelope>')


Вот php у меня в 3 варианте возвращает ассоциативный массив с данными, который мне и нужен, а здесь его нет. Может я что-то не так делаю? Может надо как-то дополнительно выгрузить эти данные <xsd:schema>schema</xsd:schema>xml</RuoniaResult> ?

Отредактировано CoLoR (Фев. 8, 2018 16:07:51)

Офлайн

#4 Фев. 9, 2018 01:58:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8424
Репутация: +  756  -
Профиль   Отправить e-mail  

python soap zeen где данные?

CoLoR
  
from zeep import Client
client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False)
result = client.service.GetData()
- выполняется, никаких ошибок, всё ок, но в result нет нужных данных.
Выполни type(result) и результат сюда скопируй.



Офлайн

#5 Фев. 9, 2018 07:32:36

CoLoR
Зарегистрирован: 2018-02-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

python soap zeen где данные?

py.user.next
Выполни type(result) и результат сюда скопируй.
<class ‘zeep.objects.GetDataResult’>

Отредактировано CoLoR (Фев. 9, 2018 07:32:56)

Офлайн

#6 Фев. 9, 2018 07:57:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8424
Репутация: +  756  -
Профиль   Отправить e-mail  

python soap zeen где данные?

Теперь

  
from zeep import Client
client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False)
result = client.service.GetData()
dir(result)
Скопируй сюда ответ.

Потом сразу
 help(result)
И тоже сюда ответ.



Офлайн

#7 Фев. 9, 2018 08:05:43

CoLoR
Зарегистрирован: 2018-02-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

python soap zeen где данные?

dir(result):

 ['_value_1', '_value_2', 'namespace', 'tableTypeName']

help(result):
 Help on GetDataResult object:
class GetDataResult(zeep.xsd.valueobjects.CompoundValue)
 |  Represents a data object for a specific xsd:complexType.
 |  
 |  Method resolution order:
 |      GetDataResult
 |      zeep.xsd.valueobjects.CompoundValue
 |      builtins.object
 |  
 |  Methods inherited from zeep.xsd.valueobjects.CompoundValue:
 |  
 |  __contains__(self, key)
 |  
 |  __deepcopy__(self, memo)
 |  
 |  __delitem__(self, key)
 |  
 |  __dir__(self)
 |      __dir__() -> list
 |      default dir() implementation
 |  
 |  __eq__(self, other)
 |      Return self==value.
 |  
 |  __getattribute__(self, key)
 |      Return getattr(self, name).
 |  
 |  __getitem__(self, key)
 |  
 |  __init__(self, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  __iter__(self)
 |  
 |  __json__(self)
 |  
 |  __len__(self)
 |  
 |  __reduce__(self)
 |      helper for pickle
 |  
 |  __repr__(self)
 |      Return repr(self).
 |  
 |  _...
None

Офлайн

#8 Фев. 9, 2018 09:07:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8424
Репутация: +  756  -
Профиль   Отправить e-mail  

python soap zeen где данные?

CoLoR
help(result):
Тут не всё, надо промотать вниз ещё.

Выполни ещё
  
list(result)



Офлайн

#9 Фев. 9, 2018 10:00:43

CoLoR
Зарегистрирован: 2018-02-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

python soap zeen где данные?

py.user.next
Тут не всё, надо промотать вниз ещё.
Сорри, вот целиком:

help(result):
 Help on GetDataResult object:
class GetDataResult(zeep.xsd.valueobjects.CompoundValue)
 |  Represents a data object for a specific xsd:complexType.
 |
 |  Method resolution order:
 |      GetDataResult
 |      zeep.xsd.valueobjects.CompoundValue
 |      builtins.object
 |
 |  Methods inherited from zeep.xsd.valueobjects.CompoundValue:
 |
 |  __contains__(self, key)
 |
 |  __deepcopy__(self, memo)
 |
 |  __delitem__(self, key)
 |
 |  __dir__(self)
 |      __dir__() -> list
 |      default dir() implementation
 |
 |  __eq__(self, other)
 |      Return self==value.
 |
 |  __getattribute__(self, key)
 |      Return getattr(self, name).
 |
 |  __getitem__(self, key)
 |
 |  __init__(self, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |
 |  __iter__(self)
 |
 |  __json__(self)
 |
 |  __len__(self)
 |
 |  __reduce__(self)
 |      helper for pickle
 |
 |  __repr__(self)
 |      Return repr(self).
 |
 |  __setattr__(self, key, value)
 |      Implement setattr(self, name, value).
 |
 |  __setitem__(self, key, value)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from zeep.xsd.valueobjects.CompoundValue:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from zeep.xsd.valueobjects.CompoundValue:
 |
 |  __hash__ = None

list(result):
 ['_value_1', '_value_2', 'namespace', 'tableTypeName']

Офлайн

#10 Фев. 9, 2018 14:23:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8424
Репутация: +  756  -
Профиль   Отправить e-mail  

python soap zeen где данные?

Теперь

  
result._value_1
result._value_2



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version