こんばんは、ころすけ(@wg_koro)です。
先日、久々にPython使ってコードを書いていた時のこと。
Twitter検索をしようと思ったんですよ。python-twitterを使って。いざ日本語で検索かけようとすると
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position …(以下省略)
※クリックで画像拡大できます
おい。またお前か orz
ローマ字の検索文言ならOK。けど日本語で検索かけようとすると上記のエラー。検索だけでなく、ツイート投稿など、Twitter APIと通信する部分でエラーになる様子。
Python2.x系でこのエラーは鉄板すぎる・・・。
日本語はURLエンコードしよう
結論から言うと、マルチバイト文字列はURLエンコードすればOK。
import twitter
import socket
import urllib
class TwitterSearch:
def __init__(self):
self._lang = ‘ja’
self._api = twitter.Api(
consumer_key = ‘XXXX’,
consumer_secret = ‘XXXXXXX’,
access_token_key = ‘XXXXXXX’,
access_token_secret = ‘XXXXXXX’
)
def search(self, word, page=1):
#search_word = word # NG
search_word = urllib.quote(word.encode(‘utf-8’)) # OK
result = self._api.GetSearch(term=search_word, page=page, lang=self._lang)
for status in result:
print status.text
print ‘-‘ * 30
if __name__ == ‘__main__’:
word = u’ほげ’
t = TwitterSearch()
t.search(word)
[/python]
はいおっけー。
うーん、DjangoなどのメジャーフレームワークがPython3に対応してきたし、そろそろ3系を本格的に使うかなぁ。3系であればUnicodeEncode / Decode Errorとおさらばできそうなんだよね。