如何指定Yahoo Finance API返回字段而非全量返回以提升请求效率
关于Yahoo Finance RapidAPI接口的字段筛选能力说明
核心结论
你当前调用的RapidAPI托管的get-quotes行情接口,不支持通过查询字符串配置参数实现服务端侧的字段裁剪。这个接口的输出逻辑是固定返回所有可用的200余个字段,本身没有内置的字段筛选入参,不管你在querystring里追加什么样的字段指定参数,服务端都会直接忽略,不会帮你做返回内容的裁剪。
可落地的等价实现方案
虽然服务端不支持字段筛选,但你完全可以在客户端侧实现“仅保留需要字段”的效果,本地处理的内存和计算开销可以忽略不计:
- 先明确接口原生支持的查询参数仅包括
region、symbols、lang三类,没有其他隐藏的筛选类参数 - 提前定义你需要的字段白名单,比如你提到的
earningsDate、epsForward、regularMarketPrice、longName、symbol,在拿到全量响应的JSON结构后,在本地代码中只提取白名单对应的键值对即可 - 顺便修正你原代码里的两个不规范写法:一是
region键前面多余的f-string前缀没有实际作用;二是symbols参数值用花括号包裹的写法,在Python中会将其识别为集合类型,容易触发参数序列化异常,需要直接传入字符串格式的标的代码
优化后的代码示例
# 提前定义需要保留的目标字段白名单 TARGET_FIELDS = [ "earningsDate", "epsForward", "regularMarketPrice", "longName", "symbol" ] def get_quote1(self, symbol): url = "https://apidojo-yahoo-finance-v1.p.rapidapi.com/market/v2/get-quotes" querystring = { "region": "US", "symbols": symbol } headers = { 'x-rapidapi-key': "你的接口密钥", 'x-rapidapi-host': "apidojo-yahoo-finance-v1.p.rapidapi.com" } response = requests.request("GET", url, headers=headers, params=querystring) json_data = response.json() # 定位到行情数据的实际存储层级 quote_data_list = json_data.get("quoteResponse", {}).get("result", []) # 本地裁剪字段,只保留白名单内的内容 trimmed_result = [ {field: quote.get(field) for field in TARGET_FIELDS} for quote in quote_data_list ] return trimmed_result
关于请求耗时的额外说明
接口全量返回的200个字段对应的JSON整体体积通常仅为几十KB,本身传输带来的耗时占比很低。如果你感知到请求耗时较长,大概率来自两方面原因:一是参数序列化异常触发了请求重试;二是未开启gzip压缩传输,你可以在请求头中加上Accept-Encoding: gzip, deflate,进一步降低传输耗时。
内容的提问来源于stack exchange,提问作者Eric Egana
相关产品推荐
相关产品推荐

