2018年8月20日月曜日

Patreon REST API を Ruby から使ってみた

概要

タイトルのとおりです
UI を構築するわけではないので OAuth を使ったログイン画面などは作成しません
今回は自身のアカウントの情報を取得してみたいと思います

環境

  • macOS 10.13.5
  • patreon-ruby 0.5.0
  • Ruby 2.5.1p57

クライアントアプリの登録

https://www.patreon.com/portal/registration/register-clients から登録しましょう
patreon_api1.png

アプリの必要な情報を入力します
patreon_api2.png

アイコンの URL プライバシーポリシーの URL、規約の URL は必須ではありません
以下のように作成できれば OK です
patreon_api3.png

今回は「Creator's Access Token」を使います

Patrons を取得するサンプルコード

Patrons は要するに支援してくれている方々です

require 'patreon'
require 'cgi'

access_token = 'creators_access_token'
api_client = Patreon::API.new(access_token)

campaign_response = api_client.fetch_campaign()
campaign_id = campaign_response.data[0].id

all_pledges = []
cursor = nil
while true do
  page_response = api_client.fetch_page_of_pledges(campaign_id, { :count => 25, :cursor => cursor })
  all_pledges.concat page_response.data
  next_page_link = page_response.links[page_response.data]['next']
  if next_page_link
    parsed_query = CGI::parse(next_page_link)
    cursor = parsed_query['page[cursor]'][0]
  else
    break
  end
end

puts all_pledges.map{ |pledge| { full_name: pledge.patron.full_name, amount_cents: pledge.amount_cents } }

Creator's Access Token を使って API クライアントを作成します
まず fetch_campaign()campaign_id を取得します
campaign_id はいわゆるユーザ ID みたいなものです

次にその ID を元に fetch_page_of_pledges() をコールします
ページネートしながら Patrons を取得することができます
次のページは page_response.links[page_response.data]['next'] で取得しています
これが nil であれば終了してそうでなければ次のページの URL をパースして cursol 情報を取得します

あとは最後に保存した配列の情報 (all_pledges) を map で必要なフィールドだけ取得して表示しています
map しているだけなのでそのまま puts しても OK です

おまけ

ちなみに今回の API であれば curl で簡単に呼べます

curl -XGET \
  -H 'Authorization: Bearer [creators_access_token]' \
  'https://www.patreon.com/api/oauth2/api/campaigns/[campaign_id]/pledges'

最後に

Patreon の REST API を Ruby でコールしてみました
今回はアプリを作成したユーザ自身の情報をしか取得しなかったのでログイン画面を作成しませんでした
もしログインしたユーザの情報を取得したい場合はログイン画面を作成して OAuth 認証してトークンをちゃんと取得して API をコールしてください

参考サイト

2018年8月19日日曜日

Red5 で RTMP を使ってライブ配信してみる

概要

Red5 はオープンソースの動画配信エンジンです
ストリーム配信できるのが特徴です
今回は構築から RTMP を使ったライブ配信の方法まで紹介します
OBS を使うのでプライベート Youtube Live のようなことができるようになります

環境

サーバ

  • Ubuntu 16.04
  • OpenJDK 9 (build 9-internal+0-2016-04-14-195246.buildd.src)
  • Red5 1.0.10 Milestone 9

クライアント

  • macOS X 10.13.5
  • OBS 21.1.1

JDK インストール

Red5 は Java (JDK) がないと動作しません
今回は OpenJDK を使います
OracleJava が良い場合は公式から Linux 版をダウンロードして Ubuntu 上に展開してください

  • apt -y update
  • apt -y instsall openjdk-9-jdk-headless

Red5 インストール

  • mkdir -p /usr/share/red5
  • export RED5_HOME=/usr/share/red5
  • cd $RED5_HOME
  • wget 'https://github.com/Red5/red5-server/releases/download/v1.0.10-M9/red5-server-1.0.10-M9.tar.gz'
  • tar zvxf red5-server-1.0.9-RELEASE.tar.gz
  • mv red5-server/* .

Red5 サーバ起動

  • ./red5.sh &

http://localhost:5080 にアクセスすると Red5 の管理画面が表示されます
ufw などでポートを閉じている場合はオープンしましょう

Flash のインストール

Red5 は動画を再生するのに基本的に Flash で動作します
VOD も Live も変わりません
面倒ですが素直にインストールしましょう
Chrome であれば有効にすれば OK です

ライブ配信してみる

構築が完了したのでライブ配信してみましょう
OBS の設定をしていきます

プロファイルの作成 (任意)

OBS に YoutubeLive や Twitch の配信設定をすでにしている場合は今回の Red5 用にプロファイルを作成するといいでしょう
red5_with_obs1.png

特に上書きしても問題ない場合はプロファイルの作成は必要ありません

ストリーミングサーバの設定

ストリーミングサーバの設定をします
構築した Red5 の RTMP プロトコルを LISETN しているポートを指定します
red5_with_obs2.png

  • URL・・・rtmp://xxx.xxx.xxx.xxx:1935/live
  • ストリームキー・・・testLive

URL の IP 部分は構築した自身の Red5 サーバの IP を指定してください
ストリームキーは動画を再生するときに必要になります
任意の文字列で OK なので好きな文字列を設定してください

出力設定

出力設定をします
この設定は Red5 推奨の設定になります
おそらくデフォルトの設定でも配信はできるはずですが今回は推奨設定を使います
red5_with_obs3.png

  • 出力モード・・・詳細
  • エンコーダ・・・x264 (ストリーミングサービスのエンコーダ設定を適用するにチェック)
  • 出力をリスケールする・・・640x480
  • レート制御・・・VBR
  • ビットレート・・・750
  • CRF・・・23
  • キーフレーム間隔・・・2
  • CPU 使用のプリセット・・・verfast
  • プロファイル・・・baseline
  • チューン・・・fastdecode

こんな感じです

映像配信設定

先程リスケールしたサイズに合わせます
red5_with_obs4.png

スクリーンキャプチャ設定

ライブで配信する際の映像情報を設定します
OBS の場合「ソース」から表示したい映像リソースを追加すれば OK です
今回は適当に「ウィンドウキャプチャ」を追加して Finder の情報を表示しておきます
red5_with_obs5.png

動作確認

これで配信の準備が整ったので配信を開始します

見る側の設定

今回は Red5 のデモで使用しているビューワをそのまま使います
本来であれば自分で HTML + JavaScript を使ってプレイヤーを再生するのですが面倒なのでありものを使います

Red5 のトップ画面にアクセスします
そして「Launch a demo」->「Publisher」->「View demo」と進みます
設定画面になったら

  • Name・・・testLive
  • Location・・・rtmp://xxx.xxx.xxx.xxx:1935/live

と入力します
配信する側も視聴する側も同じ URL とストリームキーにアクセスします
red5_with_obs6.png

入力したら「Connect」ボタンを押せば上記の画面のように接続状態になります (画面の Close ボタンが未接続の場合 Connect になっている)

あとは「Play」ボタンを押せば配信を見れるようになります

配信する側の設定

特にないです
OBSで「配信開始」ボタンを押せば OK です
ステータスが緑になれば Red5 の RTMP に接続され映像の配信が開始されています

この状態で Red5 のプレイヤーで「Play」を押せばライブ配信が見れると思います
red5_with_obs7.png

キャプチャする画面などを変更すればちゃんとプレイヤー側も変わります
ラグですがだいたい 3 - 5 秒くらいありました
この辺りは環境や設定によってもっと改善するとは思います

トラブルシューティング

OBS で配信開始した際に何度も切断される場合があります
以下のような Exception が発生していました

  • ProtocolException: Error during decoding
  • NumberFormatException: For input string: "2.1"

このあたりの Exception が発生してうまく配信開始できない場合は以下が原因です
https://github.com/Red5/red5-server/issues/250

解決方法は 1.0.10 系の Red5 を使いましょう
そのバージョンであれば対処されています

また FW の設定も見直しましょう
OBS が動作している環境から Red5 が動作している RTMP サーバに対して通信できる必要があります
1935 ポートは当然ですが今回は管理画面のプレイヤーを使うので 5080 なども必要です
できれば OBS 環境からはフルアクセスできると良いと思います

最後に

Red5 + OBS を使って自分だけのライブ配信環境を構築してみました
Red5 自体の構築はかなり簡単にできましたが、OBS 側の設定の RTMP の設定に少し苦戦しました

Red5 は再生する側に Flash Player が必要なのでそこは少し残念な感じがします

Red5 にはマルチテナントの機能がないので基本的には 1 Red5 = 1 User になるかなと思います
複数のユーザで 1 つの Red5 を共有したい場合は現状はストリームキーなどで分けるしかないかなと思います

あとはもし Red5 を使って配信するのであればプレイヤーの開発も必要かなと思います
今回はデモ用のプレイヤーを使ったので特にコーディングはしませんでしたが、さすがにあれば丸出しするのは微妙なので実際は専用のプレイヤーを開発する必要があると思います

参考サイト

2018年8月18日土曜日

SKUID を試してみた

概要

SKUID は GMO さんが提供する IDaaS (Identity as a Service) です
様々なサービスのアカウントとパスワードを SKUID で登録することで SKUID にログインするだけで登録したサービスにアクセスできるようになります
今回は登録から基本的な使い方まで試してみました

環境

  • macOS 10.13.6
  • SKUID (2018/08/09 時点)

アカウント登録

まずはアカウント登録をしましょう
企業情報などが必要になりますが、個人で利用の場合はダミーの情報でも大丈夫です
skuid1.png

次の画面で入力情報を確認しましょう
問題なければ登録します
仮登録のメールが登録したアドレスに届くのでチェックしてください
記載の URL をクリックすれば本登録完了です

アプリを追加する

企業 ID とメールアドレス、パスワードを使ってログインしましょう
skuid2.png

するとアプリを追加する流れになるので追加します
執筆時点では 4015 ほどアプリがありました
skuid3.png

今回は Twitter を選択しました
ブラウザですでに Twitter ログインしている場合は一旦ログアウトしましょう

Twitter にログインする情報を登録します
これで Twitter アプリの登録が完了します
skuid4.png

SKUID の Chrome 拡張を入れましょうという画面になるので素直にインストールしましょう
skuid5.png

SKUID はアカウント単位と組織単位でアプリを追加することができます
上記の作業はアカウントに対してアプリを追加しました
組織単位でアプリを追加すると組織に属するアカウントは自動的に組織に追加したアプリを利用することができるようになります (要するに個人で追加する必要がなくなる)

試してみる

とりあえずアプリがインストールされた Twitter アプリを選択してみましょう
skuid6.png

するとアプリに登録した Twitter のログイン情報を使って勝手に Twitter にログインしてくれます
(一瞬ログイン画面が表示されてフォームに情報を入力している感じがするので裏側では直接ブラウザを操作しているのかもしれません)
なので、ユーザは Twitter のアカウントとパスワードをわざわざ入力する必要がありません

なお、すでに別のユーザで Twitter にログインしているとアプリを選択してもアプリに登録したユーザで Twitter にログインできません
すでにログインしているユーザが優先されてしまうので SKUID からログインしたい場合はちゃんとログアウトしておきましょう

次に Chrome 拡張からログインしてみました
ツールバーにあるイカのアイコンを選択すると登録しているアプリが表示されるので Twitter のアイコンを選択してみましょう
skuid7.png

するとブラウザのときと同様にログインが行われます

メンバーを追加してみる

次に組織にメンバーを追加してみましょう
メンバーの追加は管理者権限を持つメンバーがダッシュボードから追加することができます (メンバーの一覧からも追加することができます)
skuid8.png

個別追加か一括追加を選択できます
今回は個別追加を選択します
一括追加は指定のフォーマットの CSV をアップロードすることで登録できるようです
skuid9.png

名前とメールアドレスを入力します
部署と権限を設定します
skuid10.png

あとは内容を確認して問題なければ「登録」しましょう
メールアドレスに SKUID に登録するための招待 URL が送られるのでそこからユーザ登録しましょう
登録する流れは冒頭の「アカウント登録」で紹介した内容と全く同じです
登録したらログインしてみましょう

管理者権限を持つメンバーでダッシュボードを確認するとメンバーが増えているのがわかると思います
skuid11.png

組織にアプリを追加する

組織にアプリを追加し、そのアプリを使うメンバーを追加することでメンバーのアプリの管理を管理者ができるようになります
組織にアプリを追加するにはダッシュボードのアプリの一覧から行います
「アプリ登録」を選択しましょう
skuid12.png

今回も Twitter を登録します
どうやら組織に登録できるアプリのほうが数が多いようです
とりあえず「Twitter パスワード認証」を選択しましょう
skuid13.png

企業アプリの場合 ID/PW などは設定せずただ登録するだけです
ID/PW の設定は各メンバーが行います
skuid14.png

アプリを使用するメンバーを登録する

企業アプリは登録しただけでは使えません
そのアプリを使うメンバーを指定する必要があります
先ほど登録下 Twitter アプリを選択し「メンバー追加」を選択します
skuid15.png

追加するメンバーを選択し登録しましょう
ここでメンバーを選択することでアプリの ACL 的なことが可能になります
skuid16.png

これでメンバーの登録アプリ一覧に行くと Twitter アプリが追加されています
ただまだ ID/PW の登録を行っていないのでグレースケールになっています
skuid17.png

アプリを選択すると ID/PW の画面になるので自身の ID/PW を登録することでメンバーごとの Twitter アカウントでログインすることができるようになります

グループを作成する

グループを追加することで先ほどメンバー単位でアプリへの使用権限を追加しましたが、これがグループ単位でできるようになります
追加は簡単でグループの一覧から「グループ追加」するだけです
skuid18.png

あとはグループの名前と説明を入力しましょう
skuid19.png

作成されたグループにはメンバーはいません
グループの一覧からグループを選択し「メンバー追加」することでメンバーを追加することができます
skuid20.png

レポート機能

レポートはメンバーの登録やグループの登録、アプリの登録など操作の履歴を確認することができます

ダッシュボードの左メニューから「レポート」で確認することができます

サードパーティ連携機能

アプリの種類もそうですが、このサードパーティの機能の充実っぷりがどうかによって IDaaS の優位性が出るかどうか決まると思っています
SKUID の場合無料のプランではほとんどの機能が使用できませんでした
skuid21.png

AD 連携や SAML 認証などメジャーどころは有料で申し込めば使えるようになります
各サービスとの SAML 認証の設定方法などは参考サイトに記載のドキュメントが一番わかりやすいと思います

また細かい設定としてロゴの変更やメンバーのアプリ登録などの ACL を変更することも可能です

最後に

IDaaS である SKUID を試してみました
無料で試せるので興味があれば触ってみると良いかなと思います
サードパーティ連携の機能がほぼ有料で触れなかったのは残念でした

UI はかなりわかりやすく作られていたかなーと思います
操作中はほぼ躓くこと無くやりたいことができたと思います

ただ退会することができなかったのでそれが微妙かなと思いました
公式にはオプションを有効にしない限り無料なので退会の必要はありませんとあり確かにそうなんですが退会できても良いかなと思いました

参考サイト

2018年8月17日金曜日

Onelogin を試してみた

概要

Onelogin は Onelogin 社が提供する IDaaS (Identity as a Service) です
フリートライアルであれば無料で使えるので試してみました
登録方法から紹介します

環境

  • macOS 10.13.6
  • Onelogin (2018/08/09 時点)

フリートライアルで登録する

このページから登録しましょう
必要な情報を入力して登録します
フリートライアル中は使える機能が制限されています
onelogin1.png

登録するのに「企業ドメインのメールアドレス」が必要になります
要するに @gmail.com などは使えません
試しにやってみましたがエラーになりました
おそらく簡単なチェックしかしていないので自分はメールサーバを立てて自分のドメインを割り当てて、そのメールアドレスで登録しました
おそらくここが一番の難関かもしれません

すぐに管理者のパスワードを設定する画面になるのでパスワードを設定しましょう

パスワードの設定が完了しログインすると以下のような画面になります
onelogin2.png

Onelogin 用の ChromeExtension をインストールする

「INSTALL ON CHROME」を選択して素直にインストールしましょう
onelogin3.png

アプリを登録する

次にアプリをインストールしてみましょう
Onelogin の場合アプリを登録するのは対象のサイトに行くだけで OK です
onelogin4.png

今回は Twitter アプリをインストールしてみます
ブラウザでそのまま Twitter のサイトに行ってログインしましょう
すると Onelogin のエクステンションが反応してアプリを追加するかダイアログが表示されます
onelogin5.png

個人かドメインどちらにアプリをインストールするか聞かれるので今回はドメインに対してインストールしました
ドメインに対してインストールするとドメインに属するすべてのユーザがアプリを使えるようになります
onelogin6.png

ユーザを追加する

最後にユーザを追加します
ユーザの追加は ActiveDirectory などの IDP からインストールすることができます
また手動で追加することもできます
onelogin7.png

ActiveDirectory 連携はトライアル期間では使用できませんでした
onelogin8.png

今回は手動で 1 人追加してみました
同一企業ドメインでのメールアドレスが必要になるので作成しましょう
onelogin9.png

メールアドレスや企業名、マネージャなどは不要でした
あとは「MORE ACTIONS」から「Send Invitation」を選択しましょう
すると招待メールが届くはずです
onelogin10.png

メールに記載のアドレスにアクセスするとパスワードの設定画面になるので設定しましょう
onelogin11.png

これで新規ユーザの登録は完了です
ログイン画面が出るのでログインできるか確認しましょう
ログインできれば新規ユーザのアプリ一覧が表示されます
onelogin12.png

まだ何もアプリがない場合はアプリを使えるようにアプリに対してユーザを追加する必要があります
ユーザをアプリが使えるように追加する手順は次に紹介します

ユーザにアプリを追加する

スコープをドメインレベルで追加したアプリはユーザを追加することで使えるようになります
「Users」->「All Users」でユーザの一覧を表示します
そしてアプリを追加するユーザを選択します
ユーザの設定画面から「Applications」を選択します
onelogin13.png

「+」ボタンを押すとドメインに登録したアプリの一覧がプルダウンから選択できます
今回は先ほど登録した Twitter アプリを選択し「CONTINUE」します
すると Twitter の認証情報を登録する画面になります
今回はユーザに認証情報を登録させたいので何も入力せずに次に進みます
onelogin15.png

これでユーザ側のポータル画面を見ると先ほどなかったアプリが追加されているのが確認できると思います
onelogin16.png

これでユーザがアプリを選択すると先ほど設定していなかった ID/PW を設定することができます

オプション機能

https://www.onelogin.com/product/pricing

今回はトライアルなので基本的な機能しか使えません
onelogin18.png

UNLIMITED (月ユーザ一人あたり 8 ドルのプラン) に申し込めばすべての機能が使えるようになります
onelogin17.png

例えば SAML 認証と連携したい場合は「Custom Connectors」が使えないとダメです
なので最低でも「Enterprise」プランの申込みが必要です

OpenID Connect のエンドポイントもあるようでこれであればトライアルプランでも使えるかもしれません

最後に

Onelogin のトライアルを試してみました
基本的な操作はブラウザエクステンションを導入して各サイトの ID/PW をガンガン記憶されていく感じです
ユーザの追加などはトライアルだと手動でやるしかありません

機能は IDaaS の中でもかなり豊富な方だと思います
が、使用するには有料のプランに申し込む必要があるので個人用途の検証レベルだと厳しいかなと思います
1 ヶ月だけということであればまぁ何とかなるかなと思います

UI はかなり操作しやすかったです
インタフェースは UI 以外に API もあるので自動化もできると思います

参考サイト

2018年8月16日木曜日

Python で Okta の SAML 認証が動作するサンプルアプリを作成してみた

概要

Okta のトライアル期間であれば SAML 認証が試せたので Python アプリを構築して確認してみました
Python は 2 系を使います
(おそらく Python3 では動作しないと思います、自分が試した感じ動作しませんでした)

環境

  • macOS 10.13.6
  • Okta (2018/08/13 時点)
  • Python 2.7.15

Python 用のアプリケーション作成

まずは Okta 側にアプリケーションを登録します
管理者権限のあるユーザでログインし管理画面から「Applications」を開きます
そして「Add Application」を選択します
okta_python_app_saml4.png

一覧から選択せずに「Create New App」で作成します
okta_python_app_saml5.png

「Sign on method」で SAML 2.0 を選択します
okta_python_app_saml6.png

アプリの名前を設定します
今回は「PySAML2 Example」とします
okta_python_app_saml7.png

SAML 認証に必要なアプリ側の URL を設定します
今回は

  • Single sign on URL・・・http://localhost:5000/saml/sso/example-okta-com
  • Audience Restriction・・・http://localhost:5000/saml/sso/example-okta-com

とします
また Single sign on URL の「Use this for Recipient URL and Destination URL」にチェックを入れます
okta_python_app_saml8.png

同じ画面のすぐ下に Attribute を設定できる画面があるので 3 つ追加します

  • FirstName・・・user.firstName
  • LastName・・・user.lastName
  • Email・・・user.email

okta_python_app_saml9.png

アプリがどういったタイプなのか設定します
今回はテストアプリなので「I’m an Okta customer adding an internal app」にチェックしかつ「This is an internal app that we have created」にチェックし内部で使用するアプリである設定にします
okta_python_app_saml10.png

これでアプリの作成ができました
Identity Provider metadata というリンクがあり XML が表示されます
この URL をコピーしておきましょう
okta_python_app_saml11.png

アプリを追加しただけでは使えません
アプリに対してユーザをアサインすることで対象のユーザで認証できるようになります
「Assignments」->「Assign」->「Assign to People」で追加します
okta_python_app_saml12.png

一覧から追加したいユーザを選択してアサインしましょう
okta_python_app_saml13.png

アサインが完了するとユーザが一覧に表示されるようになります
このユーザでアプリの認証ができるか確認します
okta_python_app_saml14.png

サンプルアプリ構築

今回は Python アプリを構築します
公式が

必要なライブラリのインストール

  • brew install libffi libxmlsec1

アプリの設定

59 行目あたりの metadata_url_for の部分を以下のように書き換えます
事前にコピーしておいた metadata 取得用の URL に変更します

metadata_url_for = {
    'example-okta-com': 'https://{yourOktaDomain}/app/a0b1c2deFGHIJKLMNOPQ/sso/saml/metadata'
}

URL の部分はサンプルなので各自の環境に書き換えてください

virtualenv 構築、PySAML2 のインストール

  • cd okta-pysaml2-example
  • virtualenv venv
  • source venv/bin/activate
  • pip install -r requirements.txt

アプリ起動

  • python app.py

動作確認

localhost:5000 にアクセスしましょう
example-okta-com をクリックすると認証画面が表示されます
okta_python_app_saml1.png

Okta に登録してありかつ PySAML2 Example アプリにアサインしてユーザでログインしましょう
okta_python_app_saml2.png

成功するとアプリのログイン後の画面が表示されます
okta_python_app_saml3.png

最後に

Okta の SAML 認証連携機能を試してみました
今回は Python で試しましたが他の言語でもライブラリが提供されているのでアプリに組み込むことはできると思います

これを使うことで Okta にある ID/PW を使って自分のアプリを認証させることができるようになります
Okta には ActiveDirectory と連携する機能もあるので例えばオンプレの AD サーバの情報を Okta にインポートしてから SAML 連携すれば既存の AD の認証情報を使った認証機構を作成することもできます

要するに Okta が Idp となり認証情報を提供してくれる感じです
クラウド上で認証情報を管理することができるようになるのでオンプレの環境が不要になり管理コストが減るなどのメリットがあるかなと思います

参考サイト