twitterlibをアクティビティに対応させた

twitter webのUIが変更されて、「アクティビティ」というタブが追加されました。フォロワーのfavoriteやretweetなどのイベントを通知してくれます。

chromeのコンソールなどでアクセスしているURLを調べてみると、

/i/activity/about_me.json
/i/activitt/by_friends.json

がアクティビティに関するAPIのようです。おそらく、about_meが自分自身のアクティビティ、by_friendsがフォロワーのアクティビティでしょう。

そこまでわかったので、twitterlibをプロキシに対応させるついでに、アクティビティのAPIをサポートしました。

こんなサンプルでアクティビティを取得できます。

# coding: utf-8
# ref: https://dev.twitter.com/discussions/3606

import twitterlib

ckey = 'consumer key'
csec = 'consumer secret'

class ActivityHandler(twitterlib.PollingHandler):
    def __init__(self, api):
        super(ActivityHandler, self).__init__(api)
    def callback(self, status):
        if status.action == 'follow':
            ss = map(lambda s: s.screen_name, status.sources)
            ts = map(lambda s: s.screen_name, status.targets)
        elif status.action == 'favorite':
            ss = map(lambda s: s.screen_name, status.sources)
            ts = map(lambda s: s.user.screen_name, status.targets)
        elif status.action == 'retweet':
            ss = map(lambda s: s.screen_name, status.sources)
            ts = map(lambda s: s.user.screen_name, status.targets)
        else:
            # list_member_added etc..
            return
        print '%8s %35s%s %35s%s' % (status.action, ','.join(ss[:3]), ['', '..'][len(ss) > 2], ','.join(ts[:3]), ['', '..'][len(ts) > 2])

auth = twitterlib.TwitterOAuth(ckey, csec, True)
api = twitterlib.API(auth, proxies=None)
api.auth()
act = twitterlib.PollingAction(api, ActivityHandler, apitype='activity/by_friends')
act.start()

実行結果は他のアカウントのアレなのでここでは載せません。実行する場合はご自身のアカウントでどうぞ。