pythonでtwitterbotを作成しています。

日本語の投稿時にエラーが出て困っています。
内容としては

$ python test.py
Traceback (most recent call last):
File "test.py", line 26, in <module>
api.update_status(text.decode('utf-8'))
File "/twitterbot/tweepy/binder.py", line 76, in _call
url = '%s?%s' % (api.api_root + path, urllib.urlencode(parameters))
File "/usr/lib/python2.6/urllib.py", line 1267, in urlencode
v = quote_plus(str(v))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-33: ordinal not in range(128)
となっています。ソースと読み込んでいるファイルはUTF-8にするなどしたのですが、もしエラー内容解決できる知恵をお持ちの方いましたら助けていただけると助かります。

ソースコード抜粋
import random
import tweepy
import codecs

data_path = 'data/comment.txt'
all = open(data_path).read()
records = all.split("\n")
text = random.choice(records)

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
api.update_status(text.decode('utf-8'))

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2010/10/15 12:26:42
  • 終了:2010/10/15 23:00:58

ベストアンサー

id:Lhankor_Mhy No.2

Lhankor_Mhy回答回数775ベストアンサー獲得回数2302010/10/15 15:08:06

ポイント23pt

PythonでURIエンコードするには - HM python - pythonグループ

http://python.g.hatena.ne.jp/mhrs/20060609/p1

↑こちらの記述を参考に考えますと、textがutf-8であるなら、

api.update_status(text.decode('utf-8')) 

の部分を

api.update_status(text)

と、変えると動く予感がするのですが、どうでしょうか。

その他の回答(3件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982010/10/15 13:17:49

ポイント23pt

http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

こちらは 参考になりますでしょうか?

id:Lhankor_Mhy No.2

Lhankor_Mhy回答回数775ベストアンサー獲得回数2302010/10/15 15:08:06ここでベストアンサー

ポイント23pt

PythonでURIエンコードするには - HM python - pythonグループ

http://python.g.hatena.ne.jp/mhrs/20060609/p1

↑こちらの記述を参考に考えますと、textがutf-8であるなら、

api.update_status(text.decode('utf-8')) 

の部分を

api.update_status(text)

と、変えると動く予感がするのですが、どうでしょうか。

id:showyou No.3

showyou回答回数96ベストアンサー獲得回数102010/10/15 19:00:33

ポイント22pt

http://github.com/showyou/hama_db/blob/master/generator/quickGen...

手元のソースをちょっといじってtweepyで送信してみたのですが、utf-8でもunicodeでも普通に送信できそうです。



それよりむしろ

text = random.choice(records)

こっちが気になります。recordsって要素数1の配列になっていませんか?

pythonのrandom.choiceを文字列に対して使うとき、例えば

random.choice((u"あいうえお"))

なんてやると、予想としてはu("あいうえお")が取り出されると思いますが、実際はそのうちの1文字が取り出されてしまいます。

id:taos No.4

taos回答回数2ベストアンサー獲得回数02010/10/15 19:20:37

ポイント22pt

これはurllib.py内部で発生しているため、外部からは回避が難しいです。

sitecustomize.pyが編集できる場合は、

sys.setdefaultencoding('utf-8')

※sitecustomize.pyについては

http://d.hatena.ne.jp/SumiTomohiko/20070120/1169300624

を参照してください。

そうでない場合は事前に、

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

とした上で、api.update_statusを実行してみてください。

きっと解決できると思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません