フォロー制限に引っかかった プログラムの欠陥か

f:id:runaru_dearly1641:20180408203434j:plain

バカヤローだ!

はじめに

釈迦が始まったら一部のアイマスオタクが好きな越境()とやらの仲間入りするんんだろうなと考えると鬱だ

越境オタクは、ASグリモバホモでアイマスが全てみたいな物言いなのと、どれも等しく愛してる自分が好きみたいな動物愛護団体地味たエゴを感じるからきらい、どんなアイマスでも愛してるんなら876+ゼノグラ+魔王エンジェルスとかで描いてみろよと

本題

フォロー制限に引っかかった

前回の

 

naru1641.hatenadiary.jp

この記事のプログラムを改変して、ツイッターのよくあるRT&フォロー懸賞企画を漁ってRTフォローするプログラムを作って回していたところ、フォロー制限に引っかかってしまいました。

 

表示されたエラーメッセージはこんなの

 TwythonError: Twitter API returned a 403 (Forbidden), You are unable to follow more people at this time. Learn more <a href='http://support.twitter.com/articles/66885-i-can-t-follow-people-follow-limits'>here.

 

原因を考えてみる

一気に何百人もフォローとかはしていないし何故制限に触れたのだろう、と少し考えて思い当たったのは

 

フォローしてるユーザーじゃないときにフォローするように条件記述をしていたつもりだったけれどその部分が意図した通りに機能しておらずにフォロー申請を飛ばしまくっていた

 

という可能性.

 

怪しい部分のコード

if not tweet['statuses']['user']['follow']:
            twitter.create_friendship(screen_name = tweet['statuses']['user']['idName'], user_id = tweet['statuses']['user']['userId'], follow = True)

ここで見ているのはツイートのデータの中のをしたユーザーに関する部分(User object)です。

User object — Twitter Developers

 

そのなかには"following"という項目があり、説明はこうなっています。

Deprecated. Nullable . Perspectival . Deprecated. When true, indicates that the authenticating user is following this user. Some false negatives are possible when set to “false,” but these false negatives are increasingly being represented as “null” instead. 

 

私は英語が読めないので、ツイートしてるユーザーをフォローしていたらここの値はtrueになるのだと予想して、上プログラムで if not (略)['following']としました。

(if not でその中身がTrueでない(フォローしていない)ときcreate_friendship(ユーザーフォロー)が行われる、という動作になることを期待していた)

 

しかし制限にかかった後、確認のためにフォローしてる人のfollowingの中身を見てみると、その中身はNone。

 

Trueと思っていた値がNoneだったので、これでは今までのプログラムはずっと既にフォローしていた人にもcreate_friendshipをしていた可能性があります。
これは規制の原因になり得る。

(followingの勘違い以前に、どうやらDeprecatedというのは非推奨という意味らしくそれを使っていた時点でよろしくなかったよう)

ここのコードの解決策

パッっと思いつくのは、めんどくさそうだけど、sqlやらに自分のフォローの一覧を作って毎回それと照合。リストにいなかったときにフォローする、という方法です。めんどくさそうだけど。

 

StreamingAPIも余命二ヶ月で、このプログラムもうすぐ使えなくなるし改善とかするの時間の無駄じゃないか、とか思ったり。