約束の地

あの日あの時のキャロの想い出

twitter gem を用いて鍵アカを判別する方法

結論(概略)

以下のページに全て書いてありますのでぜひご覧ください(大感謝)。

結論(詳細)

鍵アカ(非公開アカウント)を直接調べるメソッドはgemにはありません(と思う、多分)。なので、鍵アカか否かを判別するためには「その人のツイートを取得しようとする」行為が必要です。それによりツイートが取得できれば公開アカウント(非鍵アカ)、取得できずにエラーになれば非公開アカウント(鍵アカ)ということになります。

具体的なコード

冒頭のページ内のコードのほぼコピペなのですが、具体的なコードとしては以下のようになります。client(Twitter::REST::Client)は作成済みとします。「スクリーンネーム」とはいわゆる@foobarにおけるfoobarの部分のことです。

client.user_timeline("調べたいアカウント(スクリーンネーム)")
rescue Twitter::Error::Unauthorized
  # 非公開アカウント(鍵アカ)だった場合の処理
else
  # 公開アカウント(非鍵アカ)だった場合の処理

根幹部分だけを抜き出すと上記のようになります。

補足

  • 上記のコードはメソッドにするとよいでしょう
    • モンキーパッチにしてもいいでしょう
  • メソッドが返す値は true or false がいいでしょう
  • ツイートを取得するuser_timelineのメソッドの引数は上記のとおりでもいいですが、client.user_timeline("調べたいアカウント(スクリーンネーム)", { count: 1 })とすると気分的に良いです
    • デフォルトではcount: 20になっていて 20個 のツイートを取得しようとしますが、鍵アカ判別のためなら 1個 のツイートでよいからです*1

補足を加味したコード

上記の「補足」を考慮すると、以下のようなコードになりますでしょうか。

def protected_user?(screen_name)
  @client.user_timeline(screen_name, { count: 1 })
rescue Twitter::Error::Unauthorized
  true
else
  false
end

心配点

Issuesとかを詳しく見ていないのですが、よく探せば絶対にデフォルトでこの判別メソッドあると思うんですけどどうなんでしょう……。

*1:ただもしかしたら、「公開アカのときのツイートは現在のアカウント状態に関わらず取得できる」という例外があるかも……

Powered by はてなブログ