首页 > 解决方案 > Python - 请求未使用请求和 json 授权

问题描述

我一直在使用代码 python 来访问这种 urlhttps://api.elsevier.com/analytics/scival/institution/metrics?metricTypes=ScholarlyOutput&institutionIds=508175%2C508076&yearRange=5yrs&includeSelfCitations=true&byYear=true&includedDocs=AllPublicationTypes&journalImpactType=CiteScore&showAsFieldWeighted=false&apiKey=7f59af901d2d86f78a1fd60c1bf9426a

这是Elsevier Developer Portal提供的公共 json url

我一直在使用的小代码是这样的:

import requests
import json

url = "https://api.elsevier.com/analytics/scival/institution/metrics?metricTypes=ScholarlyOutput&institutionIds=508175%2C508076&yearRange=5yrs&includeSelfCitations=true&byYear=true&includedDocs=AllPublicationTypes&journalImpactType=CiteScore&showAsFieldWeighted=false&apiKey=7f59af901d2d86f78a1fd60c1bf9426a"

with requests.Session() as s:
    data = s.get(url).json()

一切都还好,直到今天我的项目在执行此代码时给了我错误,如果我只运行, s.get(url).text那么我会收到以下消息“请求未授权。请指定有效的 API 密钥或 HMAC 签名。我不得不说我什至有自己的 api_key 和 access_token,但即使使用它们我也会得到相同的消息。

所以,我需要一些帮助来管理提取数据,因为数据仍然在链接中https://api.elsevier.com/analytics/scival/institution/metrics?metricTypes=ScholarlyOutput&institutionIds=508175%2C508076&yearRange=5yrs&includeSelfCitations=true&byYear=true&includedDocs=AllPublicationTypes&journalImpactType=CiteScore&showAsFieldWeighted=false&apiKey=7f59af901d2d86f78a1fd60c1bf9426a(只是谷歌会看到它)。希望有一些指导来做到这一点,因为直到昨天还没有错误。

标签: pythonjsonurlrequest

解决方案


我检查了文档,您在请求中缺少标题。

下面的代码正在工作。

import requests

url = "https://api.elsevier.com/analytics/scival/institution/metrics?metricTypes=ScholarlyOutput&institutionIds=508175%2C508076&yearRange=5yrs&includeSelfCitations=true&byYear=true&includedDocs=AllPublicationTypes&journalImpactType=CiteScore&showAsFieldWeighted=false&apiKey=7f59af901d2d86f78a1fd60c1bf9426a"

payload={}
headers = {
  'Accept': 'application/json'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

推荐阅读