blogSetomits

Welcome to blogSetomits

Twitter API その後

Twitter API を触るために自分用に試しに書いたtwitter.pyですが、その後ついでに Public Timeline や特定の人の Timeline を取得するのもラップしました。使用法などについては上記の URL か、そこからダウンロードできるファイルそのものを見ていただいた方が早いように思います。
また、これを使い、基本的にはケータイのメールを想定していますが、このスクリプトのメールゲートウェイであるtwitter_mailgateway.pyも書いてみて、自分一人で使っています。 /etc/aliases などから起動する感じです。

で、これらを書いてちょっと勉強になったこと。

メールゲートウェイの方では、 tw at matatabi dot homeip dot net で試せますが、メール本文の1行目にアカウント名、2行目にパスワード、入れるなら3行目以降にポストする内容を記して送ります。そこでパスワードを間違ったりすることもあるわけですが、 Twitter API の認証はベーシック認証です。知らなかったのですが、ベーシック認証の場合は 401 で転送されて、クライアント側は再度アクセスするときに認証情報を使います。この際、最初の転送と認証に失敗したときの違いはわからず、 urllib 的にも例外は送出されません。ということで、この twitter.py では urllib.FancyURLopener のサブクラスを作って、その中で転送され回数を数えるようにしました。これまでは継承はほとんど使うことがなかったのですが、この手のを作るときには継承を使うのがまっとうなのかもしれないなと思ったのでした。

また、もうひとつとしてメールゲートウェイの方では、送信するメールの文字コードをどうしたもんだかと悩みました。基本的には受信したメールの文字コードを使ってエンコードしたら良いかなとか、自分が使うものだから ISO-2022-JP で良いかなとも思ったのですが、それもちょっとねえと。で、いくつか調べてみたところ、送られてきたメールが ASCII だけだと get_content_charset() は ASCII になるので、送信するメールは UTF-8 でエンコードすることにしました。 UTF-8 のメールは読めない端末もあるかなとも思ったのですが、3台くらい(アドエス、 au の何か、ソフトバンクの何か)の端末で試してみたところ、無事 UTF-8 のメールが読めました。

ということで、「今さらかよレベル低いな」と思われるかもですがまとめ。
- ウェブアクセスをするスクリプトを書くときは FancyURLopener を継承した方が良さげ。
- 401 は例外にはならない。
- 受信したメールの文字コードは get_content_charset() で。
- 多くのキャリアの端末で UTF-8 のメールが表示できそう。
ということでした。

chardet を使おうかなとも思ったのですが、なるべく他のモジュールに依存したくなかったのと、アカウント名とパスワードだけだと日本語と判断されないかもしれないなとも。で、実際にいくつか試してみたところ、
Posted at 02:06 by setomits
ということで、動機もできたところでkharakawaの主催する「RFC を英語で読んでみる会」に参加しようかな。
Posted at by setomits
Leave your comment