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

如何通过Python脚本自动化批量执行仅支持单输入的Cisco Meraki API GET请求?

自动化批量调用Cisco Meraki API的GET请求

当然可以实现自动化!既然dashboard.networks.getNetworkDevices()只支持单个网络ID参数,我们只需要遍历你的网络ID列表,逐个调用这个函数就行。下面给你两种实用的实现方案:

方案1:同步循环(简单易维护)

这是最直接的方式,适合对执行速度要求不高的场景,代码可读性强,容易调试:

# 先导入Meraki SDK(确保你已经安装:pip install meraki)
import meraki

# 初始化Dashboard实例(替换成你的API密钥)
dashboard = meraki.DashboardAPI(api_key='YOUR_MERAKI_API_KEY')

# 把你的50+网络ID放到一个列表里
network_ids = ['xxx1', 'xxx2', 'xxx3', ...]  # 这里替换成实际的ID列表

# 初始化一个空列表用来存储所有设备数据
all_network_devices = []

# 遍历每个网络ID,逐个调用API
for network_id in network_ids:
    try:
        # 调用API获取当前网络的设备
        devices = dashboard.networks.getNetworkDevices(network_id)
        # 把结果添加到总列表里,可以顺便带上网络ID方便区分
        all_network_devices.append({
            'network_id': network_id,
            'devices': devices
        })
        print(f"成功获取网络 {network_id} 的设备数据")
    except Exception as e:
        # 捕获异常,避免单个ID出错导致整个脚本中断
        print(f"获取网络 {network_id} 数据失败: {str(e)}")

# 最后可以把结果保存到文件或者做后续处理
# 比如保存为JSON文件
import json
with open('all_meraki_devices.json', 'w') as f:
    json.dump(all_network_devices, f, indent=4)

方案2:并发请求(提升效率)

如果50多个请求逐个跑太慢,你可以用线程池来并发执行,这样能大幅缩短总耗时。Meraki API的Python SDK是同步的,但我们可以用concurrent.futures来实现并发:

import meraki
import concurrent.futures
import json

dashboard = meraki.DashboardAPI(api_key='YOUR_MERAKI_API_KEY', suppress_logging=True)  # 关闭日志减少干扰
network_ids = ['xxx1', 'xxx2', 'xxx3', ...]

def get_devices(network_id):
    """封装单个网络ID的请求逻辑,方便线程池调用"""
    try:
        devices = dashboard.networks.getNetworkDevices(network_id)
        return {
            'network_id': network_id,
            'devices': devices,
            'status': 'success'
        }
    except Exception as e:
        return {
            'network_id': network_id,
            'error': str(e),
            'status': 'failed'
        }

# 使用线程池并发执行,max_workers可以根据API限制调整(Meraki API默认速率限制是每秒5次请求)
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    # 把所有网络ID提交给线程池
    results = list(executor.map(get_devices, network_ids))

# 处理结果
success_count = sum(1 for res in results if res['status'] == 'success')
failed_count = len(results) - success_count
print(f"批量执行完成:成功 {success_count} 个,失败 {failed_count} 个")

# 保存结果
with open('all_meraki_devices_concurrent.json', 'w') as f:
    json.dump(results, f, indent=4)

注意事项

  • 记得查看Meraki API的速率限制,默认是每秒最多5次请求,所以方案2里的max_workers不要设得太高,避免触发限流。
  • 如果你还没有安装Meraki SDK,先执行pip install meraki。
  • 确保你的API密钥有足够的权限访问这些网络的设备数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:47:28