Fediverse楽しんでいますか?
Mastodonなどをやっているとふとこういうふうに思うことがあります。
- RSS/AtomフィードをMastodonで見ることはできないだろうか
- 定型文を投稿するBOTとかつくれないかなぁ
Twitterの公式アカウントをこっちでもフォローしたい
ということでそれを叶えるツール tomato-shrieker についての紹介と導入方法を記載しておきます。
※おことわり
- 私が普段お世話になっているツールで、皆さんにも使ってほしいと言う意図での記事です
- 実際の正しい導入方法については公式のWikiを確認してください、ここはあくまで簡単に説明する程度とします
- RSSやTwitterの転載BOTについては多くの議論がされていることは承知しています、批判的な方は見なかったことにしてブラウザバックしましょう
目次
tomato-shrieker ってなあに
tomato-shriekerは定型文、RSS/Atomフィード、Google News、Twitter投稿、コマンドの結果標準出力、GitHubのリリース情報などをもとに、Fediverseに投稿することができるツールです。
Mastodon、Pleroma、Misskey、Lemmy、Slack、Discord、LINEなどに投稿することができます。
詳しい話はドキュメントが整理されているためそちらを確認してください。
導入方法
簡単に記載しておきます。
tomato-shrieker はRubyが必要となるため、指定されているバージョンのインストールを行いましょう。
Rubyのインストール(rbenv)
# rbenv
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
#ruby-build
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
.bash_profile へ以下を追記します
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
導入できていることの確認
source ~/.bash_profile
rbenv --version
Rubyのインストール
rbenv install 3.1.3
※必要なバージョンを入れてください
Wikiを確認するか、リポジトリの.ruby-version
を確認します
tomato-shriekerの導入と設定
# クローンする
git clone https://github.com/pooza/tomato-shrieker.git
cd tomato-shrieker
# Rubyのバージョン設定
rbenv local 3.1.3
# 依存するgemのインストール
bundle install
続いてコンフィグファイルに設定を記載します。
./config/local.yaml
RSSフィードをMastodonに投稿する簡単な例
- source:
url: https://akiba-pc.watch.impress.co.jp/data/rss/1.0/ah/feed.rdf
dest:
mastodon:
url: https://mstdn.example.com
token: xxxxx
tags:
- rssfeed
tokenはBOT用アカウントを取得したあとにトークンを発行してそれを指定してください。
tagsを設定すると投稿にタグを付与してくれます。
投稿元の設定
sourceの下に投稿元の設定をすることができます。
tweet に設定するとTwitterの投稿をスケジュールに応じて投稿することができます。
text に設定すると定型文の投稿をスケジュールに応じて投稿することができます。
command に設定するとコマンドの実行結果(標準出力)をスケジュールに応じて投稿することができます。
feed に設定するとRSS/Atomフィードの新着エントリを投稿することができます。
news/phrase に設定するとGoogleニュースでフレーズを検索して新着記事を投稿することができます。
投稿先の設定
destの下に投稿先の設定をすることができます。
投稿先は複数設定可能です。
mastodon に設定するとMastodonに投稿することができます、urlとtokenが必要です。
misskey に設定するとMisskeyに投稿することができます、urlとtokenが必要です。
hooks に設定するとSlack互換Webhookに投稿することができます、Discordの場合は最後に /slack
をつけるのを忘れずに。
lemmy に設定するとLemmyに投稿数ことができます、host、user_id、password、community_idが必要です。
とりあえずこれで最低限と言った感じです。
rakeタスクについて
rakeタスクで色々なことをすることができます。
基本的なことはrake start
とrake stop
でしょう。
詳細はWikiで確認してください。
systemdの利用
systemdを利用してデーモンを起動することができます。
リポジトリの/config/sample/systemd/tomato-shrieker.service
を参考にしてください。
モロヘイヤとの連携
mulukhiya-toot-proxy と連携について簡単な説明です。
※モロヘイヤは基本的に鯖缶のみ導入可能なので注意
Webhook
モロヘイヤにはSlack互換Webhookの機能が存在しており、それを使用することで先程のトークン取得をせずにこちらを利用することが可能です。
カスタムフィードとの連携
モロヘイヤのカスタムフィード機能を利用してフィードを作成し、それをtomato-shriekerから取得するということが可能です。
私がやっている例として、Steamの特定のゲームの新着情報を取得する方法で、
通常のSteamのAtomフィードはtomato-shriekerに対応していないため、jsonで取得してそれをモロヘイヤに渡し、それをtomato-shriekerで取得することでBOTを作成することができます。
例えばこんなスクリプトで。
#!/bin/bash
JSON=`curl -s "http://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=960170&count=5&maxlength=20&format=json"`
echo $JSON | jq -r '[.appnews.newsitems[] | .date = (.date|strflocaltime("%Y-%m-%d %H:%M:%S %Z")) | { title: .title, link: .url, date: .date }]'
これをモロヘイヤに設定すると・・
こんな感じになります。 https://md.korako.me/mulukhiya/feed/steam/djmax
これをtomato-shriekerで指定して投稿・・みたいな感じです。
他にもタイパンヤの情報を取ってきたりとか・・、
まあ以下のような感じでjsonをはいてあげればフィードを作ってくれるのでそれを利用すると言った感じです。
[
{
"title": "NEW FREE TRACK UPDATE: Mr.Lonely - NieN",
"link": "https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/4836332027654166148",
"date": "2022-11-24 14:02:24 JST"
},
{
"title": "[COMPLETED] V EXTENSION 3 DLC Update Announcement (2022.11.16)",
"link": "https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/6368680725438675941",
"date": "2022-11-15 18:23:47 JST"
}
]
いかがでしょうか。
これを使えば簡単に様々なBOTを作成することができ非常 に便利です。
tomato-shriekerにはこれ以外にも機能があるので、ぜひWikiを確認してみてください。
簡単な説明でしたが、誰かの参考になれば幸いです。
今日はこのへんで。
では、また。