LoginSignup
1
0

More than 1 year has passed since last update.

Webex の参加者を Go 言語で取得する

Last updated at Posted at 2022-02-04

法政大学情報科学部 2 年の阿部哲也です。
今回は Webex の参加者を取得するスクリプトを組みました。

やること

出席管理を自動化させたいため、webex の参加者を自動で取得するスクリプトを Go 言語で作成します。

流れとしては、mattermost からリクエストが投げられたタイミングで、作成したプログラムがリクエストを投げます。
帰ってきたレスポンスを参考にスプレットシートに反映させるという流れです。(下記参照)
今回は GO 言語で API を取得するところまで書きます。

mattermost → golang → webex API → Googleスプレットシート

本当は Zoom でやりたかったのですが、Zoom API が有料アカウントではないとできない & 法政大学のアカウントは有料アカウントだが API が取得できない設定になっていたため、断念して Webex にしました。

webex API で情報を取得

大まかな流れは下記みたいな感じです。今回は現在 meeting に参加している参加者をリアルタイムで取得します。

1. meeting 番号を取得
2. https://developer.webex.com/docs/api/v1/meetings/list-meetings で meeting ID 取得
3. https://developer.webex.com/docs/api/v1/meeting-participants/list-meeting-participants で参加者を取得

1. meeting 番号を取得する。

meeting 番号は meeting を開始したらす ぐに調べることができます。
上のタブから、[ミーティング] > [情報] > [ミーティング番号] に記載してある、9 桁の数字です。

2. meeting ID を取得する。

meeting 番号から、meeting ID を取得しないと参加者を取得できない(と思う)ので、取得します。
以下の webex API reference で、お試し取得ができます。

log in したのち、meeting number を入力して run するとレスポンスの meeting ID が取得できます。

curl コマンドで実行するときは、以下のコマンドで meeting ID が取得できます。

curl -H 'Authorization: Bearer xxxxxxxxxxxxx' https://webexapis.com/v1/meetings?meetingNumber=yyyyyyyyyyyyy

xxxx → 画像のAuthorization
yyyy → 画像のmeeting number (これは 1 で控えたやつ)

image.png

3. 参加者を取得

最後に、参加者を取得します。
以下の webex API reference で、お試し取得ができます。

2 で取得した meeting ID を入力するだけで実行できます。
これも、curl コマンドで実行するときは、以下のコマンドで 参加者が取得できます。

zzzz → 2で取得した meeting ID

curl -H 'Authorization: Bearer xxxxxxxxxxxxx' https://webexapis.com/v1/meetingParticipants?meetingId=zzzzzzzzzzzz

Go 言語で取得

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "encoding/json"
)

var auth = "xxxxxxxxxx"
var meetingnumber = "yyyyyyyyy"

func main() {
    // リクエストを作成
    req, err := http.NewRequest("GET", "https://webexapis.com/v1/meetings?meetingNumber=" + meetingnumber, nil)
    if err != nil {
        fmt.Println(err)
    }

    // ヘッダーを追加
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Authorization", "Bearer " + auth)

    // リクエストを送信
    res, err := http.DefaultClient.Do(req)
    if err != nil {
        fmt.Println(err)
    }

    // レスポンスを確認
    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
    }

    var bodyMap map[string]interface{}
    json.Unmarshal(body, &bodyMap)
    meetingID := bodyMap["items"].([]interface{})[0].(map[string]interface{})["id"].(string)

    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("meeting ID: ", meetingID)
}

出力結果

meeting ID: zzzzzzzzzzzzzzzzzz

このように、Authorizationmeeting number を入力するだけで、簡単に ID が取得できます。
ID が取得出来たら、以下のコードで参加者が取得できます。

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "encoding/json"
)

var auth = "xxxxxxxxxx"
var meetingnumber = "yyyyyyyyy"

func main() {
    // リクエストを作成
    req, err := http.NewRequest("GET", "https://webexapis.com/v1/meetings?meetingNumber=" + meetingnumber, nil)
    if err != nil {
        fmt.Println(err)
    }

    // ヘッダーを追加
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Authorization", "Bearer " + auth)

    // リクエストを送信
    res, err := http.DefaultClient.Do(req)
    if err != nil {
        fmt.Println(err)
    }

    // レスポンスを確認
    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
    }

    var bodyMap map[string]interface{}
    json.Unmarshal(body, &bodyMap)
    meetingID := bodyMap["items"].([]interface{})[0].(map[string]interface{})["id"].(string)

    if err != nil {
        fmt.Println(err)
    }

    //fmt.Println("meeting ID: ", meetingID)

    // 新しいリクエストを作成
    req2, err2 := http.NewRequest("GET", "https://webexapis.com/v1/meetingParticipants?meetingId=" + meetingID, nil)
    if err2 != nil {
        fmt.Println(err)
    }
    // リクエストにヘッダーを付与
    req2.Header.Add("Content-Type", "application/json")
    req2.Header.Add("Authorization", "Bearer " + auth)

    // リクエストを送信
    res2, err := http.DefaultClient.Do(req2)
    if err != nil {
        fmt.Println(err)
    }

    // レスポンスを確認
    body2, err := ioutil.ReadAll(res2.Body)
    if err != nil {
        fmt.Println(err)
    }

    json.Unmarshal(body2, &bodyMap)

    for i:=0; i<len(bodyMap["items"].([]interface{})); i++ {
        fmt.Println(bodyMap["items"].([]interface{})[i].(map[string]interface{})["email"])
    }

    fmt.Println(string(body2))

出力結果

aaaaaaa@aaa.ac.jp
bbbbbbb@bbb.ac.jp
cccccc@ccc.ac.jp
…

簡単に取得できた!

postman を導入して oauth で API の認証をする

このままでは、Authorization のがセキュリティの問題で 24 時間で無効になってしまいます。
自動で取ってくるようにするためには、以下のサイトを参考にして設定します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0