Mastodon → Twitter の連携(IFTTT + GAS)

Mastodonのatomから投稿画像を取得する

Mastodonのatomから投稿画像を取得する方法。

投稿画像もTwitterに連携する編

RSSからIFTTTを使ってTwitterに送信するときに EntryImageUrl という項目を使うと画像も連携できるようになる。

ところが、これがどうやって取られているかというと「本文内に最初に出てきたimgタグ」を見ているっぽい。

Mastodonのユーザ用のAtomでは、画像は <link rel="enclosure" href="..." /> という別のタグに格納されてしまい、本文(content)内には出力されない。

つまりIFTTTのRSS Feedで取得できる EntryTitle EntryUrl EntryAuthor EntryContent EntryImageUrl EntryPublished FeedTitle FeedUrl のどれを使用しても投稿画像のファイル名を取得することができない!

これを解消するには「content内に画像URLを含める」ようにフィードを修正するしかないんだけどぼくは管理者じゃないので直せませんね。

というわけで「GASを使ってXMLを整形し、IFTTTのRSSの読み先をMastodonからGASの出力結果に変える」ような修正を行う。

(修正前) Mastodonのatom → IFTTT → Twitter等
(修正後) Mastodonのatom → GAS → IFTTT → Twitter等

GASでWebサービスを作成

例えばこんな感じ。

<entry> 内の <link> のうち rel="enclosure" のものだけをimgタグに変換した上で <content> の末尾に追加する。

するとこんな感じで出力されるようになる。

IFTTTの修正

IFTTTのRSSの取得先を、従来の https://poofion.com/@nigauri.atom みたいなやつからGASのURLhttps://script.google.com/macros/s/***/exec に変更する。

これでもし画像が添付されていれば EntryImageUrl で「1つめの添付画像に限り」取得できる(2つ目以降はどのみちムリ)。ただし画像を添付していない場合は IFTTTのおせっかい機能により http://ifttt.com/images/no_image_card.png が入っているので注意。

このあたりもGASでif文切って処理を切り分ければなんとかなろう。

便利ツール

Chrome拡張の「Boomerang – SOAP & REST Client」があると Webhooks や GAS のテストが簡単にできて便利。