Запрос GET принимает только 1 ввод

#python #get #meraki-api

Вопрос:

 Network_Devices = dashboard.networks.getNetworkDevices('xxx')
 

Я работаю над запросами GET с помощью Cisco Meraki API и модуля на Python. Приведенная выше функция принимает только один «ввод» («xxx») выше. Кроме того, он не будет принимать список.

Есть ли какой-либо способ автоматизировать этот запрос в скрипте python? У меня есть более 50 входов, которые я хотел бы запустить через функцию.

Ответ №1:

Просто используйте цикл for . Вы сказали, что у вас более 50 входных данных, поэтому в этом случае у вас есть несколько вариантов:

  1. Определите список в .py файле, который содержит все идентификаторы networkd (не рекомендуется).
  2. Создайте файл, содержащий все сетевые идентификаторы (рекомендуется).

Я проиллюстрирую вариант 2:

Я предполагаю, что вы используете Meraki SDK v1.12.0, загруженный путем запуска pip install meraki

 from pprint import pprint

import meraki

API_KEY = ""

dashboard = meraki.DashboardAPI(API_KEY)

with open(file=r"network_ids.txt", mode="rt", newline="") as f:
    network_ids = [id.strip() for id in f.read().splitlines() if id.strip()]

for network_id in network_ids:
    network_device = dashboard.networks.getNetworkDevices(network_id)
    pprint(network_device)

 

network_ids.txt Файл должен быть таким: (каждый id в отдельной строке)

 L_123456
L_789101
L_111213
 

Чтобы свести к минимуму этап сбора сетевых идентификаторов и добавления каждого идентификатора в отдельную строку в файле, вы можете получить идентификаторы из идентификатора организации:

 from pprint import pprint

import meraki

API_KEY = ""

dashboard = meraki.DashboardAPI(API_KEY)

# Any organization id
org_id = "549236"

# Get all networks for an organization
networks = dashboard.organizations.getOrganizationNetworks(org_id, total_pages="all")
# pprint(networks)

# loop through networks
for network in networks:
    # Get network devices for each network ID
    network_devices = dashboard.networks.getNetworkDevices(network["id"])
    # Check if the network has devices
    if network_devices:
        print(f"*** Devices in Network: {network['name']} ({network['id']}) ***")
        for device in network_devices:
            pprint(device)
    else:
        print(
            f"!!! No devices found for network: {network['name']} ({network['id']}) !!!"
        )