おはこんハロチャオ Pokemon Advent Calendar 2022 25日目です。
今回はTwitterの情報をMastodonに共有するシステムを作ったお話だよ。
まーまね、君たちが言いたいこともわかるよ?これはポケモンの話題じゃないだろって?でも待ちたまえ。
Twitterからポケモンのマストドンへ、ポケモン関連の公式情報をお届けする機能を作ったんだ。関係があるよ。
いや、それもすでにあるだろって?ドードー。Twitterからマストドンへ投稿するシステムも確かにある。そして現在ポケモン関連の情報をお届けするボットも確かに存在する。
でねも、まずはこちらを見てくれたまえ。
https://pokemon.mastportal.info/@system02/109562657755205182
そう、、、
画像がないんですよ!
IFTTTやその他のツールを用いても殆どの場合画像は移せません。
InstagramやTumblr,WordpressなんかからTwitterに投稿する場合に画像をつけることは簡単なんですが、逆が全く出来ないんですね。
「マストドンのゴマゾウ共にはテキストだけで十分だ!」とするには少々忍びないと思って居たので、画像を添付できるようにカスタマイズすることにしました。
需要がないからつくる人があまり居ないだけで技術的にはそれほど難しいものではありません。
必要な情報を確認しましょう。
用意したもの
- マストドンの投稿するアカウント(既存のものを再利用)
- IFTTT
- Twitterのデータ取得プログラム(以下、Twitterデータ)
- Mastodonの投稿プログラム(以下、システム)
最終的に行った作業
- システム側からマストドンへの投稿(テキスト)
- システム側からマストドンへの投稿(メディア)
- システム側の受け入れプログラムの作成
- Twitterからシステムへの連携(IFTTT)
- Twitterデータのメディア情報を取得
- 上記の処理を全部くっつける
ね?簡単でしょ。
製作開始
作り始めたのが24日の17時頃。
まずは現状のシステムの確認。
IFTTTを使用し、Twitterが更新されると→Mastodonへ直接投稿
よくある流れです。
前者は問題ありません、更新チェックはIFTTTに任せたいですからね。
問題は「Mastodonへ直接投稿」。
これはmstdn.jp初代管理者であるぬるかる氏が作ったレシピなんですが、やりとり出来るのはテキスト情報のみ。
なので主にこちらの部分を作り変えました。
サーバーは過去に自分が作って居たサイトのリソースを拝借。
とりあえず自分のアカウントを使い、Mastdonのライブラリでテスト投稿
余計なこと言ってますね。気にしないでください。
テキストの投稿は流石に簡単ですね。
次に画像の投稿。
どうやってるのかな、と思ったら、
- 一度サーバーに画像のアップロード
- IDをもらって投稿に紐づける
シンプル。
うん、簡単です。
さて、問題はこいつです。
Twitterの投稿から画像を持ってくること。
「使われていないだけでIFTTTなんだからそれくらいあるだろう」「広大なネットの海にならあるやろ」
とか余裕ぶっこいていました。
そんなものはない。マジでない。
ってなわけで絶望していたのですが、大人しくTwitterAPIを使用することにしました。
申請したら一瞬で通りました。ビビる。
出来上がったのがこちら。使ってる画像が何故か違いますね。気にしないでください。
完成したアカウント
成果物がこちらです。まだ画像の投稿はされてませんが、これから動き出すと思います。
ポケモン公式
https://pokemon.mastportal.info/@system02
Pokemon GO Japan
https://pokemon.mastportal.info/@system03
アニポケ
https://pokemon.mastportal.info/@anipoke_PR
ポケモンシャツ
https://pokemon.mastportal.info/@pokemon_shirts
残りは近日中に増やします。
というわけでみなさん、Pokemon Advent Calendar 2022 25日間お疲れ様でした!
参加された方も見ていただいた方も楽しんで頂けましたか?
メリークリスマス!良いお年を!
余談
IFTTT必要だった?
当初の予定ではもっと簡単に作る予定だったので既存に使用していたIFTTTをそのまま採用しました。
この構成なら不要に感じますが、ある程度リアルタイムに投稿できる/APIのリクエスト制限を考えると更新確認処理は全部任せて良かったと思います。
実は当初の予定では別のプログラムを作る予定でしたが、明らかに無理ゲーなことが判明しました。
なので数時間程度で作れるなにか、としてこちらを選びました。
参考ページなど
Mastodon APIドキュメント(投稿の仕方を確認/画像のアップロード方法を確認)
https://docs.joinmastodon.org/methods/statuses/
https://docs.joinmastodon.org/methods/media/
Mastodonの投稿に用いたAPI
https://github.com/yks118/Mastodon-api-php