#Cisco Spark に対して REST-API でアクセスしたい
学習用コンテンツが Cisco DevNet に用意されている(DevNet > Collaboration > Spark for Developers に 3つの Learning Lab がある)。
- Learning Lab #1: Rooms and Messages
- Learning Lab #2: App Registration and Authentication
- Learning Lab #3: Webhooks
懇切丁寧な作りになっているので手順に沿って進めれば「POSTMAN を使って REST-API 経由で Cisco Spark へアクセスする方法」が一通り学べる。
ここではその次のステップとして、POSTMAN を Python へ変更する方法をまとめてみる。
Access Token の取得
Cisco Spark へ REST-API でアクセスするには Access Token が必要。Access Token は Cisco Spark の登録を行うと個人に付与される認証用文字列のこと。以下の方法で取得する:
https://developer.ciscospark.com/
へアクセスしてログイン。
※Cisco Spark の登録が済んでいない場合は登録を行う必要あり
ログインに成功すると右上にアバター(人の顔をしたアイコン)が表示される。
アバターをクリックすると Access Token が表示される。Access Token は他人には決して知られていけない情報なので取り扱いには細心の注意が必要。
#実験1:Cisco Spark から Room List を取得する
参考:Cisco Spark の API Reference
http GET を以下の条件で実行すればよい:
- URI: https://api.ciscospark.com/v1/rooms
- Headers: Authorization: Bearer (Access Token)
- Headers: Content-Type: application/json
Python で HTTP GET を実行するのは requests を使う。コードは例えば以下:
import requests
access_token = 'ここに Access Token を入力'
url = 'https://api.ciscospark.com/v1/rooms'
headers = {
'Authorization' : 'Bearer ' + access_token,
'Content-Type' : 'application/json'
}
r = requests.get(url, headers = headers)
print(r.json())
Room ID だけを取り出したいのであれば、最後の行の print(r.json()) を以下の形に変える:
for line in r.json()['items']:
print line['id']
#実験2:Cisco Spark から Room の Message を取得する
Message を取得するには、実験1で取得した Room ID を使って http GET を以下の条件で実行すればよい:
- URI: https://api.ciscospark.com/v1/messages
- Headers: Authorization: Bearer (Access Token)
- Headers: Content-Type: application/json
- Payload: 'roomId' : (Room ID)
以下はユーザのメールIDとメッセージを表示するサンプルスクリプト:
# -*- coding: utf-8 -*-
import requests
urlr = 'https://api.ciscospark.com/v1/rooms'
urlm = 'https://api.ciscospark.com/v1/messages'
headers = {
'Authorization' : 'Bearer ' + access_token,
'Content-Type' : 'application/json'
}
r = requests.get(urlr, headers = headers)
for line in r.json()['items']:
payload = {'roomId' : line['id']}
print '################### Room: ', line['title']
r2 = requests.get(urlm, headers = headers, params = payload)
try:
for mline in r2.json()['items']:
try:
print mline['personEmail'], '>>>', mline['text']
except KeyError:
pass
except KeyError:
pass
※2017/8/1 少し内容を修正しました。