こんばんはー。
Tornadoやばいですね。Tornadoは、Pythonのフレームワークって言うよりWebサーバーなFacebook製の何かです。
概説Tornado読んで、練習のためにWebアプリ1個作ろうかと思ったんですけど Tornadoさんは公式にdemoがいっぱいあるんですよね。まずはそちらを読んでみようと思い、色んなコード読んでます。
その中の、Twitterデモをローカルで動かしてみたんですが、動かん!!という事態が発生したので、書き残しておきます。
Tornadoのtwitterデモ
今回のエントリで使うコードは、このリンクのコードです。
まずはコードを動かすために、Twitterの開発者サイトに適当なアプリ名で登録して、consumer_keyとsecretを持ってきて、callback uriをhttp://127.0.0.1:8888/loginに設定して*1、secrets.cfgに設定書いて、python twitterdemo.py
と、ローカルで動かしてみたんですが、見事に動きませんでした。
原因探しに色々試したんですが、どうやらCookieが正常にセットされてない様子。
Cookieの容量制限
そうです。Cookieの容量制限に引っかかってました。
Cookieの1つ当たりの容量は4kBに制限されています。
このデモプログラムでは、ユーザー情報をAPIで持ってきて、それをそのままJSONに変換してCookieに突っ込んでます。
日本人が書く、マルチバイトの長い文字列のせいで、4kB以上の容量になってしまい、制限に引っかかってしまう人がいるみたいです。僕とか。
こればっかりはブラウザの仕様でどうしようもないので、とりあえず一番長いマルチバイトの文字列を使っていると思われるbioを削除するように書き換えたらちゃんと動きました。
こんな感じのコードのように、1行追加しただけです。これでも動かなかったら動くまで色々消していけば(access_tokenだけは他で使ってるから消しちゃダメ)いいと思います。