突如話題になり、ユーザーが増えているMastodonですが、Twitterと同時に運用していくのは大変だったりします。そこで、Twitter の投稿を IFTTT で Mastodon へ転送する方法をここに記します。
注:Mastodonインスタンスには、特に権限の制限なくアプリケーションを登録できるように見受けられます。このような利用は、インスタンスのオーナーの方より控えるように言われるかもしれません。その場合は、インスタンスのオーナーの指示に従うようにしてください。
環境について
当方の運用環境は、以下の通りです。
- Ubuntu Server 16.10 (AMD64)
- AWS m3.medium
- Mastodon v1.1.2 (commit 7447e7a)
用意するもの
- Curl の使える環境 – Curl でなくても、コマンドラインでHTTPリクエストが送れること。
- IFTTT アカウント
- Twitter アカウント
- Mastodon アカウント
これらのアカウントの作成方法については、ここでは触れません。 これ以降、Mastodonの登録メールアドレスとインスタンスを以下のものとして記します。
メールアドレス | インスタンス |
---|---|
[email protected] | mastodon.example.com |
Mastodon にアプリケーション登録を行う。
はじめに、Mastodonにアプリケーションの登録と認証を行います。Twitterでもお馴染みですが、これをコマンドラインでやっていきます。
アプリケーションの登録 (参照元)
はじめに、所属しているインスタンスに自分のアプリケーションキーを発行してもらいます。 書かなくてはならない事項は、以下の通りです。
- client_name – アプリの名前です。tootに併記されますので好きに決めます。
- redirect_uris – 今回は、
urn:ietf:wg:oauth:2.0:oob
としてください。 - scopes – アプリの持つ権限です。
read
,write
,follow
から選べます。(参考) - website – tootに併記されるアプリ名をクリックしたときに飛ぶURLです。設定は任意です。
例)
項目 | 内容 |
---|---|
client_name | From Twitter |
redirect_uris | urn:ietf:wg:oauth:2.0:oob |
scopes | write |
website | https://fuga.example.jp |
これらを、/api/v1/apps
にPOSTのデータとして送信します。
この場合のCurlコマンドは、以下の通りです。
curl -X POST -d "client_name=From Twitter&redirect_uris=urn:ietf:wg:oauth:2.0:oob&scopes=write&website=https://fuga.example.jp" -Ss https://mastodon.example.com/api/v1/apps
成功すると、以下のように返答としてclient_id
,client_secret
が返ってきます。大切に記録してください。
{"id":<数字>,"redirect_uri":"urn:ietf:wg:oauth:2.0:oob","client_id":"<64字の英数字>","client_secret":"<64字の英数字>"}
ユーザーにアプリケーションの認証をする。 (参照元)
続いて、自分のMastodonアカウントに今作ったアプリケーションを認証させます。 client_id
,client_secret
,username
,password
は、それぞれ差し替えてください。
curl -X POST -d "scope=write&client_id=<64字の英数字>&client_secret=<64字の英数字>&grant_type=password&[email protected]&password=<あなたのパスワード>" -Ss https://mastodon.example.com/oauth/token
成功すると、以下のように返答としてaccess_token
が返ってきます。大切に記録してください。
{"access_token":"<64字の英数字>","token_type":"bearer","scope":"write","created_at":<作成時のUNIX時間>}
ここで、自分のMastodonアカウントにログインして、認証済みアプリの項目を確認してください。アカウントへのデータの書き込み
のアクセス権が与えられていることを確認します。
Mastodonでの作業は、これで終わりです。
(おまけ)Curlで、ツートする。 (参照元)
必要な項目は、最低2つです。返信やメディアツートでは、さらに項目が必要です。
- access_token – 先ほど取得した64字の英数字。
- status – 本文
- visibility –
direct
,private
,unlisted
,public
公開範囲の設定。省略可。
例)privateのツートで、本文は、”TEST TEST TEST”
curl -X POST -d "access_token=<64字の英数字>&status=TEST TEST TEST&visibility=private" -Ss https://mastodon.example.com/api/v1/statuses
ここでは、2バイト文字は使えません。(IFTTT利用時には問題ありません。) 成功すると、ツートが行われていることが確認できるはずです。
IFTTT で Twitter の投稿を転送する。
先のURL文字列を用いて、IFTTTからTwitterの本文をMastdonに投稿します。
- IFTTT のページ上部の
My Applets
をクリックし、New Applet
をクリックする。 - 青文字の
this
をクリックし、twitter
を選択する。 New tweet by you
をクリックする。retweets
,@replies
を転送するかここで選択し、Create trigger
をクリックする。- Twitterのアプリケーション連携認証をブラウザ上で行う。
- 青文字の
that
をクリックし、検索ボックスに’webhook’と入力し、Maker Webhooks
をクリックする。 Make a web request
をクリックする。- 以下の通りに項目を埋める。
なお、インスタンスのURLと<>の場所は、必ず自分の環境のものに書き換えてください。(<>も含めて書き換えてください。)
項目 | 内容 |
---|---|
URL | https://mastodon.example.com/api/v1/statuses |
Method | POST |
Content Type | application/x-www-form-urlencoded |
Body | access_token=<64字の英数字>&status= {{Text}}&visibility=<希望の公開範囲> |
入力したら、Create action
をクリックします。 最後に、Finish
をクリックして完成です。この直後から、Twitterの内容は転送されるようになっているはずです。
まとめ
このような仕組みを用意しておくことで、Twitterから移行を考えている人も、共存を考えている人も使いやすくなるのではないかと思います。 また、IFTTTが無料でここまで優れたサービスをしていることに驚いています。 (なお、Maker WebHooks
には、limitがあるっぽいのでツイート数が多い方はご注意ください。)
遅延時間は、私の環境では1分程度のようで、個人的には満足しています。
IFTTTは、フックではなく、ポーリングで動いているみたいでした。タイミングが悪いと10分以上遅れるような感じがします。 これを解決するには、AWS Lambdaなどの有料サービスを使うしかないと思われるので、我慢して運用しています。