• ベストアンサー

pythonとtwitter

今pythonを使ってtwitterと通信させる勉強をしています。 特定のユーザのツイートを読み取り、それをテキストファイル(.txt)に変換して保存をしたいのですが、なかなかうまくいきません。 特定のユーザのツイートをpythonで取ってくることはできている状態です。 どなたかアドバイスまたはヒントを頂けないでしょうか。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

そのように書いてあると > ・Unicode文字列と文字列の違い > 扱いを間違えると、文字化けしたりエラーになったりする だということがはっきりして、解決方法もすぐにわかります。 Unicode文字列をそのままwriteしようとするときに、ascii以外の文字(日本語等)があると、asciiに変換できないためにエラーになります。 対策は、出力する文字コードを明示して、Unicode文字列を的確に変換することです。 次のいずれか一方を使います。 方法1) open ではなく codecs.open を利用して、出力文字コードを指定して開く http://docs.python.jp/2.6/library/codecs.html#codecs.open 方法2) Unicode文字列をencodeメソッドで通常文字列に変換する http://docs.python.jp/2.6/library/stdtypes.html#str.encode この辺りは、Pythonで日本語を扱う際に、避けては通れないところです。 UnicodeEncodeError UnicodeDecodeError あたりをキーワードに検索して、原理を勉強しておいた方がよいです。 ところで、このプログラム for tweet in timeline: でループする度に、 test.txt に上書きしていますので、最後のつぶやきしか残りません。

kabako-20
質問者

お礼

ありがとうございます!codecs.openを利用して、txtファイルにツイートを出力することができました! test.txtを読み込む際に、’w’ではなく’a’で読み込んだら、全てのツイートを出すことができました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

「なかなかうまくいきません」 というのが一番困る質問です。 何がどのように「うまくいかない」のでしょうか? ・エラーになる →その時のメッセージは? ・文字化けする →高機能なテキストエディタや、バイナリエディタ、文字コード判定ツール等で確認すれば、なにかわかるかもしれない ・txtファイルが空 →本当に出力できているのか? ・ファイルそのものが無い →保存場所はどこ? それぞれの現象毎に、対処方法が違います。 また、Python固有の問題として ・Pythonのバージョンは? Ver2.?からVer3.?になったときに、大きく変更されました。 2と3を間違えると、期待通りの動作をしません。 ・Unicode文字列と文字列の違い 扱いを間違えると、文字化けしたりエラーになったりする

kabako-20
質問者

補足

回答ありがとうございます。 そうですよね、ご指摘ありがとうございます! #!/usr/bin/env python #-*- cording: utf-8 -*- import twitter consumer_key = '******' consumer_secret = '******' access_token_key = '******' access_token_secret = '******' api = twitter.Api(consumer_key=consumer_key, consumer_secret=consumer_secret, access_token_key=access_token_key, access_token_secret=access_token_secret) timeline = api.GetUserTimeline('*******') for tweet in timeline: f = open('test.txt', 'w') f.write(tweet.text) f.close test.txtという空のテキストファイルをつくって、これに読み込んだツイートを書き込むようにしたいのですが・・・ これを実行すると、 f.write(tweet.text) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128) とエラーが出てきてしまう状態です・・・。

関連するQ&A