2009-08-17
■[python]理屈がわからないのに進んじゃだめっ
ってきれいなお姉さんも言ってたじゃん・・・orz
「プログラミング?ベーマガのリストなら打ち込んだ記憶があるよ」
そんなITとは無縁な職場のアプリユーザーたるおいらが無謀にも「GAEでTwitterのbotを作ろうの会」に行ってまいりました。
勉強会なんて初体験。始まる前は期待と不安と恍惚が(以下略)で眩暈すら覚えてましたが、いざ始まるともう夢中時間突入。あっという間に終わってしまって・・・面白かったです。
会場の確保、課題の準備、当日の講演と指導・・・主催の皆様方には頭が下がります。感謝。
以下はとりあえず課題到達までの備忘録です。ニワトリは3歩歩くと忘れるのよね。そして地獄の釜がゆっくりと開き・・・(嘘
--------
動作環境:
WinowsXP/SP3,Python2.54,GAE1.2.0
simplejsonフォルダとtwython.pyはhellowprldフォルダにコピー済
当日までの状況:
現状:
課題4のGAEへの設置終了。アプリを呼び出して動作確認。
Cronで5分毎に実行中・・・のはず。CronJobはon time Successだし。
実行毎に必ずPostされているのではないみたい。
*別のスクリプト*2に更新したので、いまはもうPostしてませんです。
-------
トラップ1:
- 現象:日本語を含むテキストをTwitterにPostするスクリプトのLocalテスト。TwitterへのPostは成功しても、エラーが出て投稿内容が画面に表示されない
- 原因:デフォルトエンコードを指定していなかった(おいおい) ユニコード文字列とやらを文字列に変換(エンコード?)するとき、指定しないとasciiになっちゃうらしい。asciiは漢字やかなを表示できないので、エラーになってしまう。
- 対応:デフォルトエンコードを指定するスクリプトsitecustomize.pyを書いてpythonをインストールしたフォルダの\Lib\site-packegesに入れておく。すると、Pythonが起動する際に「ユニコード文字列はutf-8でエンコードするのかぁ」と覚えておいてくれるらしい。
# sitecustomize.py import sys sys.setdefaultencoding("utf-8")
トラップ2:
- 現象:Localでうまく行っても、GAEに登録・実行すると下記のエラーが出て投稿内容(res)が画面に表示されない。TwitterへのPostは成功しているようだけど、エラーが出るようじゃcronはできないね。
<type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
- 原因:apiで投稿した内容(res)はasciiじゃ変換できないよって・・・またかぁぁぁ
- 対応:「ユニコード文字列はutf-8でエンコードするの」って書けばいいんじゃね?ということで、sys.stdout = codecs.getwriter('utf-8')(sys.stdout)という呪文を挿入。えぇおいらには呪文ですよ。
最終的に落ち着いたスクリプト
# -*- coding: utf-8 -*- # ライブラリを読み込むよ import twython import sys import codecs # 文字コードはこれからUTF-8で書き出してくださいね sys.stdout = codecs.getwriter('utf-8')(sys.stdout) # twythonライブラリを使ってAPI経由でtwitterにpostするよ api = twython.setup(authtype="Basic",username="***", password="***") res = api.updateStatus("はじめてのbot by <comaz>") # Post内容をブラウザに表示して確認するよ print 'Content-Type: text/plain; charset=utf-8' print '' print res["text"]
--------
NEXT step:
セリフを1行ずつ記入したテキストファイルを読み込んで一定時間ごとにランダムにPostするのをやってみようかと思っちゃってます。
--------
関連URL: http://d.hatena.ne.jp/Mersol/20090817/p1
関連URL: http://d.hatena.ne.jp/kidd-number5/20090816/1250389946
関連URL: http://d.hatena.ne.jp/ka-z-z-z-ya_t/20090815/1250348544
*1:Python2.5とGoogleAppEngineをインスト、Hello,worldを表示するアプリ作成、Localで検証後、GAEのサーバーにUP
*2:5分毎にお代官のセリフをランダムにつぶやく(仮称)悪よのぉBot