電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

Twitterのエクスポートの変換

概要

  • Twitterの文章をエクスポートして、これをPythonで変換してBearに入れて検索できるようにした

詳細

  • 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('&gt;','<') 
    body = body.replace('&lt;','>')
    body = body.replace('&amp;','&')
    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