Help us understand the problem. What is going on with this article?

zoomusを使いたい

More than 1 year has passed since last update.

zoomusとは

zoomのapi?

zoomとは

これ
https://zoom.us/jp-jp/meetings.html
Skypeみたいに通話できるツール

やりたいこと(できていない)

zoomusのapiを使ってzoomを利用(誰かと通話)すること

zoomのドキュメント

https://devdocs.zoom.us/docs

言語

Ruby
理由:とあるサービスをRailsで作る予定だから

GitHubにあったライブラリ

https://github.com/mllocs/zoomus

おそらくやること

・JWTでトークンを取得
・トークンからuser_idを取得?
・user_idlから通話?

やったこと

http://r9.hateblo.jp/entry/2018/01/30/081534
これを見る限りは
・JWTでトークンを取得
・トークンからuser_idを取得?
・user_idlから通話?
なんだけどなぁ。。。同じことをrubyでどうやってできるのだろうか

JWT

Rubyでjwtを利用する
https://blog.shimar.me/2017/02/10/ruby-jwt.html

zoom APIでの利用はHS256

https://devdocs.zoom.us/docs/jwt

Warning
The Zoom API uses HS256. Use of other algorithms may produce unexpected results.

Claimはissとexp

  • iss:zoom APIキー
  • exp :有効期限:現在の時刻から+整数

Note
The expiration time (exp) can be defined in a numeric date time format.

expは日付形式

https://github.com/jwt/ruby-jwt
これのpayloadでClaimを設定すればOKっぽい=> JWTはクリアできそう
以下の内容でJWTは生成できた

module ApplicationHelper
    class TS_Zoom
        def GenerateJWT
            payload = { 
                iss: 'api_key', #api_key
                exp: Time.now.to_i + 4 * 3600
            }
            secret  = 'secret_key' #secret_key
            token = JWT.encode payload, secret, 'HS256'
            return token
        end
    end
end

しかし、ターミナルで以下を打っても(23) Failed writing body と出る
curl -H 'Authorization: Bearer JWTの文字列' https://api.zoom.us/v2/users | jq .
ターミナルでcurl -H 'Authorization: Bearer JWTの文字列' https://api.zoom.us/v2/usersを打てばユーザ情報がでる

あとは、リクエストをRubyでどう扱うか、、、
https://docs.ruby-lang.org/ja/latest/class/Net=3a=3aHTTP.html
が使えるようです。
POSTの使い方はこちらかな
https://qiita.com/seisonshi/items/c23c0154c45ccbfa9999

以下のコード書いて実行してみた。

module ApplicationHelper
    class TS_Zoom
        def initialize
            @api_key = "aaa"
            @secret  = "bbb"
            @user_id = "ccc"
            @jwt = "ddd"
            @meeting_url = "eee"
        end
        def GenerateJWT
            payload = { 
                iss: @api_key,
                exp: Time.now.to_i + 4 * 36000
            }
            token = JWT.encode payload, @secret, 'HS256'
            return token
        end

        def GetUserData(_token)
            uri = URI.parse("https://api.zoom.us/v2/users")
            request = Net::HTTP::Get.new(uri)
            request["Authorization"] = "Bearer "+_token
            req_options = {
                use_ssl: uri.scheme == "https",
            }
            response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
                http.request(request)
            end
            result = JSON.parse(response.body)
            return result["users"][0]["id"].to_s
        end

        def GetMeetingURL
            @jwt = self.GenerateJWT
            @user_id = self.GetUserData(@jwt)
            @meeting_url = "https://api.zoom.us/v2/users/#{@user_id}/meetings"

            uri = URI.parse(@meeting_url)
            http = Net::HTTP.new(uri.host, uri.port)

            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            req = Net::HTTP::Post.new(uri.path)
            req["Authorization"] = "Bearer #{@jwt}"
            aa = "Bearer #{@jwt}"
            puts aa
            req["Content-Type"] = "application/json"
            req.body = {
                "type":1,
                }.to_json
            res = http.request(req)
            puts res.class
            puts res.code
            puts res.body
            return res
        end
    end
end

結果
ホストのURLとJoinのURLが表示されアクセスすると通話成功!

simanezumi1989
大学時代に微分方程式の定性的理論に関する研究が国際誌に掲載せれたことが自慢です。
http://fromalgorithm.jimdo.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away