使われていないアカウントをフォローユーザーから探す

フォローしているアカウントの中で使われていないアカウントを探そうと思ったとき、フォロー数が多いと手動で確認するのはほぼ不可能なので、使われていないアカウントを自動でリストにまとめてくれるプログラムを書いてみました。

環境

メインファイル

認証

Tweepy を使います。自分だけ使えればいいということでサーバに挙げる必要がないので、Consumer Key も Access Token もプログラム内に書き込んで簡易的な認証で済ませます。

import tweepy

consumer_key = 'Consumer Keyの値'
consumer_secret = 'Consumer Secretの値'
access_token = 'Access Tokenの値'
access_token_secret = 'Access Token Secretの値'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

詳しくはこちらも。→ Twitter における二種類の認証方法の違い | MKTIA の備忘録

使われていないアカウントを調べる仕組み

どうやって使われているかいないかの判断は、最新投稿の日付を参考にしてみます。ROM 専の可能性も捨てきれませんが。

friends = api.friends_ids()

count = 0
for friend in reversed(friends):
    info = api.get_user(user_id=friend)
    status = info._json[u'status']
    created_at = status[u'created_at']
    date = created_at.split(' ')
    if(int(date[5]) < 2016):
        print info._json['screen_name']
    i += 1
    if(i >= 100):
        break

まず、フォローしているユーザーを取得してきます。

取ってきた ID のリストを使ってユーザーの詳細情報を取得すると最新ツイートも取得できるので、その日付で判断できそうです。

今回は 2016 年以降ツイートしていないという基準にしました。月日も取得できるので、ここら辺は柔軟な対応が可能です。

また、api.get_user() は呼び出せる回数に制限があるので、100 人調べたら終わりにしてます。

Tweepyのget_user()には注意が必要

ところで、get_user() でリクエストしたときのレスポンスは次のような形になります。

User(follow_request_sent=False, has_extended_profile=True, profile_use_background_image=True, _json={u'follow_request_sent': False,...)

Twitter 公式リファレンスでは json 形式で返ってくるとありますが、Tweepy のリファレンスには User オブジェクトと書いてあります。

そのため、json 形式で得るためには次のような感じで User オブジェクトから一度取り出す処理が必要です。(気づかずに割と手間取った)

info = api.get_user(user_id=friend)
status = info._json[u'status']

リストの逆順

あと、ID のリストは最近フォローした人が最初になるので、昔々にフォローした人は最後になります。使っていない人は後者の人なので、リストを逆順にして for 文を回しています。

Python ではリストを逆順にする方法が二つあります。

a = [1, 2, 3, 4]
a.reverse()
print a           #output: [4, 3, 2, 1]

b = [5, 6, 7, 8]
print reversed(b) #output: [8, 7, 6, 5]
print b           #output: [5, 6, 7, 8]

上は元のリストを逆順にする方法、下は元のリストの順番を維持し、処理するときだけ逆になる方法です。

Webアプリ化

これを実行すると私の環境では Anaconda Prompt 上で表示されますが、これだといちいち Twitter で検索するか、URL を入力しなければならないので非常にめんどくさい…

と思って、リストを HTML ページで表示し、リンクを自動で生成してくれるようにしました。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def main():
    '''ここにさっきのメイン処理'''
    return render_template('result.html', list=user_list)

if __name__ == '__main__':
    app.run()

list を渡して HTML でレンダリングします。

HTML

<html>
    <head>
        <title>no title</title>
    </head>
    <body>
        {% for user in list: %}
        <a href="http://twitter.com/{{user}}">{{user}}</a>
        {% endfor %}
    </body>
</html>

デザインにこだわる必要はないので、こんな感じで簡単に書いておきます。

flask では html ファイルはメインファイルの app.py と同階層にある templates ディレクトリに入れておかないと動きません。

最後に

2, 3 か月前からやりたいとは思ってたもののめんどくさくて手を付けていませんでしたが、これでようやくフォローを利用頻度で簡単に整理できるようになりました!