DuckDuckGo API含空格编码查询返回空、计算器查询结果异常问题
DuckDuckGo API 调用问题排查与修复
问题1:含空格的查询返回全空JSON
- 触发原因:
- DuckDuckGo 公开Instant Answer API默认仅返回已收录的标准化实体词条结果,无对应收录实体的普通查询默认返回空
- 请求缺失官方要求的必填参数:所有请求必须携带标识调用方的
t参数(值为自定义应用名称),未携带该参数时接口会限制返回内容 - 多义词/模糊查询默认进入消歧逻辑,也会导致有效字段为空,需添加
skip_disambig=1参数跳过消歧
- 修复后的代码:
import urllib import requests def query(q): # 新增必填t参数、跳过消歧参数,添加no_html=1剔除结果中的HTML标签 base_url = "https://api.duckduckgo.com/?q={}&format=json&t=custom_ddg_client&skip_disambig=1&no_html=1" resp = requests.get(base_url.format(urllib.parse.quote(q))) if resp.ok: return resp.json() return {}
修改后调用query("US Presidents")即可正常获取对应实体的结构化返回结果。
问题2:1+1查询返回的Result字段为空
- 触发原因:DuckDuckGo API按返回类型分配存储字段:
- 实体类查询的结构化结果存入
Result字段 - 计算器、单位换算、即时查询类的工具结果,统一存入
Answer字段,Result字段不会赋值
- 实体类查询的结构化结果存入
- 处理方案:查询返回结果的
AnswerType字段,若值为calc(计算器类型),直接读取Answer字段即可得到计算结果2。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

