Twitter の投稿を IFTTT で Mastodon へ転送する。

  • 47
    いいね
  • 1
    コメント

序文

突如話題になり、ユーザーが増えている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の登録メールアドレスとインスタンスを以下のものとして記します。

メールアドレス インスタンス
hogehoge@fuga.example.jp 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&username=hogehoge@fuga.example.jp&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に投稿します。

  1. IFTTT のページ上部のMy Appletsをクリックし、New Appletをクリックする。
  2. 青文字のthisをクリックし、twitterを選択する。
  3. New tweet by youをクリックする。
  4. retweets,@repliesを転送するかここで選択し、Create triggerをクリックする。
  5. Twitterのアプリケーション連携認証をブラウザ上で行う。
  6. 青文字のthatをクリックし、検索ボックスに'webhook'と入力し、Maker Webhooksをクリックする。
  7. Make a web requestをクリックする。
  8. 以下の通りに項目を埋める。

なお、インスタンスの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などの有料サービスを使うしかないと思われるので、我慢して運用しています。