【Rails】SNS「Mastodon」のインスタンス名を取得したり自動フォローしたり
個人開発のWebアプリ「まちかどルート」をv4.6にバージョンアップしました。
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/[email protected]&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' => '[email protected]', 'bearer_token' => access_token})
res = http.request(req)
APIをPOST
メソッドで叩きます。その際、フォロー元のユーザーのアクセストークンを使うほか、SSL通信を行う必要があるらしく上記のようなコードになりました。
ちなみに[email protected]
の部分はフォロー先のユーザーアカウントです。メールアドレスのような形式ですがMastodonではこう記述するそうです。
あとがき
Mastodonはオープンソースで開発されていてバージョンアップの頻度が高いと思います。自作のWebアプリによさそうなAPIが追加されたら今後も積極的に活用してみたいです。
ほかにも書いているのでよかったらご覧ください
https://qrunch.net/@west2538onRails
Author And Source
この問題について(【Rails】SNS「Mastodon」のインスタンス名を取得したり自動フォローしたり), 我々は、より多くの情報をここで見つけました https://qiita.com/west2538/items/5a8996c4df155f9f79c2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .