最近話題の「マストドン(Mastodon)」や Twitter の API をクラウド BPM からたたいてみる
「マストドン(Mastodon)」の API をクラウド型 BPM ワークフロー Questetra からたたけるかを試してみた。また Twitter の API についても確認

 

システム連携ネタでよくブログを書いている日下です。
※ちなみにこれまでのネタはこちら

 

目次
1: 「マストドン(Mastodon)」とは?
2: Questetra と Mastodon との連携
 2.1: Mastodon で使える grant_type
 2.2: grant_type:authorization_code で連携する方法
 2.3: grant_type:password で連携で連携する方法
3: Questetra と Twitter との連携
 3.1: grant_type:client_credentials で連携
4: まとめ

 

1: 「マストドン(Mastodon)」とは?

マストドン:Mastodon は Twitterによく似たSNSを誰でも自由に運用できる「脱中央集権型」の短文投稿型のSNSサービス/フリーソフトウェア

最近よく耳にする「マストドン(Mastodon)」。

まだ私もそれほど使っていないのですが、Twitter サーバを自分専用で建てられるもののようですね。

Mastodon には API もあるようなので、Questetra からたたけるかを調べてみました。

#実際にそういう用途があるかを考えると、今のところはあまりない気がしていますが、Mastodon がもっと広がったらマーケティングとしての活用も出てくるかもしれません

また、Mastodon の元とも言える Twitter の API は以前から有名(試しに Web API をたたいてみるのにとりあえず Twitter でやってみた、という人は多いんじゃないかと)なので、それとの比較もしてみました。

 

2: Questetra と Mastodon との連携

 

2.1: Mastodon で使える grant_type

OAuth2 の grant_type(トークンの取得方法) は4種ありますが、Mastodon は authorization_codepassword が使えるようです。(対して Twitter は client_credentials のみが使えるとのこと)
※他の grant_type に対応しているかどうかまでは未確認。また、grant_type の password は一般的にあまり推奨されていないので、その点もご留意ください。

参考:OAuth2 で規定されている grant_type 4種
・Authorizaton Code Grant (authorization_code)
・Implicit Grant (implicit)
・Resource Owner Password Credentials Grant (password)
・Client Credentials Grant (client_credentials)
※詳細はこちらのページを参考にしてください。
この2つの grant_type それぞれについて、Questetra → Mastodon の連携を試してみましょう。

 

2.2: grant_type:authorization_code で連携する方法

Questetra にある「メッセージ送信中間イベント(HTTP)」を使います。
これはフローの途中で http リクエストを送付できる機能で、OAuth2 (grant_type は authorization_code)の連携設定も可能です。もしこれで API がたたけるケースならプログラミングは不要です。
設定の詳細は後述します。

※「メッセージ送信中間イベント(HTTP)」のマニュアルはこちら
 M225: 業務データを組み込んだHTTPリクエストが、自動的に送信されるように設定する

 

Mastodon へのクライアント登録

まず Mastodon へのクライアント登録については以下で行います。

curl -X POST -sS https://{ホスト名}/api/v1/apps -F “client_name={クライアント名}” -F “redirect_uris=https://fs.questetra.net/oauth2callback” -F “scopes=read write follow”
※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください
※「{クライアント名}」には好きな名前を入れてください
※scopes はやりたいことに応じて変更してもいいですが、後で Questetra 側で行う設定とあわせてください
※処理結果から取得できる client_id と client_secret は後で使いますのでコピーしておいてください

 

Questetra の「メッセージ送信中間イベント(HTTP)」の OAuth 設定

「メッセージ送信中間イベント(HTTP)」の OAuth 設定画面には、「メッセージ送信中間イベント(HTTP)」のプロパティの「セキュリティ/カスタムヘッダ」の「OAuth2.0 で接続する」の「設定はこちらから」ボタンからと、プロセスモデルの詳細画面の「▼アプリ」ボタンメニューの「OAuth2.0 設定」からのどちらからでもいけます。

名称
名前 (好きな設定名、後で指定する際に使います)
認可エンドポイントURL https://{ホスト名}/oauth/authorize
トークンエンドポイントURL https://{ホスト名}/oauth/token
スコープ read write follow(やりたいことに応じて変更してください)
クライアントID (クライアント登録時に取得したもの)
クライアントシークレット (クライアント登録時に取得したもの)

※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください

OAuth の設定値としては、以下となります。「トークンの取得」がうまくいけばOKです。

 

Questetra の「メッセージ送信中間イベント(HTTP)」のプロパティ設定

投稿する API をたたく場合、「メッセージ送信中間イベント(HTTP)」の設定としては、以下となります。

名称
通信設定:URL https://{ホスト名}/api/v1/statuses
セキュリティ/カスタムヘッダ:OAuth2.0で接続する (さきほどの OAuth 設定名)
送信パラメータ status:(投稿したい文言)
※メッセージ送信中間イベント(HTTP)で API をたたく場合に、もしうまくいかなかったときに詳細情報がわかるよう、文字型複数行のデータ項目を2つ準備して、以下にそれぞれ設定するのをおすすめしています。
・通信設定:「エラー発生時にエラー内容を格納する文字型データ項目」
・レスポンス:「レスポンスを保存する」にチェックをつけて「保存先のデータ項目」

 

2.3: grant_type:password で連携で連携する方法

grant_type password の場合は、Questetra にある「スクリプトタスク(スクリプト工程)」を使います。設定の詳細は後述します。

※「スクリプトタスク(スクリプト工程)」のマニュアルはこちら
 M230: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト)

 

Mastodon へのクライアント登録

まず Mastodon へのクライアント登録については以下で行います。

curl -X POST -sS https://{ホスト名}/api/v1/apps -F “client_name={クライアント名}” -F “redirect_uris=urn:ietf:wg:oauth:2.0:oob” -F “scopes=read write follow”
※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください
※「{クライアント名}」には好きな名前を入れてください
※scopes はやりたいことに応じて変更してもいいですが、後で Questetra 側で行う設定とあわせてください
※処理結果から取得できる client_id と client_secret は後で使いますのでコピーしておいてください

 

Questetra の「スクリプトタスク(スクリプト工程)」の設定

「スクリプトタスク(スクリプト工程)」で、アクセストークンの取得および投稿の URL をたたく形となります。以下サンプルコードです。それぞれ{}内には必要な値を入れてください。

var message = data.get("3");
var clientId = "{クライアントID}";
var secret = "{クライアントシークレット}";
var accessLog = "";

var uriToken = "https://{ホスト名}/oauth/token";
var response = httpClient.begin()
.formParam( "grant_type", "password" )
.formParam( "client_id", clientId )
.formParam( "client_secret", secret )
.formParam( "scope", "write read follow" )
.formParam( "username", "{ログインユーザ名}" )
.formParam( "password", "{ログインパスワード}" )
.post( uriToken );
accessLog += "---POST request--- " + response.getStatusCode() + "\n";
accessLog += response.getResponseAsString() + "\n";
var oauthTokenObj = JSON.parse( response.getResponseAsString() );
var oauthToken = oauthTokenObj.access_token;
accessLog += "oauthToken: " + oauthToken + "\n";

var uriExecute = "https://{ホスト名}/api/v1/statuses";
var responseCreate = httpClient.begin()
.bearer( oauthToken )
.formParam( "status", message )
.post( uriExecute );
accessLog += "---POST request--- " + responseCreate.getStatusCode() + "\n";
accessLog += responseCreate.getResponseAsString() + "\n";

retVal.put( "0", accessLog );

 

3: Questetra と Twitter との連携

Twitter は OAuth2 の grant_type として client_credentials のみが使えるとのこと。

※参考資料:Twitter API ドキュメント POST oauth2/token

 

3.1: grant_type:client_credentials で連携

grant_type client_credentials の場合も、Questetra にある「スクリプトタスク(スクリプト工程)」を使います。設定の詳細は後述します。

 

Twitter へのクライアント登録

まず、Twitter へのクライアント登録については、こちらのページを参考にしてください。こちらも Consumer Key(client_id)と Consumer Secret(client_secret)は後で使いますのでコピーしておいてください

 

Questetra の「スクリプトタスク(スクリプト工程)」の設定

「スクリプトタスク(スクリプト工程)」で、アクセストークンの取得および一覧取得の URL をたたく形となります。
以下サンプルコードです。それぞれ{}内には必要な値を入れてください。

var clientId = "{クライアントID}";
var secret = "{クライアントシークレット}";
var accessLog = "";

var uriToken = "https://api.twitter.com/oauth2/token";
var response = httpClient.begin()
.formParam( "grant_type", "client_credentials" )
.formParam( "client_id", clientId )
.formParam( "client_secret", secret )
.post( uriToken );
accessLog += "---POST request--- " + response.getStatusCode() + "\n";
accessLog += response.getResponseAsString() + "\n";
var oauthTokenObj = JSON.parse( response.getResponseAsString() );
var oauthToken = oauthTokenObj.access_token;
accessLog += "oauthToken: " + oauthToken + "\n";

var uriExecute = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var responseExecute = httpClient.begin()
.bearer( oauthToken )
.queryParam( "screen_name", "{スクリーン名}" )
.queryParam( "count", 3 )
.get( uriExecute );
accessLog += "---GET request--- " + responseExecute.getStatusCode() + "\n";
accessLog += responseExecute.getResponseAsString() + "\n";

retVal.put( "0", accessLog );

 

ただし、このやり方で取得した access token の場合は user context とひもづかないので、使える API が限定されてしまうとのこと・・・まあ authorization_code のケースのようにユーザ認証を通ってないので当然といえば当然なのですが
※参考資料:Twitter API ドキュメント Application-only authentication

つまり、API をたたいて投稿等をしたい場合には以前からある OAuth1 の方を使わないといけないようです。ただ Questetra では OAuth1 での連携設定は未対応です・・・
そのため、API をたたいて投稿等がしたい場合には ifttt などの連携ツールと組み合わせるのが手っ取り早いかと思います。ifttt であれば、Questetra からメール送付して Twitter 投稿などもカンタンに実現できます。

 

4: まとめ

ということで、Questetra と Mastodon および Twitter との連携、主に OAuth2 での連携について調べてみました。

grant_type が authorization_code であれば、楽に設定できることがわかっていただけたかと思います。
ただ、grant_type が authorization_code であっても、相手によってはうまくつながらないケースもあります・・・そのあたりの話はまた別の記事で説明する予定です。

 

もし、ご質問等がありましたら、お問い合わせフォームからお気軽にご連絡ください。

 

Questetra の無料版(スタータープラン)登録はこちら

こちらの Web フォームからお申込みいただきますと Questetra の無料お試しアカウントが作成できます。上記のものを含め、全ての機能が使えますので、ぜひお試しください。

 

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください