【问题标题】:Rejection Issue Querying NIH via API通过 API 查询 NIH 的拒绝问题
【发布时间】:2021-10-22 07:40:59
【问题描述】:

这是我第一次连接 API。我正在尝试查询 NIH 项目数据,并且当我得到状态代码 200 时似乎可以正确连接到它。我遇到的问题是当我尝试打印输出时。尽管可以访问,但我收到了 URL 拒绝。该文档表明,如果出现任何问题,可能是由于我的 IP 由于各种原因被阻止。我联系了那里的 API 支持团队,我对被阻止的 IP 没有任何问题。他们让我通过命令提示符运行一些curl 请求,我能够正确执行这些请求。这让我相信我有代码问题。我在这里做错了什么?

NIH API Info

import requests


params = {
     "criteria":
     {
       "fiscal_years":[2019,2018]
     },
     "include_fields": [
        "ApplId","SubprojectId","FiscalYear","Organization", "ProjectNum","OrgCountry",
        "ProjectNumSplit","ContactPiName","AllText","FullStudySection",
        "ProjectStartDate","ProjectEndDate"
     ],
     "offset":0,
     "limit":25,
     "sort_field":"project_start_date",
     "sort_order":"desc"
 }
response = requests.post("https://api.reporter.nih.gov/v2/projects/Search", data = params)

#print(response.status_code)

print(response.text)

示例 curl 脚本和输出:

curl -X POST "https://api.reporter.nih.gov/v2/projects/search" -H "accept: application/json" -H "Content-Type: application/json" -d "{​​​​​​​\"criteria\":{​​​​​​​\"covid_response\":[\"Reg-CV\",\"CV\"]}​​​​​​​,\"include_fields\":[\"ApplId\",\"SubprojectId\",\"FiscalYear\",\"Organization\",\"ProjectNum\",\"OrgCountry\",\"ProjectNumSplit\",\"ContactPiName\",\"AllText\",\"FullStudySection\",\"ProjectStartDate\",\"ProjectEndDate\"],\"offset\":0,\"limit\":10}​​​​​​​"

【问题讨论】:

    标签: python-3.x python-requests api-design


    【解决方案1】:

    解决方案很简单,但很容易错过。你需要json=params看这个问题:How to POST JSON data with Python Requests?

    response = requests.post("https://api.reporter.nih.gov/v2/projects/search", json=params)
    

    以下是稍作改动的完整代码:

    import requests
    
    params = {
      "criteria":
        {
          "fiscal_years":[2019,2018]
        },
      "include_fields": [
        "ApplId","SubprojectId","FiscalYear","Organization", "ProjectNum","OrgCountry",
        "ProjectNumSplit","ContactPiName","AllText","FullStudySection",
        "ProjectStartDate","ProjectEndDate"
      ],
      "offset":0,
      "limit":25,
      "sort_field":"project_start_date",
      "sort_order":"desc"
    }
    
    response = requests.post("https://api.reporter.nih.gov/v2/projects/search", json=params)
    
    print(response.status_code)
    print(response.text)
    

    结果的开始看起来像:

    {"meta":{"search_id":null,"total":160216,"offset":0,"limit":25,"sort_field":"project_start_date","sort_order":"desc","sorted_by_relevance":false,"properties":{}},"results":[{"appl_id":10396858,"subproject_id":null,"fiscal_year":2018,"project_num":"7K01AG046366-06","organization":{"org_name":"UNIVERSITY OF CONNECTICUT SCH OF MED/DNT","city":null,"country":null,"org_city":"FARMINGTON","org_country":"UNITED STATES","org_state":"CT","org_state_name":null,"dept_type":"NEUROSCIENCES","fips_country_code":null,"org_duns":["022254226"],...
    

    【讨论】:

    • 谢谢!我很生气,这是一个如此简单的修复哈哈
    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多