如何处理 API 响应

Posted

技术标签:

【中文标题】如何处理 API 响应【英文标题】:How to deal with API response 【发布时间】:2017-08-23 10:11:33 【问题描述】:

我能够连接到Mind Body api 并运行一个简单的命令来获取所有客户端数据

from Helper.ClientService import ClientServiceCalls

calls = ClientServiceCalls()
clients = calls.GetAllClients()
print(clients)

服务器将响应这些信息:

(GetClientsResult)
   Status = "Success"
   ErrorCode = 200
   XMLDetail = "Full"
   ResultCount = 4503
   CurrentPageIndex = 0
   TotalPageCount = 181
   Clients = 
      (ArrayOfClient)
         Client[] = 
            (Client)
               MobileProvider = None
               AppointmentGenderPreference = "None"
               Gender = "Female"
               IsCompany = False
               LiabilityRelease = False
               PromotionalEmailOptIn = True
               CreationDate = 2017-02-23 00:00:00
               Liability = 
                  (Liability)
                     IsReleased = False
                     AgreementDate = None
                     ReleasedBy = None
                  
               UniqueID = 100015484
               ID = "100015484"
               FirstName = "Sdfoij"
               LastName = "[asodfj"
               EmailOptIn = True
               State = "CA"
               Country = "US"
               BirthDate = None
               FirstAppointmentDate = 2017-03-03 00:00:00
               HomeLocation = 
                  (Location)
                     SiteID = -99
                     BusinessDescription = ""The MINDBODY Health Club Demo is awesome." - Anonymous (but probably someone cool and smart)"
                     AdditionalImageURLs = ""
                     FacilitySquareFeet = None
                     TreatmentRooms = None
                     HasClasses = True
                     PhoneExtension = None
                     ID = 1
                     Name = "Clubville"
                  
               PhotoURL = "https://clients.mindbodyonline.com/studios/DemoAPISandboxRestore/clients/100015484_large.jpg?v=98"
               IsProspect = False
               Status = "Active"
               ContactMethod = 1
            .... **and continue printing other client informations**

     
 

现在问题是我想从中提取这些信息,

Client Email, Client Name, Client Phone Number, Client Status (active or inactive), Client Birthday, Client Address, Most Recent Visit Date, Most Recent Visit Description, Start Date, Custom Field(s)

但我不知道我可以使用什么库来解析这个输出,我正在考虑 Beautiful Soup 但我不太确定,

我真的是使用 api 的新手,所以如果有人能给我一个关于如何做到这一点的想法,那就太好了。

【问题讨论】:

同样在这里 Josh,我真的很困惑如何处理这个 api,无论如何,如果你有任何可以让我走上正轨的信息,请不要犹豫提及它。谢谢 我的猜测是他们正在使用SOAP,因为其中一个 ClientService 使用了包 suds。因此,您可能希望查看响应的 XML 解析器。 查看此链接 her 它有一些关于他们的 XML 响应的描述。 请帮帮我,你提供的答案是抛出错误,你能给出另一个解决方案吗? 【参考方案1】:

好的,我在 googs 中搜索了 mindbody WSDL,得到了以下链接:https://api.mindbodyonline.com/0_5/SiteService.asmx?wsdl。通过查看 API 示例中的代码,看起来他们肯定在使用 SOAP。我的建议是您尝试以下方法:

from suds.client import Client
from Helper.ClientService import ClientServiceMethods
calls = ClientServiceMethods()
clients = calls.GetAllClients()
client_dict = Client.dict(clients)

或查看link 以获取响应并将其转换为字典。

【讨论】:

从运行你的示例代码我得到 TypeError: 'NoneType' object is not iterable 有什么想法吗?? 嗯。好的,我没有这个 API。所以我不能直接运行代码。这是我的建议。运行type(clients)dir(clients),让我知道你得到了什么结果。可能可以直接访问您想要的字段。 我发现 ,当运行 print(type(clients)) ||||从运行 print(type(calls)) 我得到 您似乎使用了错误的 API 调用。 ClientServiceCalls 仅将结果显示到标准输出。我会更新我的答案。

以上是关于如何处理 API 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何处理android中reddit api的深层嵌套json响应?

如何处理 VBA 中 HTML 变量的 MailChimp API 响应?

使用 Azure 文本翻译 API 时如何处理限制?

如何处理进行中的请求以使用redux saga显示加载程序?

如何处理反序列化变化的 JSON 数据?

开玩笑测试 - 如何处理 JsonWebToken 响应