新闻搜索工具突然返回空结果且更换API后密钥报错的问题求助
新闻搜索工具突然返回空结果且更换API后密钥报错的问题求助
看起来你遇上了挺闹心的状况——之前好好的工具突然罢工,换API还碰上新麻烦,咱一步步来捋清楚问题出在哪:
先解决「突然返回空结果」的核心问题
你说代码没改就突然没输出,大概率和NewsAPI的调用逻辑或数据返回有关,给你几个排查方向:
检查API返回的完整响应
你现在只提取了articles字段,但完全不知道API调用本身有没有报错、到底有没有匹配到文章。可以在调用get_everything之后加一行打印:print("API完整返回内容:", responce)重点看
status字段(是不是ok)、totalResults字段(是不是0):- 如果
totalResults是0:说明当天确实没有匹配你搜索词的文章,或者你的搜索词太窄、排序规则导致没内容。可以试试把from_param的日期往前调1-2天,比如:from datetime import timedelta # 替换原from_param行 from_param=(date.today() - timedelta(days=1)).isoformat() - 如果
status是error:那就是API调用出问题了,可能是免费密钥的调用次数超限(哪怕你没改代码,密钥如果不小心泄露,可能被别人用超了),或者密钥失效,这时候可以去NewsAPI的后台看看密钥状态。
- 如果
搜索词与排序规则的组合问题
比如你搜了一个非常小众的词,又选了relevancy排序,当天刚好没有相关内容;或者选了publishedAt但当天的文章还没被NewsAPI收录。可以试试用宽泛的搜索词(比如"tech")+publishedAt排序测试,看能不能返回结果。
再说说「更换API后密钥报错」的问题
不同API的密钥传递规则完全不一样,不能直接套NewsAPI的用法:
- 有的API要求把密钥放在
Authorization请求头里(格式比如Bearer 你的密钥); - 有的是作为URL参数传递;
- 还有的可能需要在请求体里指定。
你换API的时候一定要仔细看对应API的官方文档,确认密钥的格式、传递位置,别直接把NewsAPI的api_key参数用法照搬过去,另外复制密钥的时候要注意有没有多带空格、少复制字符的情况。
顺便给你提几个代码里的潜在小坑
这些虽然不是当前问题的直接原因,但长期用肯定会出问题:
- 文章索引错误:你用
enumerate(articles, start=1)给文章编了1开始的号,但textList是0开始的索引,用户输入1的时候你取textList[ques4int]会拿到第二篇文章的内容,应该改成textList[ques4int-1]; - 递归调用栈溢出:你在各种分支里都递归调用
newsSearcher(),多次操作后会导致调用栈越来越深,最后直接崩溃,建议改成用while True循环控制流程; - 异常处理太笼统:你用
except:捕获所有异常,根本不知道下载文章失败是网络问题还是解析问题,改成捕获具体异常并打印错误信息:except Exception as e: print(f"下载文章失败:{str(e)}") - Gemini调用的语法错误:
if ques8=='yes' or'y':这里逻辑有问题,'y'本身是布尔值True,不管用户输入什么都会进入递归,应该写成if ques8=='yes' or ques8=='y':
备注:内容来源于stack exchange,提问作者Phineas Haskell
相关产品推荐
相关产品推荐

