如何附加递归 API 调用并将结果写入 CSV?
How to append recursive API calls and write results to CSV?
我必须根据 XML API 响应创建 csv。我有两个问题。一 - 由于某种原因,我进行的 API 调用在添加后没有保存到列表中,列表完全消失了。
two - 因为我无法存储 API 调用的结果,所以我不知道如何抓取结果并创建 csv。
代码设置为首先获取组级别数据,然后获取每个 ID 并应用到 people.profile API 调用以获取他们的个人资料信息。我可以做这部分,这是代码:
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.People.Profile.Get">
<ID>{}</ID>
</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>xxxx</ApiKey>
<CallID>001</CallID>
<SaPasscode>xxxx</SaPasscode>
<Call Method="Sa.Groups.Group.GetMembershipLog">
<GroupID>12345</GroupID>
<ItemID></ItemID>
<StartDate></StartDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
print r.text
# BUILD XML TREE OBJECT
tree = et.fromstring(r.text)
storage = []
# PARSE People ID TEXT AND PASS INTO FUNCTION
for i in tree.iterfind('.//ID'):
y = xml_event_info(i.text)
storage.append(y)
在评论“解析人员 ID 文本并传递给函数时,当我迭代 API 调用时,值没有保存到列表 'storage' 中,因此,一旦通话结束 'storage' 消失了,当我去打印列表 'storage' 时它说 'None'。
其次,y = xml_event_info(i.text)
是我需要解析为 CSV 的实际人员资料数据,这就是 XML 的样子:
<?xml version="1.0" encoding="utf-8" ?>
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.People.Profile.Get>
<ID>098765</ID>
<WebsiteID>1234</WebsiteID>
<PrimaryGroupCode>abc</PrimaryGroupCode>
<IsMember>1</IsMember>
<IsNonMember>0</IsNonMember>
<Registered>2017-09-07 18:48:00</Registered>
<LastUpdated>2017-09-11 15:19:54</LastUpdated>
<ImportID>u293248</ImportID>
<ConstituentID></ConstituentID>
<EmailAddr>xxxx</EmailAddr>
<EmailBounced>0</EmailBounced>
<NamePrefix>xxx</NamePrefix>
<FirstName>John</FirstName>
<MiddleName></MiddleName>
<LastName>Smith</LastName>
<NameSuffix></NameSuffix>
<Nickname></Nickname>
<Gender>M</Gender>
<Birthdate></Birthdate>
<MaritalStatus></MaritalStatus>
<MaidenName></MaidenName>
<SpouseName></SpouseName>
<AnniversaryDate></AnniversaryDate>
<Employer>Welk Resorts</Employer>
<Title>xxxx</Title>
<Profession></Profession>
<Membership>xxxxx</Membership>
<MembershipExpiry>2017-09-08 00:00:00</MembershipExpiry>
<MemberTypeCode>xxxx</MemberTypeCode>
<Approved>1</Approved>
<Suspended>1</Suspended>
<Username>xx@xx.com</Username>
<PasswordHash>xxxx</PasswordHash>
<AltEmailAddr>xxxx</AltEmailAddr>
<HomeAddrLines></HomeAddrLines>
<HomeCity></HomeCity>
<HomeLocation>xxxx</HomeLocation>
<HomePostalCode></HomePostalCode>
<HomeCountry>United States</HomeCountry>
<Website></Website>
<HomePhAreaCode></HomePhAreaCode>
<HomePhone></HomePhone>
<MobileAreaCode></MobileAreaCode>
<Mobile></Mobile>
<EmpAddrLines></EmpAddrLines>
<EmpCity></EmpCity>
<EmpLocation>Alabama</EmpLocation>
<EmpPostalCode></EmpPostalCode>
<EmpCountry>United States</EmpCountry>
<BusinessWebsite></BusinessWebsite>
<EmpPhAreaCode></EmpPhAreaCode>
<EmpPhone></EmpPhone>
<EmpFaxAreaCode></EmpFaxAreaCode>
<EmpFax></EmpFax>
<HeadshotImageURI></HeadshotImageURI>
<LastRenewalReminderSent></LastRenewalReminderSent>
<GamificationPoints></GamificationPoints>
<MasterID></MasterID>
<LastRenewalDate>2017-09-07 00:00:00</LastRenewalDate>
<ApprovalDate>9/11/2017 00:00:00 PM</ApprovalDate>
<LastModifiedDate>2017-09-11 00:00:00 </LastModifiedDate>
<QueuedForDelete>0</QueuedForDelete>
<QueuedForDeleteDate></QueuedForDeleteDate>
<Latitude>0</Latitude>
<Longitude>0</Longitude>
<MembershipExpires>1</MembershipExpires>
<MembershipEffectiveExpiresDate>2017-09-08 00:00:00</MembershipEffectiveExpiresDate>
<CustomFieldResponses>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Member Referral</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Individual</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ReferredBy" Visibility="">
<Values>
<Value>xxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Practitioner</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>xxxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ApprovalDate" Visibility="">
<Values>
<Value>9.8.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ChapterApproval" Visibility="">
<Values>
<Value>declined 9.11.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="whois" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="HelpingHandsSummary" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="APCProspect" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="formerchapter" Visibility="">
<Values>
<Value>San Diego</Value>
</Values>
</CustomFieldResponse>
</CustomFieldResponses>
</Sa.People.Profile.Get>
</YourMembership_Response>
<?xml version="1.0" encoding="utf-8" ?>
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.People.Profile.Get>
<ID>098765</ID>
<WebsiteID>1234</WebsiteID>
<PrimaryGroupCode>abc</PrimaryGroupCode>
<IsMember>1</IsMember>
<IsNonMember>0</IsNonMember>
<Registered>2017-09-07 18:48:00</Registered>
<LastUpdated>2017-09-11 15:19:54</LastUpdated>
<ImportID>u293248</ImportID>
<ConstituentID></ConstituentID>
<EmailAddr>xxxx</EmailAddr>
<EmailBounced>0</EmailBounced>
<NamePrefix>xxx</NamePrefix>
<FirstName>John</FirstName>
<MiddleName></MiddleName>
<LastName>Smith</LastName>
<NameSuffix></NameSuffix>
<Nickname></Nickname>
<Gender>M</Gender>
<Birthdate></Birthdate>
<MaritalStatus></MaritalStatus>
<MaidenName></MaidenName>
<SpouseName></SpouseName>
<AnniversaryDate></AnniversaryDate>
<Employer>Welk Resorts</Employer>
<Title>xxxx</Title>
<Profession></Profession>
<Membership>xxxxx</Membership>
<MembershipExpiry>2017-09-08 00:00:00</MembershipExpiry>
<MemberTypeCode>xxxx</MemberTypeCode>
<Approved>1</Approved>
<Suspended>1</Suspended>
<Username>xx@xx.com</Username>
<PasswordHash>xxxx</PasswordHash>
<AltEmailAddr>xxxx</AltEmailAddr>
<HomeAddrLines></HomeAddrLines>
<HomeCity></HomeCity>
<HomeLocation>xxxx</HomeLocation>
<HomePostalCode></HomePostalCode>
<HomeCountry>United States</HomeCountry>
<Website></Website>
<HomePhAreaCode></HomePhAreaCode>
<HomePhone></HomePhone>
<MobileAreaCode></MobileAreaCode>
<Mobile></Mobile>
<EmpAddrLines></EmpAddrLines>
<EmpCity></EmpCity>
<EmpLocation>Alabama</EmpLocation>
<EmpPostalCode></EmpPostalCode>
<EmpCountry>United States</EmpCountry>
<BusinessWebsite></BusinessWebsite>
<EmpPhAreaCode></EmpPhAreaCode>
<EmpPhone></EmpPhone>
<EmpFaxAreaCode></EmpFaxAreaCode>
<EmpFax></EmpFax>
<HeadshotImageURI></HeadshotImageURI>
<LastRenewalReminderSent></LastRenewalReminderSent>
<GamificationPoints></GamificationPoints>
<MasterID></MasterID>
<LastRenewalDate>2017-09-07 00:00:00</LastRenewalDate>
<ApprovalDate>9/11/2017 00:00:00 PM</ApprovalDate>
<LastModifiedDate>2017-09-11 00:00:00 </LastModifiedDate>
<QueuedForDelete>0</QueuedForDelete>
<QueuedForDeleteDate></QueuedForDeleteDate>
<Latitude>0</Latitude>
<Longitude>0</Longitude>
<MembershipExpires>1</MembershipExpires>
<MembershipEffectiveExpiresDate>2017-09-08 00:00:00</MembershipEffectiveExpiresDate>
<CustomFieldResponses>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Member Referral</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Individual</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ReferredBy" Visibility="">
<Values>
<Value>xxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Practitioner</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>xxxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ApprovalDate" Visibility="">
<Values>
<Value>9.8.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ChapterApproval" Visibility="">
<Values>
<Value>declined 9.11.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="whois" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="HelpingHandsSummary" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="APCProspect" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="formerchapter" Visibility="">
<Values>
<Value>San Diego</Value>
</Values>
</CustomFieldResponse>
</CustomFieldResponses>
</Sa.People.Profile.Get>
</YourMembership_Response>
有没有办法让每个 xml 标签快速成为 csv 中的一列?如果我也有的话,我不介意手动输入要写入的字段。但想将结果保存并拆分为 csv。 CSV 应如下所示:
ID FirstName LastName EmailAddr
12312 John Smith john@smith.com
提前谢谢你。
此代码获取输入 xml 文件中每个配置文件中 'children' 的标签和文本。但是小心,此代码不会尝试编译出现在所有配置文件中的所有标签的完整集合。如果某些个人资料具有其他人没有的标签,那么这将导致编写 csv 文件时变得复杂,因为在开始编写之前您需要知道 csv 中有多少列。
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.People.Profile.Get">
<ID>{}</ID>
</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>xxxx</ApiKey>
<CallID>001</CallID>
<SaPasscode>xxxx</SaPasscode>
<Call Method="Sa.Groups.Group.GetMembershipLog">
<GroupID>12345</GroupID>
<ItemID></ItemID>
<StartDate></StartDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
from xml.etree import et
tree = et.fromstring(r.text)
people_profiles = tree.findall('.//Sa.People.Profile.Get')
for people_profile in people_profiles:
'New profile'
for c, child in enumerate(people_profile.getchildren()):
print (child.tag, child.text)
我必须根据 XML API 响应创建 csv。我有两个问题。一 - 由于某种原因,我进行的 API 调用在添加后没有保存到列表中,列表完全消失了。
two - 因为我无法存储 API 调用的结果,所以我不知道如何抓取结果并创建 csv。
代码设置为首先获取组级别数据,然后获取每个 ID 并应用到 people.profile API 调用以获取他们的个人资料信息。我可以做这部分,这是代码:
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.People.Profile.Get">
<ID>{}</ID>
</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>xxxx</ApiKey>
<CallID>001</CallID>
<SaPasscode>xxxx</SaPasscode>
<Call Method="Sa.Groups.Group.GetMembershipLog">
<GroupID>12345</GroupID>
<ItemID></ItemID>
<StartDate></StartDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
print r.text
# BUILD XML TREE OBJECT
tree = et.fromstring(r.text)
storage = []
# PARSE People ID TEXT AND PASS INTO FUNCTION
for i in tree.iterfind('.//ID'):
y = xml_event_info(i.text)
storage.append(y)
在评论“解析人员 ID 文本并传递给函数时,当我迭代 API 调用时,值没有保存到列表 'storage' 中,因此,一旦通话结束 'storage' 消失了,当我去打印列表 'storage' 时它说 'None'。
其次,y = xml_event_info(i.text)
是我需要解析为 CSV 的实际人员资料数据,这就是 XML 的样子:
<?xml version="1.0" encoding="utf-8" ?>
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.People.Profile.Get>
<ID>098765</ID>
<WebsiteID>1234</WebsiteID>
<PrimaryGroupCode>abc</PrimaryGroupCode>
<IsMember>1</IsMember>
<IsNonMember>0</IsNonMember>
<Registered>2017-09-07 18:48:00</Registered>
<LastUpdated>2017-09-11 15:19:54</LastUpdated>
<ImportID>u293248</ImportID>
<ConstituentID></ConstituentID>
<EmailAddr>xxxx</EmailAddr>
<EmailBounced>0</EmailBounced>
<NamePrefix>xxx</NamePrefix>
<FirstName>John</FirstName>
<MiddleName></MiddleName>
<LastName>Smith</LastName>
<NameSuffix></NameSuffix>
<Nickname></Nickname>
<Gender>M</Gender>
<Birthdate></Birthdate>
<MaritalStatus></MaritalStatus>
<MaidenName></MaidenName>
<SpouseName></SpouseName>
<AnniversaryDate></AnniversaryDate>
<Employer>Welk Resorts</Employer>
<Title>xxxx</Title>
<Profession></Profession>
<Membership>xxxxx</Membership>
<MembershipExpiry>2017-09-08 00:00:00</MembershipExpiry>
<MemberTypeCode>xxxx</MemberTypeCode>
<Approved>1</Approved>
<Suspended>1</Suspended>
<Username>xx@xx.com</Username>
<PasswordHash>xxxx</PasswordHash>
<AltEmailAddr>xxxx</AltEmailAddr>
<HomeAddrLines></HomeAddrLines>
<HomeCity></HomeCity>
<HomeLocation>xxxx</HomeLocation>
<HomePostalCode></HomePostalCode>
<HomeCountry>United States</HomeCountry>
<Website></Website>
<HomePhAreaCode></HomePhAreaCode>
<HomePhone></HomePhone>
<MobileAreaCode></MobileAreaCode>
<Mobile></Mobile>
<EmpAddrLines></EmpAddrLines>
<EmpCity></EmpCity>
<EmpLocation>Alabama</EmpLocation>
<EmpPostalCode></EmpPostalCode>
<EmpCountry>United States</EmpCountry>
<BusinessWebsite></BusinessWebsite>
<EmpPhAreaCode></EmpPhAreaCode>
<EmpPhone></EmpPhone>
<EmpFaxAreaCode></EmpFaxAreaCode>
<EmpFax></EmpFax>
<HeadshotImageURI></HeadshotImageURI>
<LastRenewalReminderSent></LastRenewalReminderSent>
<GamificationPoints></GamificationPoints>
<MasterID></MasterID>
<LastRenewalDate>2017-09-07 00:00:00</LastRenewalDate>
<ApprovalDate>9/11/2017 00:00:00 PM</ApprovalDate>
<LastModifiedDate>2017-09-11 00:00:00 </LastModifiedDate>
<QueuedForDelete>0</QueuedForDelete>
<QueuedForDeleteDate></QueuedForDeleteDate>
<Latitude>0</Latitude>
<Longitude>0</Longitude>
<MembershipExpires>1</MembershipExpires>
<MembershipEffectiveExpiresDate>2017-09-08 00:00:00</MembershipEffectiveExpiresDate>
<CustomFieldResponses>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Member Referral</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Individual</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ReferredBy" Visibility="">
<Values>
<Value>xxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Practitioner</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>xxxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ApprovalDate" Visibility="">
<Values>
<Value>9.8.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ChapterApproval" Visibility="">
<Values>
<Value>declined 9.11.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="whois" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="HelpingHandsSummary" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="APCProspect" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="formerchapter" Visibility="">
<Values>
<Value>San Diego</Value>
</Values>
</CustomFieldResponse>
</CustomFieldResponses>
</Sa.People.Profile.Get>
</YourMembership_Response>
<?xml version="1.0" encoding="utf-8" ?>
<YourMembership_Response>
<ErrCode>0</ErrCode>
<ExtendedErrorInfo></ExtendedErrorInfo>
<Sa.People.Profile.Get>
<ID>098765</ID>
<WebsiteID>1234</WebsiteID>
<PrimaryGroupCode>abc</PrimaryGroupCode>
<IsMember>1</IsMember>
<IsNonMember>0</IsNonMember>
<Registered>2017-09-07 18:48:00</Registered>
<LastUpdated>2017-09-11 15:19:54</LastUpdated>
<ImportID>u293248</ImportID>
<ConstituentID></ConstituentID>
<EmailAddr>xxxx</EmailAddr>
<EmailBounced>0</EmailBounced>
<NamePrefix>xxx</NamePrefix>
<FirstName>John</FirstName>
<MiddleName></MiddleName>
<LastName>Smith</LastName>
<NameSuffix></NameSuffix>
<Nickname></Nickname>
<Gender>M</Gender>
<Birthdate></Birthdate>
<MaritalStatus></MaritalStatus>
<MaidenName></MaidenName>
<SpouseName></SpouseName>
<AnniversaryDate></AnniversaryDate>
<Employer>Welk Resorts</Employer>
<Title>xxxx</Title>
<Profession></Profession>
<Membership>xxxxx</Membership>
<MembershipExpiry>2017-09-08 00:00:00</MembershipExpiry>
<MemberTypeCode>xxxx</MemberTypeCode>
<Approved>1</Approved>
<Suspended>1</Suspended>
<Username>xx@xx.com</Username>
<PasswordHash>xxxx</PasswordHash>
<AltEmailAddr>xxxx</AltEmailAddr>
<HomeAddrLines></HomeAddrLines>
<HomeCity></HomeCity>
<HomeLocation>xxxx</HomeLocation>
<HomePostalCode></HomePostalCode>
<HomeCountry>United States</HomeCountry>
<Website></Website>
<HomePhAreaCode></HomePhAreaCode>
<HomePhone></HomePhone>
<MobileAreaCode></MobileAreaCode>
<Mobile></Mobile>
<EmpAddrLines></EmpAddrLines>
<EmpCity></EmpCity>
<EmpLocation>Alabama</EmpLocation>
<EmpPostalCode></EmpPostalCode>
<EmpCountry>United States</EmpCountry>
<BusinessWebsite></BusinessWebsite>
<EmpPhAreaCode></EmpPhAreaCode>
<EmpPhone></EmpPhone>
<EmpFaxAreaCode></EmpFaxAreaCode>
<EmpFax></EmpFax>
<HeadshotImageURI></HeadshotImageURI>
<LastRenewalReminderSent></LastRenewalReminderSent>
<GamificationPoints></GamificationPoints>
<MasterID></MasterID>
<LastRenewalDate>2017-09-07 00:00:00</LastRenewalDate>
<ApprovalDate>9/11/2017 00:00:00 PM</ApprovalDate>
<LastModifiedDate>2017-09-11 00:00:00 </LastModifiedDate>
<QueuedForDelete>0</QueuedForDelete>
<QueuedForDeleteDate></QueuedForDeleteDate>
<Latitude>0</Latitude>
<Longitude>0</Longitude>
<MembershipExpires>1</MembershipExpires>
<MembershipEffectiveExpiresDate>2017-09-08 00:00:00</MembershipEffectiveExpiresDate>
<CustomFieldResponses>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Member Referral</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Individual</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ReferredBy" Visibility="">
<Values>
<Value>xxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>Practitioner</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values>
<Value>xxxxx</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="xxxx" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ApprovalDate" Visibility="">
<Values>
<Value>9.8.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="ChapterApproval" Visibility="">
<Values>
<Value>declined 9.11.17</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="whois" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="HelpingHandsSummary" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="APCProspect" Visibility="">
<Values></Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="formerchapter" Visibility="">
<Values>
<Value>San Diego</Value>
</Values>
</CustomFieldResponse>
</CustomFieldResponses>
</Sa.People.Profile.Get>
</YourMembership_Response>
有没有办法让每个 xml 标签快速成为 csv 中的一列?如果我也有的话,我不介意手动输入要写入的字段。但想将结果保存并拆分为 csv。 CSV 应如下所示:
ID FirstName LastName EmailAddr
12312 John Smith john@smith.com
提前谢谢你。
此代码获取输入 xml 文件中每个配置文件中 'children' 的标签和文本。但是小心,此代码不会尝试编译出现在所有配置文件中的所有标签的完整集合。如果某些个人资料具有其他人没有的标签,那么这将导致编写 csv 文件时变得复杂,因为在开始编写之前您需要知道 csv 中有多少列。
def xml_event_info(eventID):
xml ='''
<?xml version="1.0" encoding="UTF-8"?>
<YourMembership>
<Version>2.25</Version>
<ApiKey>xxxx</ApiKey>
<CallID>001</CallID>
<></>
<SaPasscode>xxxx</SaPasscode>
<Call Method = "Sa.People.Profile.Get">
<ID>{}</ID>
</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>xxxx</ApiKey>
<CallID>001</CallID>
<SaPasscode>xxxx</SaPasscode>
<Call Method="Sa.Groups.Group.GetMembershipLog">
<GroupID>12345</GroupID>
<ItemID></ItemID>
<StartDate></StartDate>
</Call>
</YourMembership>
'''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post('https://api.yourmembership.com', data=xml, headers=headers)
from xml.etree import et
tree = et.fromstring(r.text)
people_profiles = tree.findall('.//Sa.People.Profile.Get')
for people_profile in people_profiles:
'New profile'
for c, child in enumerate(people_profile.getchildren()):
print (child.tag, child.text)