tweepyはpython用のtwitter apiを簡単に操作できるモジュールです。ただtweepyはtwitter api 1.1に対応していない為、有志の方が作成されたtweepy2をつかってます。
tweepyのエラーに関して細かい話ですがメモしておきます。
tweepyを経由してtwitter api上でエラーが発生した場合、tweepyからTweepErrorという例外が発動されます。twitterのエラーメッセージをそのまま返す場合もあれば、tweepy独自のエラーメッセージを返される場合もあります。
twitterでエラーが発生すると、理由を説明したテキストと、エラーコードが返ってきます。そのコードを確認すれば、apiの呼び出し制限をオーバーしたのか、アクセストークンが無効なのか、などが分かりますので、エラーの場合は、twitterのエラーコードを取得したいものです。
しかしながら、tweepyのTweepErrorはtwitterのエラーメッセージを全部テキスト化してしまっているようです。
例えば、下記のように適当な日本語文字列を引数に入れて、create_friendshipを呼び出してみますと、フォローできませんのでエラーになります。
try: #フォローする user = api.create_friendship('適当な日本語文字列') except tweepy2.TweepError,e: print e
TweepErrorインスタンスには、reasonとresponseの2つの要素がありまして、上記の場合responseはNoneです。reasonにエラー理由が格納されています。よって、上記コードですと、TweepError例外インスタンスがeに入ってますので、下記のように例外理由を書き出してみます。
print e.reason
すると、下記のようなエラーメッセージが入っていました。しかしなんとこれはテキストでした。
[{u'message': u'Sorry, that page does not exist', u'code': 34}]
よって、上記の連想配列に直接アクセスできません。。
よって、下記のようにしました。
p = re.compile('^[{u'message': u'(.+)', u'code': (d+)}]$') m = p.match(e.reason) if m: message = m.group(1) code = m.group(2)
これで、なんともスマートではありませんが、twitterのエラーメッセージとエラーコードを、上記仕様でそのままtweepyが返す場合は、取得できるようになります。