Meraki API - Get All Clients from All Networks

Solved
Alex-2021
Here to help

Meraki API - Get All Clients from All Networks

Hello, I am attempting to get client info from all clients connected to all networks in my organization. I have been referencing this community forum post, but I am stuck about mid-way through. 

 

Post in reference - https://community.meraki.com/t5/Dashboard-Administration/Meraki-Dashboard-Reporting-How-can-I-get-a-...

 

I have done quite a bit of editing due to the different versions of API & Meraki module. 

 

See below for code example - 

 

# Import "meraki" to allow Meraki function calls
import meraki

# Import "datetime" to get current date and time
import datetime

# ///////// Start Definition of Script Constants ////////////////
# api_key = Unique API key generated on a per Meraki User basis
# org_id = Unique organization ID of organization you want to query

api_key = 'XXXXXXXXXXXXXXXXXXXX'
org_id = 'XXXXXX'

dashboard = meraki.DashboardAPI(api_key)

# Get the current list of networks from your Organization
current_networks = dashboard.organizations.getOrganizationNetworks(org_id, total_pages='all')

# Establish when "now" is, used to create the file name for output
now = datetime.datetime.now()

# Create/Name the output file with year, month, day and hour minutes
filename = now.strftime("%Y-%m-%d %H.%M") + ".txt"

# Open the file for output
f = open(filename,"w+")

# "i" will be used to increment through each "network" in the Organization
i = 0

for i in range(len(current_networks)):

# Output to console the Name and ID of the current network
print(current_networks[i]['name'])
print(current_networks[i]['id'])

curr_net_id = current_networks[i]['id']
curr_net_devices = dashboard.networks.getNetworkDevices(curr_net_id)

# Write to the output file the 'name' of the network and add a comma
f.write(current_networks[i]['name'])
f.write(",")

# Checks for Meraki devices on this network, if there are no devices output to file "No Devices Present"
if len(curr_net_devices) == 0:
f.write("No devices Present")
f.write("\n")

# "j" will be used to increment through each "device" on this network
j = 0

for j in range(len(curr_net_devices)):
# Output to console the serial number of the device
print (curr_net_devices[j]['serial'])
curr_clients = dashboard.organizations.getclients(api_key,curr_net_devices[j]['serial'])


# Checks for clients attached to this device, if no clients present output the name, model and serial of the
# device as well as the message "No Clients"
if len(curr_clients) == 0:
# Output to console "No Clients" message
print ("No clients")

# Output to file "name", "model", "serial" of the device as well as "No Clients" message
f.write(current_networks[i]['name'])
f.write(',')
f.write(curr_net_devices[j]['model'])
f.write(',')
f.write(curr_net_devices[j]['serial'])
f.write(",")
f.write("No Clients")
f.write("\n")

# "k" will be used to increment the number of clients on each device
k = 0

for k in range(len(curr_clients)):
# Output to console "description" and "mac" of the client
print (curr_clients[k]['description'],',',curr_clients[k]['mac'])

# Output to file "name", "model", "serial" of the device as well as the "description" and "mac"
# of the client
f.write(current_networks[i]['name'])
f.write(',')
f.write(curr_net_devices[j]['model'])
f.write(',')
f.write(str(curr_net_devices[j]['name']))
f.write(',')
f.write(curr_net_devices[j]['serial'])
f.write(',')
f.write(str(curr_clients[k]['description']))
f.write(',')
f.write(curr_clients[k]['mac'])
f.write("\n")

# Increment "k" to move onto next client on current device
k = k + 1

# Increment "j" to move onto next device on current Network
j = j + 1
# Increment "i" to move onto next network in Organization
i = i + 1

# Close the output file
f.close()

 

Error message - 'Organizations' object has no attribute 'getclients'

 

Line I see the error is -  'curr_clients = dashboard.organizations.getclients(api_key,curr_net_devices[j]['serial'])'

 

Does anyone know the correct syntax for a getclients pull in this scenario? 

1 Accepted Solution
RaphaelL
Kind of a big deal
Kind of a big deal

Hi ,


Please refer to the official API documentation : https://developer.cisco.com/meraki/api-latest/#!get-network-clients

 

It should be something like : dashboard.networks.getNetworkClients( network_id, total_pages='all' )

View solution in original post

2 Replies 2
RaphaelL
Kind of a big deal
Kind of a big deal

Hi ,


Please refer to the official API documentation : https://developer.cisco.com/meraki/api-latest/#!get-network-clients

 

It should be something like : dashboard.networks.getNetworkClients( network_id, total_pages='all' )

Alex-2021
Here to help

Changing from getClients to getNetworkClients worked!!!!!!!

network_id wouldn't apply here since I am wanting to return all Networks in my org. so I did have to change that argument to (

curr_net_id)

 

Get notified when there are additional replies to this discussion.