TwitterのAPIをたたくPythonスクリプト

ちょっと必要があって、Pythonで手軽にTwitter APIをたたくためのスクリプトを書いてみた。


http://gist.github.com/475365


あまりコードを書きたくなかったので、YAMLに記述したAPIが利用できるようにしてみようと工夫してみたつもりが、いざやってみるとYAMLの編集するのが思いのほか大変で面倒くさかったです。


YAMLは以下のようになっています。(URLの記述を横着しようとしたせいで汚くなっている部分があります。)

'http://api.twitter.com/1':
  'statuses':
    #   メソッド名     , GET or POST, URL            , 必要な引数      
    - [ 'home_timeline', 'GET'      , 'home_timeline', ''         ]
    - [ 'update'       , 'POST'     , 'update'       , 'status'   ]
    - [ 'tweet'        , 'POST'     , 'update'       , 'status'   ]

update メソッドで http://api.twitter.com/1/statuses/update.json が POST で呼ばれて、結果がJSONで帰って来るという案配です。



ここにあるAPIは大体使えます。
http://apiwiki.twitter.com/Twitter-API-Documentation



使い方とか
OAuthのキー等は事前に準備しておく必要があります。
あまりテストしてませんが、YAMLが間違っていなければきちんと動くはず。

import twitter

def dump_data(result, indent = 0):
    result_list = []
    tab = '    ' * indent
    if isinstance(result, basestring):
        return result
    elif isinstance(result, dict):
        for key in result:
            if isinstance(result[key], dict) or isinstance(result[key], list):
                result_list.append('%s[%s]: %s' % (tab, key, ''))
                result_list.append(dump_data(result[key], indent + 1))
            else:
                result_list.append('%s[%s]: %s' % (tab, key, result[key]))
    elif isinstance(result, list):
        for item in result:
            result_list.append(dump_data(item, indent))
            result_list.append('%s%s' % (tab, '-' * 80))
    return '\n'.join(result_list)



consumer = dict(consumer_key = '', consumer_secret = '')
token    = dict(token = '', token_secret = '')

oauth  = twitter.OAuth(consumer, token)
api    = twitter.TwitterAPI(oauth)

result = api.tweet(status=u'なるほど四時じゃねーの')

print dump_data(result)