如何使用 API 密钥查看《卫报》中某个关键字的文章数量?

问题描述 投票:0回答:1

我对 Python 还很陌生,我正在尝试运行一段代码来检查《卫报》报纸中提及某个关键字的文章数量。

这是我已经在《纽约时报》上做过的事情,但是当我尝试将相同的代码应用于《卫报》时,它说第 8 行(下面的行)失败了:

hits = json_res["response"]["meta"]["hits"]

这是我遇到问题的整段代码(我之前已经定义了guardian_api_key):

#Checking number of articles on a topic in The Guardian
import requests
def number_of_articles(api_key,keyword,begin_date="19800101",end_date="20240101"):
    url_query = f"http://content.guardianapis.com/#/search?q={keyword}&begin_date={begin_date}&end_date={end_date}&api-key={api_key}"
    print (url_query)
    res = requests.get(url_query)
    json_res = res.json()
    hits = json_res["response"]["meta"]["hits"]
    return hits

print(number_of_articles(api_key=guardian_api_key,keyword="vote"))

我很想得到一些帮助,以便我能了解发生了什么事!如果我的问题不清楚或者我可以尝试什么,请告诉我。

python json api-key
1个回答
0
投票

您的 Gurdians URL 中有拼写错误,请将其更改为

f"http://content.guardianapis.com/#/search?

f"https://content.guardianapis.com/search?

与《泰晤士报》相反,搜索找到的文章数量存储在

res["response"]["total"]

如果您愿意接受建议,我会更加模块化地编写您的代码,从而允许您向系统添加更多 API。

import requests
class BaseParser:
    def __init__(self, key):
        self.key = key
        self.base_url= ""

    def query(self, params: dict) -> dict:
        query = self.base_url
        for key,val in params.items():
            query += f"&{key}={val}"
        return requests.get(query).json()

class GuardianParser(BaseParser):

    def __init__(self, key):
        super().__init__(key)
        self.base_url= f"https://content.guardianapis.com/search?api-key={self.key}"

    def number_of_articles(self, params: dict) -> int:
        res = self.query(params)
        return len(res["response"]["total"])

class TimesParser(BaseParser):

    def __init__(self, key):
        super().__init__(key)
        self.base_url= f"the api url from the times"

    def number_of_articles(self, params: dict):
        res = self.query(params)
        return res["response"]["meta"]["hits"]

search_dict = {
    "keyword":"vote",
    "begin_date":19800101,
    "end_date":20240101
}

gparser = GuardianParser(gkey)
gart = gparser.number_of_articles(search_dict)
tparser = TimesParser(tkey)
tart = gparser.number_of_articles(search_dict)
print(f"Guardian number of articles: {gart}")
print(f"The Times number of articles: {tart}")

此外,我还会添加一些错误处理(例如 API 密钥过期、请求错误、API 无法访问等)。不过,这超出了问题的范围。

© www.soinside.com 2019 - 2024. All rights reserved.