如何迭代 XML 值以使用迭代值进行 XML API 调用?
How to iterate through XML values to make XML API call with iterative values?
我正在开展一个项目,通过此 API (http://www.yourmembership.com/company/api-reference/) 提取数据。 API 要求通过 XML 进行调用。我已经成功地能够使用 python 中的 'requests' 库通过 HTTP 响应对象进行调用和检索数据。
我的问题是我想开发一个函数,它将迭代来自一个 API 调用的 ID,并将它们插入另一个函数,该函数将进行迭代 API 调用以获取更多关于每个调用的数据身份证.
例如,我现在拥有的脚本为我提供了所有事件 ID 的转储:
import requests
xml ="""
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey></ApiKey>
<CallID>008</CallID>
<></>
<SaPasscode></SaPasscode>
<Call Method = "Sa.Events.All.GetIDs">
<StartDate>2017/01/1</StartDate>
<EndDate>2017/12/31</EndDate>
</Call>
</YourMembership>
"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml,headers=headers)
print(r.text)
'print(r.text)' 的响应看起来像这样(没有子对象):
<EventID>12345</EventID>
<EventID>67890</EventID>
<EventID>24680</EventID>
<EventID>13579</EventID>
<EventID>08642</EventID>
我如何获取这些 event_IDs 并遍历响应对象并将它们插入下面的这个函数(函数不完整,草稿)并通过迭代获取每个 event_ID 的信息XML API 通过某种方式插入字段的值进行调用 ?
import requests
def xml_event_info():
xml ="""
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxx-xxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.Event.Get">
<EventID>12345</EventID>
</Call>
</YourMembership>
"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml,headers=headers)
print(r.text)
在此先感谢您,如果我的问题没有意义,请告诉我。
编辑:
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.Events.All.GetIDs>
<EventID>98765</EventID>
</Sa.Events.All.GetIDs>
</YourMembership_Response>
考虑连接 Python 的内置 etree 以解析 YM_Response 并提取 EventID 示例中的文本:
import xml.etree.ElementTree as et
txt="""
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.Events.All.GetIDs>
<EventID>98765</EventID>
</Sa.Events.All.GetIDs>
</YourMembership_Response>
"""
dom = et.fromstring(txt)
for i in dom.iterfind('.//EventID'):
print(i.text)
# 98765
总而言之,迭代调用将事件 ID 作为参数传递的方法,然后将字符串格式化为 XML 字符串。请参阅 XML 字符串中的大括号,然后是 requests
行中的 .format
:
import requests
import xml.etree.ElementTree as et
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxx-xxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.Event.Get">
<EventID>{}</EventID>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com',
data=xml.format(eventID), headers=headers)
print(r.text)
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxxx</ApiKey>
<CallID>008</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.All.GetIDs">
<StartDate>2017/01/1</StartDate>
<EndDate>2017/12/31</EndDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
# BUILD XML TREE OBJECT
dom = et.fromstring(r.text)
# PARSE EVENT ID TEXT AND PASS INTO FUNCTION
for i in dom.iterfind('.//EventID'):
xml_event_info(i.text)
我正在开展一个项目,通过此 API (http://www.yourmembership.com/company/api-reference/) 提取数据。 API 要求通过 XML 进行调用。我已经成功地能够使用 python 中的 'requests' 库通过 HTTP 响应对象进行调用和检索数据。
我的问题是我想开发一个函数,它将迭代来自一个 API 调用的 ID,并将它们插入另一个函数,该函数将进行迭代 API 调用以获取更多关于每个调用的数据身份证.
例如,我现在拥有的脚本为我提供了所有事件 ID 的转储:
import requests
xml ="""
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey></ApiKey>
<CallID>008</CallID>
<></>
<SaPasscode></SaPasscode>
<Call Method = "Sa.Events.All.GetIDs">
<StartDate>2017/01/1</StartDate>
<EndDate>2017/12/31</EndDate>
</Call>
</YourMembership>
"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml,headers=headers)
print(r.text)
'print(r.text)' 的响应看起来像这样(没有子对象):
<EventID>12345</EventID>
<EventID>67890</EventID>
<EventID>24680</EventID>
<EventID>13579</EventID>
<EventID>08642</EventID>
我如何获取这些 event_IDs 并遍历响应对象并将它们插入下面的这个函数(函数不完整,草稿)并通过迭代获取每个 event_ID 的信息XML API 通过某种方式插入字段的值进行调用 ?
import requests
def xml_event_info():
xml ="""
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxx-xxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.Event.Get">
<EventID>12345</EventID>
</Call>
</YourMembership>
"""
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml,headers=headers)
print(r.text)
在此先感谢您,如果我的问题没有意义,请告诉我。
编辑:
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.Events.All.GetIDs>
<EventID>98765</EventID>
</Sa.Events.All.GetIDs>
</YourMembership_Response>
考虑连接 Python 的内置 etree 以解析 YM_Response 并提取 EventID 示例中的文本:
import xml.etree.ElementTree as et
txt="""
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.Events.All.GetIDs>
<EventID>98765</EventID>
</Sa.Events.All.GetIDs>
</YourMembership_Response>
"""
dom = et.fromstring(txt)
for i in dom.iterfind('.//EventID'):
print(i.text)
# 98765
总而言之,迭代调用将事件 ID 作为参数传递的方法,然后将字符串格式化为 XML 字符串。请参阅 XML 字符串中的大括号,然后是 requests
行中的 .format
:
import requests
import xml.etree.ElementTree as et
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxx-xxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.Event.Get">
<EventID>{}</EventID>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com',
data=xml.format(eventID), headers=headers)
print(r.text)
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxxx</ApiKey>
<CallID>008</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.Events.All.GetIDs">
<StartDate>2017/01/1</StartDate>
<EndDate>2017/12/31</EndDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
# BUILD XML TREE OBJECT
dom = et.fromstring(r.text)
# PARSE EVENT ID TEXT AND PASS INTO FUNCTION
for i in dom.iterfind('.//EventID'):
xml_event_info(i.text)