結論(概略)
以下のページに全て書いてありますのでぜひご覧ください(大感謝)。
結論(詳細)
鍵アカ(非公開アカウント)を直接調べるメソッドはgem
にはありません(と思う、多分)。なので、鍵アカか否かを判別するためには「その人のツイートを取得しようとする」行為が必要です。それによりツイートが取得できれば公開アカウント(非鍵アカ)、取得できずにエラーになれば非公開アカウント(鍵アカ)ということになります。
具体的なコード
冒頭のページ内のコードのほぼコピペなのですが、具体的なコードとしては以下のようになります。client(Twitter::REST::Client)
は作成済みとします。「スクリーンネーム」とはいわゆる@foobar
におけるfoobar
の部分のことです。
client.user_timeline("調べたいアカウント(スクリーンネーム)") rescue Twitter::Error::Unauthorized # 非公開アカウント(鍵アカ)だった場合の処理 else # 公開アカウント(非鍵アカ)だった場合の処理
根幹部分だけを抜き出すと上記のようになります。
補足
- 上記のコードはメソッドにするとよいでしょう
- モンキーパッチにしてもいいでしょう
- メソッドが返す値は
true
orfalse
がいいでしょう - ツイートを取得する
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:ただもしかしたら、「公開アカのときのツイートは現在のアカウント状態に関わらず取得できる」という例外があるかも……