仕事でちょっとした作業をやりたいときにそれをPythonで書くことがある。もっと本格的に業務でPythonを使いたいのだがまだまだ布教が足りないようである(どう考えても新人が発する台詞ではない)。布教のためにはPythonで何かできるかを自分で示してその威力を感じてもらうほかないと思い、その試みの第一弾としてTwitterを題材に遊んでみることにする。
まず、ここを参照して自分の全ツイートを取得する。APIを使うのが自然かもしれないが気軽にやりたいので差し当たりこれでよい。ツイートの情報はcsvファイルかjsonファイルで取り扱うことが出来る。最初はPythonの標準ライブラリを用いてcsvを読み込もうとしたが文字エンコードに阻まれて断念した。仕方ないのでjsonファイルで取り扱うことにした。Twitterから手に入れたデータのREADME.txtには
とあるので削除してみたが上手くいかない。ファイルの先頭を削除する必要があるのはすぐわかったが、末尾を取り除く必要が無いのではないのか。
そして読み込んだjsonファイルからツイート本文だけを抜き出して別のファイルに書き込む。エンコードの関係で訳がわからないエラー(UnicodeEncodeError)が発生する。奇妙なテキストは必要ないので例外処理で切り抜けた。
以下は上記作業のPythonスクリプトである。
import os import json from collections import deque os.chdir('path/to/jsonfile') # 拡張子を除いたファイル名のリストの生成 # Twitterからのjsonファイルは.jsなので加工したものは.jsonとすることにした file_names = sorted(set([filename.strip('.json') for dirpath, dirnames, filenames in os.walk('.') for filename in filenames])) # オリジナルのjsonファイルから先頭行を削除する # 先頭・末尾を削除すると聞かされたのでdequeを用いているがもっと単純に書けると思う for file_name in file_names: with open(file_name+'.js', 'r') as in_f, open(file_name+'.json', 'w') as out_f: tmp = deque(in_f.readlines()) tmp.popleft() for line in tmp: out_f.write(line) # jsonファイルからツイート本文を抜き出す。 # 各ツイートはPythonの辞書データとなるので簡単に取り出せる。 # 差し当たり、@replyは無視するようにしてある。 # UnicodeEncodeErrorは無視している for file_name in file_names: with open(file_name +'.json') as in_f, open('path/to/ret.txt', 'a') as out_f: data = json.loads("".join(in_f.readlines())) for d in data: try: if '@' not in d['text']: #print(d['text']) out_f.write(d['text']+'\n') except UnicodeEncodeError: pass
次回(があれば)、取得したツイート本文を用いて遊んでみたい。