调用Meraki组织上行链路API查询失败连接并转换networkId为网络名称
解决方案
完整可运行代码
import requests import pprint # 第一步:填写你自己的networkId和网络名称映射表,根据你的实际50个网络信息补充即可 NETWORK_ID_MAPPING = { "A_1234567890": "示例网络1", "A_0987654321": "示例网络2" # 继续补充你所有网络的对应关系 } # 替换成你自己的组织ID和API密钥 ORG_ID = "你的组织ID" API_KEY = "你的Meraki API密钥" url = f"https://api.meraki.com/api/v1/organizations/{ORG_ID}/uplinks/statuses" payload = None headers = { "Content-Type": "application/json", "Accept": "application/json", "X-Cisco-Meraki-API-Key": API_KEY } response = requests.request('GET', url, headers=headers, data=payload) # 先判断API请求是否成功 if response.status_code != 200: print(f"API请求失败,状态码:{response.status_code},错误信息:{response.text}") else: all_uplink_status = response.json() # 存储所有失败的上行链路信息 failed_uplinks = [] # 遍历所有设备的上行链路状态 for device_info in all_uplink_status: network_id = device_info["networkId"] # 从映射表取网络名称,没匹配到的话默认显示未知网络 network_name = NETWORK_ID_MAPPING.get(network_id, "未知网络") # 遍历该设备的所有上行链路 for uplink in device_info["uplinks"]: if uplink["status"] == "failed": # 收集需要的字段 failed_info = { "网络名称": network_name, "networkId": network_id, "故障接口": uplink["interface"] } failed_uplinks.append(failed_info) # 输出结果 if not failed_uplinks: print("所有上行链路状态正常,无故障接口") else: print("检测到以下故障上行链路:") for item in failed_uplinks: pprint.pprint(item)
核心逻辑说明
- 首先定义
NETWORK_ID_MAPPING字典实现networkId到网络名称的映射,你只需要把你50个网络的对应关系按照示例格式补充进去即可 - 先做API请求异常判断,避免接口报错时后续逻辑直接崩溃
- 采用双层for循环遍历:第一层遍历所有设备的返回结果,第二层遍历单设备的所有上行链路,只筛选状态为
failed的链路 - 仅保留你需要的网络名称、networkId、故障接口三个字段,自动忽略IP、DNS等无关字段
- 没有匹配到映射关系的networkId会默认显示
未知网络,不会触发程序报错
内容的提问来源于stack exchange,提问作者Juriaan
相关产品推荐
相关产品推荐

