2017-09-12 10 views
0

XML APIレスポンスからcsvを作成する必要があります。私は2つの問題を抱えています。 1つ - 何らかの理由で、私が作成しているAPI呼び出しが追加後にリストに保存されていない場合、リストは完全に消えます。再帰APIコールを追加してCSVに結果を書き込む方法は?

2つ - API呼び出しの結果を保存できないため、結果をクロールしてcsvを作成する方法がわかりません。

コードは、まずグループレベルのデータを取得し、各IDを取得してpeople.profile API呼び出しに適用してプロファイル情報を取得するように設定されています。 Iこの部分を行うことができますが、ここではコードです:

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'を印刷すると '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>[email protected]</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>[email protected]</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> 

が、私はすぐにcsvファイルの各XMLタグに列を作ることができますとにかくあり?私は手動でどちらかのフィールドに書き込むことはできません。しかし結果をCSVに保存して分割したいと考えています。 CSVは次のようになります。

ID  FirstName LastName EmailAddr 
12312 John  Smith [email protected] 

ありがとうございます。

+0

Rustyは、関数 'xml_event_info'がその結果を返さないことに注意してください。 –

+0

それは#1を解決しました - ありがとうございました! – RustyShackleford

答えて

1

このコードは、入力xmlファイルの各プロファイルの「子」のタグとテキストを取得します。しかし、は注意してください、このコードは、すべてのプロファイルに表示されるすべてのタグの完全なセットをコンパイルしようとしません。いくつかのプロファイルに他のタグがない場合は、csvファイルを書き始める前に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) 
+0

これを実行すると、 'temp.xml'が 'r.text'または 'y'に置き換えられました。 'AttributeError:' NoneType 'オブジェクトに' getchildren 'という属性がありません。これは 'first_item'が反復可能でないためですか? – RustyShackleford

+0

私はXMLに子タグがないので、getchildrenは動作しないと思います。 – RustyShackleford

+0

私が言及すべきは、 'find.all'を使って' Sa.People.Profile.Get'アイテムをすべて取得するコードを修正する必要があります。そして、ループ内で、これらのそれぞれについて、すべての子を取得するコード。私はこの方法でそれをしました、なぜならそのファイルにはただひとりの人しかいなかったからです。 –