咨询Bing新闻搜索API freshness参数异常:设为Month却返回旧内容
我之前也碰到过一模一样的情况——设置freshness为"Month",翻到后面几页却出现了半年甚至两年前的内容,折腾了好一阵才理清问题所在,给你整理几个排查和解决的思路:
1. 先确认参数格式是否完全正确
Bing API对freshness参数的大小写有严格要求,必须是首字母大写的"Month",如果写成小写"month"或者缩写"m",API会直接忽略这个过滤条件,返回全量的新闻结果。
你可以检查下请求URL里的参数段,正确的写法应该是:
&freshness=Month
2. 排查是否有其他参数干扰结果排序
如果同时设置了sortBy=Relevance(默认值),API会优先返回相关性高的内容,哪怕这些内容时间更早。尤其是当你搜索的关键词近一个月内的新闻数量不多时,API会自动补充更早的相关内容来填充分页结果。
建议先单独测试只带freshness=Month的请求,看看是否还会出现旧内容,排除其他参数的干扰。如果需要严格按时间排序,记得把sortBy设置为"Date"。
3. 理解Bing API的结果填充逻辑
其实这是Bing API的设计逻辑:freshness是优先返回指定时间范围的内容,但当该范围内结果数量不足时,会自动扩展时间范围来凑够分页结果。比如你设置count=20,翻到第6页(offset=100),但近一个月内只有80条符合条件的新闻,剩下的20条就会从更早的内容里补。
4. 手动二次过滤结果(最稳妥的办法)
如果必须严格限制在近一个月内,拿到API返回结果后,自己在代码里通过datePublished字段做二次过滤。比如用Python的话可以这么写:
from datetime import datetime, timedelta # 计算30天前的时间节点 thirty_days_ago = datetime.now() - timedelta(days=30) # 过滤出近30天内的新闻 filtered_news = [ news for news in bing_response["value"] if datetime.fromisoformat(news["datePublished"].replace("Z", "+00:00")) >= thirty_days_ago ]
5. 官方渠道排查特殊情况
如果以上方法都没用,可能是API的临时故障或者你的订阅有特殊限制,这时候可以提交工单给微软开发者支持,附上你的请求示例和返回旧内容的datePublished信息,让官方帮忙排查。
内容的提问来源于stack exchange,提问作者MIkey

