概要
詳細
- Twitterの自分の書き込みも日記がわりなので、前のはてなブログに続いて、Bearで検索出来るようにしてみる
- Twitterのデータをダウンロードするには、Web版の画面で、設定/アカウント/Twitterデータ/Twitterデータをダウンロード で出来る。
- ダウンロードした中身のREADME.txtに書いてあるが余計なデータが多い。自分のツイートのファイルは「tweet.js」で、JSONの形式。昔はCSVの出力もあったと思うが...
- 普通にJSONで読み込もうと思ったが、ざっと見てみるとTEXT として処理しても同じ感じなので次のようにしてみた。引数に年を入れてその年の分だけを出力する。何かの参考になれば幸い。
- 時間はUTCで統一されているのでJSTに直した。ここは意外に面倒な処理で、pytzモジュールを使った。
- '>'などの変換はこれだけでいいのか不明だが、とりあえず分かるのだけやってある。
import sys
import re
from datetime import datetime
from pytz import timezone
# set year, default 2019
if len(sys.argv) != 2:
year = '2019'
else:
year = sys.argv[1]
# read lines
f = open("tweet.js","r")
lines = f.readlines()
f.close()
# main loop
for line in lines:
line = line.strip()
if line[:15] == '"created_at" : ':
dtStr = line[16:46]
dtUtc= datetime.strptime(dtStr, "%a %b %d %H:%M:%S %z %Y") # UTC Time
dtJp = dtUtc.astimezone(timezone('Asia/Tokyo')) # UTC -> JST
if line[:15] == '"full_text" : "':
body = re.sub('"full_text" : "(.*?)",','\\1',line)
body = body.replace('\"','"')
body = body.replace('>','<')
body = body.replace('<','>')
body = body.replace('&','&')
body = body.replace('\n"',' ')
# body = body.replace('#','# ') # delete hash tag for Bear
if str(dtJp.year) == year:
print(dtJp.strftime("%Y%m%d %H:%M")+" : " + body)
- 出力は次のように 日付 時間 : 本文。これは個人的な好み。
20181222 07:40 : 今日、冬至だ
20181221 08:52 : 「飲茶を食べに行く」って言いかたを聞くとモヤっとする
- tweet.jsの中身がなぜか時間順にはなっていない(なぜ???)。一旦、標準出力に出してからソートして使った。最新が先なのが好みなので、sort -r している。
- 2007年から2020年まで一気にテキストにするには次のような感じ
for year in $(seq 2007 2020); do python tweet_pp.py $year | sort -r > tweet$year.txt; done