YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

TwitterのOAuthを使って90日以上発言してない人をremoveするスクリプト書いた

はじめに

最近「フォロワー1000人目指そう」とか #followmejp とかつながりたがる流れが多いけど、TwitterのTLがあふれちゃうとやる気なくしちゃうことが前にわかったので縮小の方向に進めてます、こんにちは。
また最近はOAuth推奨っぽいのでOAuthでfollowingを管理するスクリプトを書きました。

参考

ほぼここのパクリ。あざーっす。

スクリプトをそのままcommitできるようにpit使い始めました。id:a2cさんありがとうございまっす!

当然TwitterAPIは読むでしょ。

OAuthをざっくり理解するために上の記事を読みました。

作ったもの

自分のfollowingのリストを取得して、ユーザ一人一人のstatusのcreated_atを確認します。それが90日より前のユーザのリストを作成して、あとはひたすらdestroyするだけです。
oauth, pitが必要です。あとPython2.5以前の人はsimplejsonも必要です。

解説

詳しい話は上のtechnoさんのリンクに全部書いてます。タイムリーな記事でどうもありがとうございます。大まかな流れは

  • Twitterにアプリケーションを登録(Consumerの登録)
  • Consumer Key, Consumer Secretの取得
  • Access Token, Access Token Secretの取得
  • スクリプトからAPIを呼ぶときにヘッダにOAuthのパラメータを渡す
アプリケーションの登録

まずOAuthを使ったスクリプトを作る場合はTwitterにアプリケーションの登録をする必要があります。

f:id:ymotongpoo:20091129111230p:image
で登録画面に行って、下記の項目を入力。これらは登録後も変更可能。

Application Name アプリケーションの名前。適当。
Description 説明。適当。
Application Website これ書かないと怒られるので適当にブログのURL書いた
Organization 無視。
Website 無視。ブログのURL書いといた。
Application Type Clientを選択。Webアプリなんか作る場合はBrowserを選んでください。
Default Access Type Read&Write
Use Twitter for login Yesにチェック

こんな画面。
f:id:ymotongpoo:20091129115421p:image
登録が終わるとConsumer KeyとConsumer Secretが表示されます。これをメモ。
f:id:ymotongpoo:20091129122204p:image
これでアプリケーションの登録は終わり。

Access Token/Access Token Secretの取得

これは完全にtechnoさんのサイトのスクリプトを使わせてもらっています。必要な箇所だけ切り取ったのは下記。

 $ python access_token.py
Get request token: 	[OK]
* Please access to this URL, and allow.
> http://twitter.com/oauth/authorize?oauth_token=oifaK23LKJisdflai77oiaeIKDFlkjsaoilkSDfadf2218LJDSfdiasdslakasjf
* After that, will display 7 digit PIN, input here.
PIN -> 1234567
Get access token:    [OK]
Access Token: 2938401-7NkayHAkf0dlaiEJE8ejsPkIdjfal4UfasdiFJAUkFDUZKFFm
Access Token Secret: rW832jasidjafalKDHcIFKAUaksduFIjaISDFjaisdl
    
Your screen_name is 'ymotongpoo'.

上記のURLにアクセスするとログイン画面が表示され、その後7桁のPINが表示されます。そのPINを入力するとAccess Token/Access Token Secretが取得できます。このAccess TokenとAccess Token SecretはTwitterではpermanentに使えるようなのでこれさえ取得してしまえばもうOKです。(執筆時現在)

POST/DELETEのときはsignatureの作り方に注意

あとはtechnoさんのエントリと自分のソースコード見てもらえばいいんですが、基本的にはヘッダに必要なパラメータを追加してあげればよいだけです。ただparamsの中に渡したいパラメータも一緒に入れてあげないとだめです。そこだけ注意かなー。この部分ね。

def open_api(self, method, url, **additional):
        params = self._init_params()
        for k, v in additional.iteritems():
            params[k] = v

        sig = self._make_signature(params, url, method)
        params['oauth_signature'] = sig

        for k in additional.keys():
            params[k] = ''

        req = urllib2.Request(url)
        for k, v in additional.iteritems():
            req.add_data( '%s=%s' % (k, urllib.quote(v, '')) )
                
        req.add_header('Authorization', self._oauth_header(params))
        return urllib2.urlopen(req)

addtionalってしてるのは、例えばTwitterに発言する際に利用するAPIはstatusというパラメータが必要なわけだけど、それを渡してね、ということ。こんな感じで。

update_url = 'http://twitter.com/statuses/update.json'
tweet_str = u'Hello!'
open_api('POST', update_url, status = tweet_str)

だいたいこんな感じ。また追記することがあったら書こう。

追記1 (2009-11-29)

a2cさんからPit使う際のTipsを教えていただいたので早速コードをちょっと修正しました。コードの最初でAPPNAMEを自分が登録したアプリケーション名に変更してください。

追記2 (2009-12-07)

ブクマみて気づいたけど、UnTweepsっていうサービスがあんのね。

まあ今回は思いついてからはOAuthを使ってみることが主目的だったんで俺としてはOK!!もし「Pythonなんて入れるのやだよー」という人は是非Webサービスを使ってみてください。結構楽ちんです。