You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用无筛选条件的Azure零售价格API拉取数据报错,求解决方案指导

故障原因
  • 无筛选条件调用Azure Retail Prices API时,接口会返回全量全球Azure服务定价数据,总数据量超千万条,分页请求次数极多,很容易触发API限流规则(返回429状态码)或请求超时,这是报错的核心原因
  • 代码已导入重试模块但未实际启用,请求失败后无容错机制直接中断
  • 代码存在逻辑冗余:第一页返回的Items数据会被先后添加两次,生成的结果存在大量重复数据
  • 代码中写入文件用的folder目录如果未提前在本地创建,会触发路径不存在的IO错误
修复步骤
  1. 优先给API请求添加筛选条件,大幅减少数据返回量。比如你文件名标注要拉美国中南部的虚拟机价格,可以将初始请求地址替换为带筛选的地址:
    https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and armRegionName eq 'southcentralus'
    如果确实需要全量数据,可以拆分筛选条件分批次拉取,比如按区域、按服务类型拆分请求,避免单次任务请求量过大。

  2. 使用修复后的代码,新增重试逻辑、超时设置、路径校验,同时修复重复添加数据的问题:

import requests
import json
import pandas as pd
import os
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

# 配置重试策略
session = requests.Session()
retry_strategy = Retry(
    total=5,  # 最多重试5次
    backoff_factor=1,  # 重试间隔:1s, 2s, 4s...
    status_forcelist=[429, 500, 502, 503, 504]  # 这些状态码触发重试
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("https://", adapter)
session.mount("http://", adapter)

# 带筛选的API地址,可根据需求修改筛选条件
api_url = "https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Virtual Machines' and armRegionName eq 'southcentralus'"
filename = 'azureretailprices_vm_scus'
# 确保存储目录存在
save_folder = 'folder'
os.makedirs(save_folder, exist_ok=True)

priceitems = []
response = session.get(api_url, timeout=30)

# 循环拉取所有分页数据
while True:
    resp_json = response.json()
    # 加入当前页数据
    for item in resp_json['Items']:
        priceitems.append(item)
    # 没有下一页就退出
    next_link = resp_json.get('NextPageLink')
    if not next_link:
        break
    # 拉取下一页
    print(f"拉取下一页:{next_link}")
    response = session.get(next_link, timeout=30)

# 保存JSON文件
with open(os.path.join(save_folder, f"{filename}.json"), 'w', encoding='utf-8') as f:
    json.dump(priceitems, f, ensure_ascii=False, indent=2)

# 转存Excel
df = pd.json_normalize(priceitems)
df.to_excel(os.path.join(save_folder, f"{filename}.xlsx"), sheet_name='RetailPrices', index=False)
  1. 运行修复后的代码即可正常拉取数据,不会触发报错。

内容的提问来源于stack exchange,提问作者kakaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:09