1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】SNS「Mastodon」のインスタンス名を取得したり自動フォローしたり

Last updated at Posted at 2019-01-16

個人開発のWebアプリ**「まちかどルート」**をv4.6にバージョンアップしました。
{109A4F68-509C-4E0A-A110-D624889D53FA}.png.jpg
SNS「Mastodon」のアカウントでログインできるようにしてあります。

せっかくなので、MastodonのAPIをいくつか使ってみました。

※ここではログイン認証の方法について詳しく触れません。こちらの記事をご参考ください

RailsなサービスでMastodonとのOauth連携を実装する
https://qiita.com/foloinfo/items/48389328da43d73ae7a0

インスタンス名の取得

上の画面写真でいうところの「十日町市のMastodon」がインスタンス名の例です。ユーザーによって参加しているインスタンスが違います。それを下記のコードで自動的に取得します。

uri = URI.parse("https://#{domain}/api/v1/instance")
json = Net::HTTP.get(uri)
result = JSON.parse(json)
@user.instance_title = result['title']

インスタンス名の取得APIについてはアクセストークン不要なので簡単でした。

自動フォロー

こちらはアクセストークンが必要です。なので下記のようなコードになりました。

client = Mastodon::REST::Client.new(base_url: "https://#{domain}", bearer_token: access_token)
uri = URI.parse("https://#{domain}/api/v1/accounts/relationships?bearer_token=#{access_token}&id=1")
json = Net::HTTP.get(uri)
result = JSON.parse(json)
if result[0]['following'].to_s == 'false'
  client.follow(1)
end

APIを叩いたレスポンスからフォローの有無をチェックし、未フォローだったら(falseだったら)フォローする、という流れです。

Mastodonで注意する点は、Twitterと違ってユーザーを特定するIDが英文字主体のアカウント名ではなく数字の番号である点です。調べる方法はこちらの記事が参考になります。

Mastodon ユーザーのユーザID番号の簡単な確認方法
https://qiita.com/KEINOS/items/c501bd433aa84d0d0108

リモートフォローの場合

Mastodonでは他のインスタンスのユーザーをフォローすることを「リモートフォロー」と呼んでいるそうです。インスタンスが異なればドメインやサーバーも違うので、そうしたユーザーを自動フォローさせるには工夫が必要でした。

uri = URI.parse("https://#{domain}/api/v1/follows?uri=townsguild@another-guild.com&bearer_token=#{access_token}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
req = Net::HTTP::Post.new(uri.path)
req.set_form_data({'uri' => 'townsguild@another-guild.com', 'bearer_token' => access_token})
res = http.request(req)

APIをPOSTメソッドで叩きます。その際、フォロー元のユーザーのアクセストークンを使うほか、SSL通信を行う必要があるらしく上記のようなコードになりました。

ちなみにtownsguild@another-guild.comの部分はフォロー先のユーザーアカウントです。メールアドレスのような形式ですがMastodonではこう記述するそうです。

あとがき

Mastodonはオープンソースで開発されていてバージョンアップの頻度が高いと思います。自作のWebアプリによさそうなAPIが追加されたら今後も積極的に活用してみたいです。

ほかにも書いているのでよかったらご覧ください
https://qrunch.net/@west2538onRails

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?