🎥

MerakiカメラのAPIで最新のスナップショット取得

2021/06/04に公開

Merakiのカメラを検証中にAPIでいろいろできることを聞いたため、最新のスナップショットをPythonでとってみることにした。

カメラについてはこちら。
https://www.cisco.com/c/m/ja_jp/meraki/products/security-cameras.html#~features
https://documentation.meraki.com/MV

APIアクセスの有効化

Merakiダッシュボードにログイン後、Organization(オーガナイゼーション) > Settings(設定) > Dashboard API access(ダッシュボードAPIアクセス) で、オーガナイゼーションのAPIを有効化

APIを有効化したら、my profileページに移動して、APIキーを生成。

Meraki Dashboard APIの使い方

公式ドキュメントを参照
https://developer.cisco.com/meraki/api-v1/#!introduction

スナップショットの取得

このAPIを使って、スナップショットを取得する。
https://developer.cisco.com/meraki/api-v1/#!generate-device-camera-snapshot

以下のコードはPythonで書いてみた。

Get-CameraSnapshot.py
# {serial}と{api-key}は環境毎で設定

import requests
import json
import time

url = "https://api.meraki.com/api/v1/devices/{serial}/camera/generateSnapshot"

payload = {}
headers = {
  "Content-Type": "application/json",
  "Accept": "application/json",
  "X-Cisco-Meraki-API-Key": "{api-key}"

}

response = requests.request('POST', url, headers=headers, data=payload)

# APIの実行結果の表示
# print(response.text)

# API実行結果(JSON)の読み込み
rjson = json.loads(response.text)
urlDate = rjson["url"]

# API実行後ファイルの生成まで待機
for i in range(0, 30):
  response = requests.request('GET', urlDate, headers=headers, data=payload)
  print(response.status_code)
  if response.status_code == 200:
    break
  else:
    print('sleeping for 1 second')
    time.sleep(1)

# 画像を保存
file = open('mv_snapshot.png', 'wb')
file.write(response.content)
file.close()

補足

payload部分にtimestampを入れると任意の時間のスナップショットを取得することも可能。

Discussion