如何通过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_
相关产品推荐
相关产品推荐

