首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C3.ai新冠肺炎API请求JSON响应?

如何从C3.ai新冠肺炎API请求JSON响应?
EN

Stack Overflow用户
提问于 2020-04-13 05:52:00
回答 3查看 313关注 0票数 2

我正在查询C3.aiAPI,用于分析统一的新冠肺炎数据。我看到,默认情况下,所有API都返回xml格式的字符串。目前,我正在使用python库xmltodict将格式转换为json。有什么方法可以直接请求JSON响应吗?

下面是我正在运行的代码:

代码语言:javascript
复制
import json, requests, xmltodict
url = "https://api.c3.ai/covid/api/1/outbreaklocation/fetch/"
request_data = {
    "spec": {
        "include": "id",
        "limit": 1
    }
}
response = requests.post(url=url, json=request_data)
print(response.text)

我得到的相应答复如下:

代码语言:javascript
复制
<fetchResponse version="2.0">
  <type>
    <module>metadata</module>
    <name>FetchResult</name>
    <bindings>
      <k>T</k>
      <v>
        <type>
          <module>typesys</module>
          <name>ReferenceType</name>
        </type>
        <name>OutbreakLocation</name>
        <mixing>true</mixing>
      </v>
    </bindings>
  </type>
  <objs>
    <k>0</k>
    <v>
      <id>AaenHunze_Drenthe_Netherlands</id>
      <meta>
        <fetchInclude>[id,version,typeIdent]</fetchInclude>
        <fetchType>OutbreakLocation</fetchType>
      </meta>
      <version>262145</version>
      <typeIdent>EP_LOC</typeIdent>
    </v>
  </objs>
  <count>1</count>
  <hasMore>true</hasMore>
</fetchResponse>

我使用以下代码将xml转换为json:

代码语言:javascript
复制
fetch_object = xmltodict.parse(response.text)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-13 17:58:24

您可以尝试的一件事是在请求中指定一个Content标头。

代码语言:javascript
复制
import json, requests, xmltodict
url = "https://api.c3.ai/covid/api/1/outbreaklocation/fetch/"
headers={'content-type': 'application/json'}
request_data = {
    "spec": {
        "include": "id",
        "limit": 1
    }
}
response = requests.post(url=url, json=request_data, headers=headers)
print(response.text)
票数 2
EN

Stack Overflow用户

发布于 2020-04-17 00:16:55

考虑尝试开源回购c3covid19。你可以找到医生来了。它是用于python的非官方c3 covid19数据湖连接包装器。

安装

代码语言:javascript
复制
pip install c3covid19

代码语言:javascript
复制
from c3covid19 import c3api

cnx=c3api()

request_data = {
    "spec": {
        "include": "id",
        "limit": 1
    }
}

output=cnx.request(
    data_type='outbreaklocation',
    parameters=request_data,
    api='fetch',
    output_type='objs'
)
票数 1
EN

Stack Overflow用户

发布于 2020-04-19 16:34:33

默认情况下,服务器返回XML。要获得JSON响应,必须将接受请求header设置为application/json。如果您发送一个请求,其中的内容类型标头被设置为application/json,但没有指定接受值,则仍然会从API获得XML响应。

根据约翰霍普金斯大学()的数据,这里有一个cURL样本,要求对2020年3月意大利确诊死亡人数进行评估。它可以从任何shell界面进行测试,也可以导入到Postman应用程序中,例如:

代码语言:javascript
复制
curl 'https://api.c3.ai/covid/api/1/outbreaklocation/evalmetrics' \
    --request POST \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --data-binary '{
      "spec": {
          "ids": ["Italy"],
          "expressions":["JHU_ConfirmedDeaths"],
          "interval":"DAY",
          "start":"2020-03-01",
          "end":"2020-03-31"
        }
    }'

这将返回一个JSON对象。下面是与上一次调用相同的调用,但不包括Accept标头。在这种情况下,返回一个XML响应:

代码语言:javascript
复制
curl 'https://api.c3.ai/covid/api/1/outbreaklocation/evalmetrics' \
    --request POST \
    --header 'Content-Type: application/json' \
    --data-binary '{
      "spec": {
          "ids": ["Italy"],
          "expressions":["JHU_ConfirmedDeaths"],
          "interval":"DAY",
          "start":"2020-03-01",
          "end":"2020-03-31"
        }
    }'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61182225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档