powershellからyammerにアクセス(yammer REST API)
そんなわけではてなブログに技術メモを書きます。
WordPressで慣れているので、記法はmarkdownを選択。
あとpowershellでシンタックスハイライト効かないので、以下記事を参照にする。
ちょっと用事でyammerのデータを取得する必要があったので調査。yammerはAPIを提供してくれているのでそれ使えばよい。
RESTでのアクセスとなる。
昔、rubyでfacebookやtwitterのデータを取得していたがそれはrubyの便利ライブラリを使ってのことであって、REST APIを生で使うのは初めてであるので’yammer rest api powershell'で調べた結果がこちら。
結論から言うとこの記事の通りにやってデータを取得することができた。
…という記事だけだと寂しすぎるので、少し解説。
1. yammerアプリケーション登録
プログラム以前の問題として、yammerにアプリケーション登録し、クライアントIDと秘密鍵を発行してもらわないといけない。
- (本人)yammerにアプリ登録
- (yammer)クライアントIDと秘密鍵を発行
- (本人)REST API経由でアクセス(クライアントIDと秘密鍵でトークンを作成)
- (yammer)クライアントIDと秘密鍵(実際はトークン)を照合し、正しいリクエストであることを確認してデータを返す
なんでこんな事するかってーと、REST API経由でのアクセスをyammer側で管理するため。例えば1秒間に100回リクエストを送ってくるクライアントIDは一時的にアクセス不可にするとか。同等の仕組みはfacebookやtwitterにもあります(よくAPI制限がどうたら~ってのはこの事)
アプリケーションの登録はこちらから↓
https://www.yammer.com/client_applications
'アプリ’といっても実際WebアプリやiPhoneアプリを作るわけではないが、REST界隈ではそういう言い方をします。名前は適当に作ってclientIDと秘密鍵をゲット。アプリの名前などを変えたければ新規アプリを登録して、そちらのclientIDと秘密鍵を使えばいい。
2. 認証コードの取得
clientIDを使って認証コードをゲット。
以下のようなURLにアクセスすれば認証コードをゲットできる。
https://www.yammer.com/dialog/oauth?client_id=$clientID&redirect_uri=$RedirURL
powershellでやる場合はこちら。
$clientID = "xxxxx" $clientsecret = "xxxxx" $RedirURL = "https://www.yammer.com/xxxxx.com" $ie = New-Object -ComObject internetexplorer.application $ie.Visible = $true $ie.Navigate2("https://www.yammer.com/dialog/oauth?client_id=$clientID&redirect_uri=$RedirURL") # この時点で秘密鍵は不要
そうすると、
http://www.xxxxx.com/?code=xxxxxxxxxxxxxxxxxx
みたいなページに飛ぶ。ここのcode=xxxxxxxxxxxxxxxxxxが認証コードになります。
3. 認証トークンの取得
認証コードが分かったら
- clientID
- 秘密鍵
- 認証コード
の3点セットがそろうので、以下のページにアクセスして認証トークンをゲット。
https://www.yammer.com/oauth2/access_token.json?client_id=$clientID&client_secret=$clientsecret&code=$Authcode
powershellで書くならこちら。
$ie = New-Object -ComObject internetexplorer.application $ie.Visible = $true $ie.Navigate2("https://www.yammer.com/oauth2/access_token.json?client_id=$clientID&client_secret=$clientsecret&code=$Authcode")
4. APIにアクセス
適当な場所にダウンロードしたトークンをパースして、認証ヘッダーに含めてAPIにアクセスします。
$Openjson = $(Get-Content 'C:\Tokens\access_token.json' ) -join "`n" | ConvertFrom-Json $token = $Openjson.access_token.token $uri = "https://www.yammer.com/api/v1/messages.json" $uri = "https://www.yammer.com/api/v1/search.json" $Payloadjson = '{ "search": "test" }' $Headers = @{ "Accept" = "*/*" "Authorization" = "Bearer "+$token "accept-encoding" = "gzip" "content-type"="application/json" } Invoke-RestMethod -Method Post -Uri $uri -Header $Headers -Body $Payloadjson
ディスカッション
コメント一覧
まだ、コメントがありません