Mastodon(マストドン)をZapierでTwitterと連携

流行りのマストドン、皆さん使ってますか？

とりあえず親和性が高そうなTwitterとの連携を考えたんですけど、やっぱりIFTTTだと自由度が低いので、Zapierで連携する事にしました。

#運用ポリシー

##1. メンション付きは除外
Mastodonの仕組み上、メンションを飛ばすトゥート（つぶやき）がある以上、Twitterにそのまま流してしまうと誤爆の恐れがあるので避けます。

##2. ブースト（リツイートみたいなもの）は除外
これをそのまま流してしまうと、Mastodon上の他のアカウントのトゥートをそのままツイートしてしまうので、なりすましみたいになっちゃいますし、Mastodon上のアカウントの人がTwitterには流して欲しくないかもしれませんし、条件とか頭に誰かが言ったみたいなのを付けてもいいんですが、正直面倒くさいので除外します。

#Step 1. astodonのatomフィードから抽出
![スクリーンショット 2017-04-20 12.07.33.png](https://qiita-image-store.s3.amazonaws.com/0/105635/e5e0eb5a-6441-fc20-13fb-aa8a6e49f780.png)
ZapierにはデータをごにょごにょするAppsがいくつか用意してあるので、今回のTriggerはそこからRSSを選択。
![スクリーンショット 2017-04-20 12.12.56.png](https://qiita-image-store.s3.amazonaws.com/0/105635/9e494199-86eb-455a-1a34-0ac106d3588c.png)
Feed URLにatomフィードのURLを入力します。形式は以下の通り。
`https://instans.example.com/@username.atom`
ユーザページの末尾に拡張子を付けるだけです。

#Step 2. ツイートしたいものだけをフィルタ
![スクリーンショット 2017-04-20 12.23.21.png](https://qiita-image-store.s3.amazonaws.com/0/105635/1e8a8964-fa1c-e2e7-d7e2-0eb56a573342.png)
サイドバーに先ほど作ったTriggerの下に(+)マークがあるので、クリックしてFilterを選択します。以後、アクションを追加する時は全て同様にします。

![スクリーンショット 2017-04-20 12.29.01.png](https://qiita-image-store.s3.amazonaws.com/0/105635/dc8c0304-f120-cffa-87d3-df26b93312ee.png)
セットアップ画面が表示されるので、プルダウンするとTriggerで読込んだフィードの項目が選択できるので、項目の値で条件を設定します。ちなみに僕の設定はこんな感じです。

![スクリーンショット 2017-04-20 13.48.03.png](https://qiita-image-store.s3.amazonaws.com/0/105635/b5c4337e-c256-292c-18d0-7990b91bdfa5.png)
Linkって項目は、メンションが付いている場合はメンション先のアカウントのURLが入ってますが、メンションが付いていない場合は`https://activityschema.org/...`って感じのURLが入ってるのでドメインを入れて条件としてます。（今後バージョンやインスタンスのコードの更新で変わるかも）

#Step 3. HTMLのクリーンナップ
MastodonのatomフィードにはプレーンテキストとHTMLの両方が吐き出されてますが、プレーンテキストではURLのプロトコル部とドメインの間に改行コード（？）が挿入されるので使えません。（Zapierでできるのかもしれないけど僕はよく判らないので）今回はHTMLをクリーンナップして使います。

![スクリーンショット 2017-04-20 21.40.20.png](https://qiita-image-store.s3.amazonaws.com/0/105635/fe4576aa-2310-ac28-9179-2b4fac991071.png)
ZapierのApp、Formatterを使います。

![スクリーンショット 2017-04-20 21.42.32.png](https://qiita-image-store.s3.amazonaws.com/0/105635/4d220f4a-3121-03fa-56ab-256377b32421.png)
アクションはTextを選択

![スクリーンショット 2017-04-20 21.46.07.png](https://qiita-image-store.s3.amazonaws.com/0/105635/975670e3-dbd3-298a-3e8e-1795fff37e4b.png)
TransformのアクションにはRemove HTML Tagsを選択。図のように、Step 1.で読込んだatomフィードの項目からRaw Content #textを選んでください。

#Step 4. 文字数を調整

Mastodonは500文字も打てますが、Twitterは140文字制限があるので文字数を調整します。挿入するアクションはStep 3.と同様にFormatterのTextアクションを使います。

![スクリーンショット 2017-04-20 22.36.47.png](https://qiita-image-store.s3.amazonaws.com/0/105635/e8d9ed00-e8d9-e956-d253-e23c3a6a00ad.png)
TransformのアクションはTruncate（切り詰める）を選びます。これはテキストを末尾から指定文字数になるまで切り詰めるアクションです。
Max Lengthは最大文字数です。この後でトゥートのURLを添付する分も考慮して、おおよそ120文字程度にしてあります。
Append Ellipsisは末尾に「...」を付けるかどうかです。どっちでもいいですけど、Twitterに流れた時にその先があるってのが判るように付けた方が良いかもしれないですね。

![スクリーンショット 2017-04-20 22.39.25.png](https://qiita-image-store.s3.amazonaws.com/0/105635/8450a0c8-983d-c93a-26d7-61d07df914a0.png)
Inputの項目なんですが、ここではatomフィードではなくて、Step 3.で調整したテキスト情報を使うので、画像のように選んでください。

#Step 5. トゥートのURLを短縮
![スクリーンショット 2017-04-20 22.49.52.png](https://qiita-image-store.s3.amazonaws.com/0/105635/a5fd81ed-7e44-6f50-b577-1df4f0d9d5bd.png)
ここでも同様にFormatterのアクションを使いますが、Shorten URLという専用のアクションを使います。

![スクリーンショット 2017-04-20 22.51.21.png](https://qiita-image-store.s3.amazonaws.com/0/105635/dd94fa84-336e-d39d-0615-f9f36bed5644.png)
ここで選ぶのはStep 1.のatomフィードの項目からLink Alternateを選びます。

#Step 6. ツイート文を生成してツイートする
![スクリーンショット 2017-04-20 22.53.41.png](https://qiita-image-store.s3.amazonaws.com/0/105635/bcd5a16e-c233-320e-1fc2-30ad955f0a77.png)
既にZapierとTwitterアカウントを連携していればYOUR APPSという項目に出ていますが、上の検索か下の方にあるBUILT-IN APPSという項目に多分あります。

![スクリーンショット 2017-04-20 22.57.03.png](https://qiita-image-store.s3.amazonaws.com/0/105635/aef1871e-134e-6471-b1e9-ed093be23b74.png)
アクションはいくつかありますが、今回はCreate Tweetを選びます。

![スクリーンショット 2017-04-20 22.59.16.png](https://qiita-image-store.s3.amazonaws.com/0/105635/c2ac102b-688a-c66a-0d7a-ed017b2108b5.png)
Messageでツイート文を構成しますが、ここではStep 4.まででクリーンナップ・文字数調整したテキストデータとStep 5.で短縮したトゥートURLを使います。
あと、僕はMastodonからの転送を区別するのに絵文字（Ⓜ️）を頭に付けてます。この辺はオリジナリティ発揮しちゃいましょう。
Should Shorten URLs?という項目はMessageで構成したツイート文の中にURLが含まれていれば短縮するかどうかです。短縮は既にしてるのでnoを選びます。

#問題点

実はトゥート文にURLが含まれている場合で120文字以上後半にかかるようなものは後ろから削られちゃいます。動作もあまり検証してないので多分ツイート上のリンクは404になっちゃうかもしれないです。

また上手く解決できる方法があったらご教示いただけると幸いです。