暇人じゃない

LINE 公式アカウントを友だちに追加しているユーザー ID のリストを取得する
RubyLINE

タイトルのように、LINE 公式アカウントを友だちに追加しているユーザー ID のリストを知る必要があったのでメモ。

Messaging API に /bot/followers/id という API が用意されているので、それを使用する。

以下は LINE Messaging API SDK for Ruby の v1.19.0 を使ったサンプル。

client = Line::Bot::Client.new do |config|
  # ...
end

def get_followers(all_user_ids = [], continuation_token = nil)
  response = client.get_follower_ids(continuation_token)
  json = JSON.parse(response.body)

  puts "count: #{json["userIds"].count}"
  all_user_ids = all_user_ids + json["userIds"]

  if json["next"]
    puts "continuation_token: #{json["next"]}"
    sleep 1
    get_followers(all_user_ids, json["next"])
  else
    puts "done"
    return all_user_ids
  end
end

1 回のリクエストで取得できるリストは最大 300 件で、それを超える場合はレスポンスに next トークンが含まれる。 next トークンが存在する場合は処理を再帰的に実行して残りのリストを取得する。

上記のスクリプトを Rails コンソールなどで実行すると、ユーザー ID のリストを取得できる。

get_followers
# => ["Uxxxxxxxxxxxxxx1", "Uxxxxxxxxxxxxxx2", ...]

注意点としては、この API は認証済みアカウントかプレミアムアカウントしか使えない。 また、ブロックされていたり、プロフィール情報取得に同意していないユーザーは取得できない。

手前味噌だが、元々は API のパスを直書きしていたところを、Ruby SDK に Pull Request を送って v1.19.0 でリリースされた。

About

chocoby (GitHub / Twitter / Email)

個人事業主のソフトウェア開発者です。 Ruby と Rails を使った Web サービスの開発を得意としています。

CurryBu というサービスを作ったり、jp_prefecture という Gem を作っています。