comazのつぶやき日記-love&peace,それはそうとして遊んでいたい- RSSフィード Twitter

2009-08-17

[]理屈がわからないのに進んじゃだめっ

ってきれいなお姉さんも言ってたじゃん・・・orz


 「プログラミング?ベーマガのリストなら打ち込んだ記憶があるよ」

そんなITとは無縁な職場のアプリユーザーたるおいらが無謀にも「GAEでTwitterのbotを作ろうの会」に行ってまいりました。

 勉強会なんて初体験。始まる前は期待と不安と恍惚が(以下略)で眩暈すら覚えてましたが、いざ始まるともう夢中時間突入。あっという間に終わってしまって・・・面白かったです。

会場の確保、課題の準備、当日の講演と指導・・・主催の皆様方には頭が下がります。感謝。

 以下はとりあえず課題到達までの備忘録です。ニワトリは3歩歩くと忘れるのよね。そして地獄の釜がゆっくりと開き・・・(嘘


--------

動作環境:

 WinowsXP/SP3,Python2.54,GAE1.2.0

 simplejsonフォルダとtwython.pyはhellowprldフォルダにコピー済 


当日までの状況:

 言語にPythonを選択して、事前の宿題は準備完了*1

 

現状:

 課題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

kidd-number5kidd-number5 2009/08/17 22:03 tetsunosukeです。お疲れさまでした!
文字コード関連は普段あまり気にしたことがないので、鬼門だったみたいですね。すみません。
ローカルのsite-packageに呪文入れても、確かにGAEでは動きません。なかなか問題ですね。

理屈篇を今度補習でやろうかと思うのですがどうでしょうか。

comaz777comaz777 2009/08/17 23:23 ありがとうございます。
補習、願ったり叶ったりです。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証