宮子Bot機能追加:フォロー返し

週末なのでびしばしPython触る

フォロー返し機能

これがないとフレンドタイムラインを取得できないからおはようおやすみ機能が実装できない。
ということでこんな感じで実装
どう見てもDjangoのViewですがViewである意味は皆無です。

def reversefollow(request):

    api = _getapi()
    
    #フォロー済み一覧
    friends = api.GetFriends()
    new_followers = []
    for follower in api.GetFollowers():
        try:
            #removeしようとしてみる
            friends.remove(follower)

        #removeできない=まだフォロー返ししてない
        except:
            try:
                #フォローする
                new_followers.append(api.CreateFriendship(follower.screen_name))
            except:
                pass
        
    return HttpResponse([f.screen_name for f in new_followers])

Followers全員に対して毎回API叩くのは無意味すぎるので、Friendsに存在しないFollowerだけフォローする。
チュートリアル見た限りではリストのメソッドにexistsの類が無かったのでこんな妙な実装にしてみた。
まぁcountがあるのでこういう実装でもよかったかもしれない。こっちだと2行減る

if friends.count(follower):
    ...

ただこの実装には問題が2つ

  1. 比較回数がfriends*follower回固定
  2. つまらn←重要


エラーキャッチを使うと最小でfollower、最大でfriends(2*new_follower+friends+1)/2 の比較回数になるのかな?
まぁ比較回数だけの話で、removeとかexceptがどんだけのコストかも考えないとどっちがいいのかは分からない。
そもそもこんな考察する必要ない

余談

ゼロとか空文字列とかNoneをFalse扱いできるのはいいよねー…

if(str != null || "".equals(str)) {
    System.out.println("からっぽ");
}

Javaながいよう