マストドンを楽しむためにやってみたあれこれ
2017年12月09日
この記事はMastodon Advent Calendorの9日目の記事です
過去記事とかぶる内容もありますが、自分がマストドンを4月から半年以上やってきて、「もっと楽しむにはどうしたらいいか」を考えてやってきたあれこれを主なものに絞って書いていきます。

・「びわ湖の水位は?」と質問すると当日朝のびわ湖の水位を答えます。

・URLを含んだトゥートを送るとその本文を解析し、要約してくれます(重要文の抽出)。
画像中の対象ページ:https://internet.watch.impress.co.jp/docs/imreboot/column/1094016.html

・その他、適当な対話をします。
・地域ニュースを発信します。
自動対話botの西郷どんのつんを見つけて面白いと思い、管理人の臣さんに実装を教えていただいたところから自分も作ってみたくなりました。ちょうどその頃ほしかどよぞらさんにびわ湖丼を擬人化していただいて、アイコンとして使わせていただくお願いをしたところぴったりな画像を作っていただきました。これは機能としても面白いbotにしなければならないと思い、現在もそのアイデアを探したりしているところです。
応答の種類の振り分けにはDialogflow(旧API.AI)を使っています。そこから「びわ湖の水位」を返すか、「リンク先の本文の要約」を返すか、「対話」を返すかに分かれて、それぞれ処理しています。
・びわ湖の水位を返す
国土交通省のページから本文の水位部分を抽出しています。 http://www.kkr.mlit.go.jp/biwako/
・リンク先の本文の要約
リンク先のページから「本文」をreadabilityで取り出し、summpyで要約(重要文の抽出)を行っています。
・対話
Docomoの雑談対話APIを使っています(関西弁バージョン)。一応、対話相手を覚えていて、同じ人との対話には過去の内容が反映されて受け答えが変わってくるらしいです。

(多分過去に滋賀に台風が近づいている話をしたのを引きずっている)
・地域ニュースの発信
これは先日の7_nanaさんの記事でも説明されたマストどすのちどりと仕組み的には同じです。ただし「滋賀」タグの更新頻度が低いため、検索条件をタイトルに「滋賀」「琵琶湖」「びわ湖」のいずれかが含まれることにしています。

定期的にbotがじゃんけんをします。じゃんけんに負けるとこのインスタンス内のアカウントが凍結(suspended)になります。@megamiをリモートフォローで外部インスタンスからも参加が可能です。その場合負けてもアカウント本体が凍結することはありませんが、参加はできなくなります。

「デスゲーム×SNSの組み合わせ」というアイデアが以前からあって、マストドンという存在を知って実際に形にしてみました。
cronで定期イベントを発生させています。アカウントの凍結は直接SQLを走らせています。
じゃんけんは「ぐー」「ちょき」「ぱー」の他に絵文字でもいけます。
バランス調整として「復活」のイベントも実装してみました。倒したモンスターも定期的に復活してきます。複数人でどこまでモンスターを倒し続けることができるかに挑戦する感じになっていると思います(挑戦者求むです)。

GitHubのAppsのリストに載せてもらえました。
ハッシュタグ付きトゥートに位置情報を付加します。地図上ではハッシュタグTLをインスタンスから取得し、位置情報の付加されているトゥートをマッピングします。また地図上の任意の位置、もしくは端末の現在位置を付加したトゥートが可能です。

自分のトゥート内容の傾向(〜でこれ食べた、〜でここに来た)や、フォローしてる人のアカウントの方向性を見るに、位置情報の実装があればもっと楽しめるんじゃないかと思いました。ツイッターでは近辺の施設や端末自身の位置情報を付加することが可能です。
調布丼(2017/12/09現在SSL期限切れ中)の方で位置情報の実装が独自で行われており、その実装が公開されていました。ただし当時の自分はRuby on Railsの知識に乏しく、頻繁に発生するマストドンのバージョンアップの追随が厳しくなるだろうという予感と、他のインスタンスの人でも利用できるような実装が望ましいと思いこれを見合わせました。
マストドンに手を加えず位置情報を付加する方法として「トゥート内に呪文を埋め込む」のが手っ取り早いと思いました。これであればコピペでスマホアプリからも投稿が可能です。その呪文を埋め込まれたトゥートを抽出してマッピングする外部ページを作る必要がありますが、呪文がその外部ページへのリンクを兼ねれば誘導はしやすくなります。さらに地図側では呪文中の位置情報を初期表示位置にすれば無駄の無い実装になりそうだと思いました。

(呪文の例)
呪文の埋め込まれたトゥートを取得する効率を考えた時にハッシュタグTLを対象にするのが良いと考えました。ハッシュタグTLであれば連合に流れてくる外部インスタンスのトゥートも拾えますし、ハッシュタグを切り替える事で取得するTLが切り替わり、多様な地図を表示できる事になります。
当初は地図上に表示される呪文をコピペしてマストドンの投稿フォームに貼り付けという手順での利用でしたが、マストドンに実装されたshare機能を利用して呪文付き投稿を行えるようにしています。
ハッシュタグTLに含まれる添付ファイル、Youtube等のリンクを抽出してそれらを個別に表示します。
#写真部 #ラーメン #紅葉狩りバトルロワイヤル で写真が流れてきたり、 #pubg #np で動画が来たりします。マストドンのTL中では動画が埋め込まれなかったり写真がトリミングされて表示される等、あまり表示に恵まれていません。では写真・動画をメインで見せるページがあればまた違う楽しみがあるんじゃないかと思って作ってみました。
ハッシュタグTLに対して添付ファイルがあるか、Youtube、ニコニコ動画等の埋め込みリンクが本文中に含まれているかを判定してそれらを個別に抽出しています。
・Youtube
・Twitch
・ニコニコ動画(sm○○○)
・SoundCloud
が埋め込みリンクの対象です。
ドメイン+ハッシュタグの組み合わせを指定してページを開く呪文も使えます。
https://tootpic.net/?domain=mastodon.art?tag=mastoart
https://tootpic.net/?domain=pawoo.net&tag=ワンドロ
shareボタンも一応付けています。
こんなのあれば便利かなと思って作ったものです。アイデア紹介です。
@biwakodon.com#関西連合
@biwakodon.com#写真部
LTLのハッシュタグつきトゥートをブーストします。通常外部インスタンスのハッシュタグTLには、外部インスタンスからフォローされているアカウントのトゥートしか届きません。しかしこのアカウントを外からフォローしてもらえれば、ブーストによってびわ湖丼LTLのハッシュタグトゥートが全て拾い上げられます(もちろん「公開」範囲であることが条件になります)。
実装にはStreamingAPIを使っています。このエンドポイントの一覧にはありませんが、ソースを見ると/api/v1/streaming/hashtag/localなるエンドポイントがあるので、これを見ています。
自分は自身の管理しているマストドンに対して「これは自分が運営しているSNSだ」という意識が、もしかしたら薄いかもしれません。どちらかと言えば「みんながやってるマストドンに参加している」になります。なので、作るものの基本方針は「どのインスタンスからでも使える事」になります。
例えば誰かが面白いbotを作ったとします。インスタンス内での利用を想定されたものだったとしても、リモートフォローで他のインスタンスにもトゥートが拡散する可能性があります。つまりはインスタンス内で楽しむものだったのが実はマストドン(あるいは同じプロトコルを使ったSNS)全体に対しての実装になるという事です。自分はそうなるのが面白いと思っています。
例外でマストドンに直接手を入れたカスタマイズを紹介しておきます。
ホームや連合に出てくる外部インスタンスのトゥートに、インスタンス毎に独自スタイルを適用できるようHTMLのクラスを埋め込みます。
カスタマイズ部分はGitHubで公開しています。
例えば「biwakodon.com」から発信されたトゥートなら「biwakodon-com」というクラス名がトゥートのHTMLに埋め込まれます。これを利用してマストドン本家の機能であるカスタムデザインでインスタンス毎にトゥートに独自スタイルを適用できます。

こんな感じで、
.mastodon-nara-jp{ background-color:#28372a }
.mstdn-osaka{ background-color:#352837 }
.mastodos-com{ background-color:#283637 }

うっすら背景色を変えています。
今日12/9は19:30からブラタモリで彦根です。
過去記事とかぶる内容もありますが、自分がマストドンを4月から半年以上やってきて、「もっと楽しむにはどうしたらいいか」を考えてやってきたあれこれを主なものに絞って書いていきます。
対話botびわこ@びわ湖丼

機能
・「びわ湖の水位は?」と質問すると当日朝のびわ湖の水位を答えます。

・URLを含んだトゥートを送るとその本文を解析し、要約してくれます(重要文の抽出)。
画像中の対象ページ:https://internet.watch.impress.co.jp/docs/imreboot/column/1094016.html

・その他、適当な対話をします。
・地域ニュースを発信します。
動機
自動対話botの西郷どんのつんを見つけて面白いと思い、管理人の臣さんに実装を教えていただいたところから自分も作ってみたくなりました。ちょうどその頃ほしかどよぞらさんにびわ湖丼を擬人化していただいて、アイコンとして使わせていただくお願いをしたところぴったりな画像を作っていただきました。これは機能としても面白いbotにしなければならないと思い、現在もそのアイデアを探したりしているところです。
実装
応答の種類の振り分けにはDialogflow(旧API.AI)を使っています。そこから「びわ湖の水位」を返すか、「リンク先の本文の要約」を返すか、「対話」を返すかに分かれて、それぞれ処理しています。
・びわ湖の水位を返す
国土交通省のページから本文の水位部分を抽出しています。 http://www.kkr.mlit.go.jp/biwako/
・リンク先の本文の要約
リンク先のページから「本文」をreadabilityで取り出し、summpyで要約(重要文の抽出)を行っています。
・対話
Docomoの雑談対話APIを使っています(関西弁バージョン)。一応、対話相手を覚えていて、同じ人との対話には過去の内容が反映されて受け答えが変わってくるらしいです。

(多分過去に滋賀に台風が近づいている話をしたのを引きずっている)
・地域ニュースの発信
これは先日の7_nanaさんの記事でも説明されたマストどすのちどりと仕組み的には同じです。ただし「滋賀」タグの更新頻度が低いため、検索条件をタイトルに「滋賀」「琵琶湖」「びわ湖」のいずれかが含まれることにしています。
じゃんけんでデスゲームするMastodon

機能
定期的にbotがじゃんけんをします。じゃんけんに負けるとこのインスタンス内のアカウントが凍結(suspended)になります。@megamiをリモートフォローで外部インスタンスからも参加が可能です。その場合負けてもアカウント本体が凍結することはありませんが、参加はできなくなります。

動機
「デスゲーム×SNSの組み合わせ」というアイデアが以前からあって、マストドンという存在を知って実際に形にしてみました。
実装
cronで定期イベントを発生させています。アカウントの凍結は直接SQLを走らせています。
じゃんけんは「ぐー」「ちょき」「ぱー」の他に絵文字でもいけます。
バランス調整として「復活」のイベントも実装してみました。倒したモンスターも定期的に復活してきます。複数人でどこまでモンスターを倒し続けることができるかに挑戦する感じになっていると思います(挑戦者求むです)。
位置情報を付加するTootmap

GitHubのAppsのリストに載せてもらえました。
機能
ハッシュタグ付きトゥートに位置情報を付加します。地図上ではハッシュタグTLをインスタンスから取得し、位置情報の付加されているトゥートをマッピングします。また地図上の任意の位置、もしくは端末の現在位置を付加したトゥートが可能です。

動機
自分のトゥート内容の傾向(〜でこれ食べた、〜でここに来た)や、フォローしてる人のアカウントの方向性を見るに、位置情報の実装があればもっと楽しめるんじゃないかと思いました。ツイッターでは近辺の施設や端末自身の位置情報を付加することが可能です。
実装
調布丼(2017/12/09現在SSL期限切れ中)の方で位置情報の実装が独自で行われており、その実装が公開されていました。ただし当時の自分はRuby on Railsの知識に乏しく、頻繁に発生するマストドンのバージョンアップの追随が厳しくなるだろうという予感と、他のインスタンスの人でも利用できるような実装が望ましいと思いこれを見合わせました。
マストドンに手を加えず位置情報を付加する方法として「トゥート内に呪文を埋め込む」のが手っ取り早いと思いました。これであればコピペでスマホアプリからも投稿が可能です。その呪文を埋め込まれたトゥートを抽出してマッピングする外部ページを作る必要がありますが、呪文がその外部ページへのリンクを兼ねれば誘導はしやすくなります。さらに地図側では呪文中の位置情報を初期表示位置にすれば無駄の無い実装になりそうだと思いました。

(呪文の例)
呪文の埋め込まれたトゥートを取得する効率を考えた時にハッシュタグTLを対象にするのが良いと考えました。ハッシュタグTLであれば連合に流れてくる外部インスタンスのトゥートも拾えますし、ハッシュタグを切り替える事で取得するTLが切り替わり、多様な地図を表示できる事になります。
当初は地図上に表示される呪文をコピペしてマストドンの投稿フォームに貼り付けという手順での利用でしたが、マストドンに実装されたshare機能を利用して呪文付き投稿を行えるようにしています。
メディアTLを公開するTootpic
機能
ハッシュタグTLに含まれる添付ファイル、Youtube等のリンクを抽出してそれらを個別に表示します。
動機
#写真部 #ラーメン #紅葉狩りバトルロワイヤル で写真が流れてきたり、 #pubg #np で動画が来たりします。マストドンのTL中では動画が埋め込まれなかったり写真がトリミングされて表示される等、あまり表示に恵まれていません。では写真・動画をメインで見せるページがあればまた違う楽しみがあるんじゃないかと思って作ってみました。
実装
ハッシュタグTLに対して添付ファイルがあるか、Youtube、ニコニコ動画等の埋め込みリンクが本文中に含まれているかを判定してそれらを個別に抽出しています。
・Youtube
・Twitch
・ニコニコ動画(sm○○○)
・SoundCloud
が埋め込みリンクの対象です。
ドメイン+ハッシュタグの組み合わせを指定してページを開く呪文も使えます。
https://tootpic.net/?domain=mastodon.art?tag=mastoart
https://tootpic.net/?domain=pawoo.net&tag=ワンドロ
shareボタンも一応付けています。
ハッシュタグブーストアカウント
こんなのあれば便利かなと思って作ったものです。アイデア紹介です。
@biwakodon.com#関西連合
@biwakodon.com#写真部
LTLのハッシュタグつきトゥートをブーストします。通常外部インスタンスのハッシュタグTLには、外部インスタンスからフォローされているアカウントのトゥートしか届きません。しかしこのアカウントを外からフォローしてもらえれば、ブーストによってびわ湖丼LTLのハッシュタグトゥートが全て拾い上げられます(もちろん「公開」範囲であることが条件になります)。
実装にはStreamingAPIを使っています。このエンドポイントの一覧にはありませんが、ソースを見ると/api/v1/streaming/hashtag/localなるエンドポイントがあるので、これを見ています。
~何か作る上での方針的なもの~
自分は自身の管理しているマストドンに対して「これは自分が運営しているSNSだ」という意識が、もしかしたら薄いかもしれません。どちらかと言えば「みんながやってるマストドンに参加している」になります。なので、作るものの基本方針は「どのインスタンスからでも使える事」になります。
例えば誰かが面白いbotを作ったとします。インスタンス内での利用を想定されたものだったとしても、リモートフォローで他のインスタンスにもトゥートが拡散する可能性があります。つまりはインスタンス内で楽しむものだったのが実はマストドン(あるいは同じプロトコルを使ったSNS)全体に対しての実装になるという事です。自分はそうなるのが面白いと思っています。
とは言え例外
例外でマストドンに直接手を入れたカスタマイズを紹介しておきます。
トゥートにドメインクラスを追加してカスタムデザインに利用
機能
ホームや連合に出てくる外部インスタンスのトゥートに、インスタンス毎に独自スタイルを適用できるようHTMLのクラスを埋め込みます。
実装
カスタマイズ部分はGitHubで公開しています。
例えば「biwakodon.com」から発信されたトゥートなら「biwakodon-com」というクラス名がトゥートのHTMLに埋め込まれます。これを利用してマストドン本家の機能であるカスタムデザインでインスタンス毎にトゥートに独自スタイルを適用できます。

こんな感じで、
.mastodon-nara-jp{ background-color:#28372a }
.mstdn-osaka{ background-color:#352837 }
.mastodos-com{ background-color:#283637 }

うっすら背景色を変えています。
最後に
今日12/9は19:30からブラタモリで彦根です。
Posted by
wakin
at
03:09
│Comments(
0
) │
mastodon