我尝试了以下代码。其他API正在运行,只有customerCustomerList不起作用..
def main():
client = SOAPpy.WSDL.Proxy(WSDL_ADDR)
sid = client.login(username=USERNAME,apiKey=APIKEY)
print 'Logined as session id %s' % sid
print 'Listing customers...'
res = client.customerCustomerList(sid)
print res
client.endSession(sessionId=sid)
它给出了以下例外:
/usr/local/lib/python2.7/site-packages/SOAPpy/Client.pyc in __call__(self, *args, **kw)
545 return self.__f_call(*args, **kw)
546 else:
--> 547 return self.__r_call(*args, **kw)
548
549 def __getattr__(self, name):
/usr/local/lib/python2.7/site-packages/SOAPpy/Client.pyc in __r_call(self, *args, **kw)
567 def __r_call(self, *args, **kw):
568 return self.__call(self.__name, args, kw, self.__ns, self.__sa,
--> 569 self.__hd, self.__ma)
570
571 def __repr__(self):
/usr/local/lib/python2.7/site-packages/SOAPpy/Client.pyc in __call(self, name, args, kw, ns, sa, hd, ma)
469
470
--> 471 p, attrs = parseSOAPRPC(r, attrs = 1)
472
473 try:
/usr/local/lib/python2.7/site-packages/SOAPpy/Parser.pyc in parseSOAPRPC(xml_str, header, body, attrs, rules, ignore_ext)
1103 def parseSOAPRPC(xml_str, header = 0, body = 0, attrs = 0, rules = None, ignore_ext=None):
1104
-> 1105 t = _parseSOAP(xml_str, rules = rules, ignore_ext=ignore_ext)
1106 p = t.body[0]
1107
/usr/local/lib/python2.7/site-packages/SOAPpy/Parser.pyc in _parseSOAP(xml_str, rules, ignore_ext, forbid_entities, forbid_external, forbid_dtd)
1086 parser._parser = None
1087 print traceback.format_exc()
-> 1088 raise e
1089
1090 return t
SAXParseException: <unknown>:1:0: no element found
我尝试使用过滤器减少要返回的数据量,但它也没有用。
res = client.customerCustomerList(sid,{
'group_id':'1',
'store_id':'1'
})
customerCustomerList()在WSDL中,因此它可能不是权限问题。
我目前的解决方法是枚举customerID并逐个获取,这远非理想......
print 'Listing all the customers...'
for i in xrange(0,999999):
try:
res = client.customerCustomerInfo(sid,str(i))
print res
except Exception ,ex:
sys.stderr.write( str(ex)+'\n')
答案 0 :(得分:0)
'SAXParseException :: 1:0:找不到元素'问题意味着什么服务器返回一些答案但不是XML格式。
而不是:
res = client.customerCustomerList(sid)
试试这个:
res = client.customerCustomerList(sid, None)
或者这个:
complex_filter = [{'complex_filter': [{
'key': 'customer_id',
'value': [{
'key': 'gt',
'value': 0}]
}]
}]
res = client.customerCustomerList(sid, complex_filter)
答案 1 :(得分:0)
无论如何,我通过应用Filters来一次获取一个记录子集来获得代码。 Magento API确实应该提供分页。
使用SOAPpy
无效,无论如何,代码使用suds
from datetime import datetime,timedelta
from suds.client import Client
client = Client(MAGENTO_WSDL_ADDRESS)
sid = client.service.login(username=USER_NAME, apiKey=API_KEY)
# Fetch all new users in last 24 hours
filter = {
"complex_filter":{
"item":{
"key":"created_at",
"value":{
"key":"from",
"value": datetime.strftime(datetime.now() - timedelta(hours=24), "%Y-%m-%d %H:%M:%S")
}
}
}
}
res = client.services.customerCustomerList(sid, filters=filter)
# New customer ids from last 24 hours.
new_uids = [x.customer_id for x in res]