Zolaで遊ぶ

tweets.jsをjqコマンドで手っ取り早くcsvにしてみる

tweets.jsをcsvにしたときの個人的なメモ。

プログラマーではないので、ネットの情報から、何となく個人的に目的が「ほぼ達成」した記録。(にわかレベル)

上級プログラマーなら、もっと良い方法はあると思う。

まえがき

2023-07-03に、twitterから公式の全ツイート履歴をダウンロードとzip解凍(展開)をしてみた。

およそ16年間で16100件くらいのつぶやき。(zip圧縮で約186MB、tweets.jsは約23MB。データ量は人によって違う)

以前は「tweet.js」だったらしいが、「tweets.js」になっている。(2023年7月現在、ファイル名でsの有無)

仕様が変更されているので「tweet.js loader - 全ツイート履歴 表示er」などは、すぐに使うことが出来なかった。(2023年7月3日現在)

環境

  • パソコン: X230(Lenovo ThinkPad)
  • OS: Linux Mint 20.3 Una(Xfce)
jq -V
jq --version
jq-1.6

tweets.jsから取り出したいデータ

基本的な「ID番号」「投稿日時」「投稿したつぶやき」の3項目

  • id
  • created_at
  • full_text

tweets.jsをcsvにする流れ

jq インストール(Linux Mint 20.3にjqをインストール)

sudo apt install jq

公式の全ツイート履歴をダウンロードが前提

tweets.js、最初の部分を削除して保存(Xedテキストエディタなど)

window.YTD.tweets.part0 =

jqコマンド

cat tweets.js | jq -r '.[] | map({id: .id, created_at: .created_at, full_text: .full_text})' > base.json

cat base.json | jq -r '.[] | [.id,.created_at,.full_text] | @csv' > base.csv

ここまでで、ひとまずjsonとcsvが生成される。(個人的な目的は達成)

  • jqコマンドで生成された base.json は、[ [{hoge}][{hoge}] ]形式なので、[ {hoge},{hoge} ]形式に置換などで対処するとベター。

追記)続編: tweets.jsの日付をPythonで変換する方法

補足

csvで「上に行を挿入」から項目を付けるなど。(以下は、tab区切り)

id	created_at	full_text

日付のフォーマット

  • 変換するには何かプログラムは必要
  • とりあえず「Sat Jun 24 14:07:01 +0000 2023」でも、2023年6月24日の土曜日 23:07(14+9時間)ごろは脳内変換できる

created_atのフォーマット(tweets.js、少し特殊)

%a %b %d %H:%M:%S %z %Y

変換したい日付のフォーマット

%Y-%m-%d %H:%M

追記)続編: tweets.jsの日付をPythonで変換する方法

現状として

個人的な使い方として、テキストデータなので軽量化はできた。(テキストエディタの検索で「いつごろ」「何をつぶやいた」を知ることができる)

  • およそレベルで、tweets.js:23MBが、2-3MBになった。(json,csv)

tweet.js loaderのcsvデータと違う可能性がある。(全検証をしていないけれど、jqで生成したcsvデータは、つぶやき数が5つ少なかった模様。約16100件に対して)

tweets.jsの日付表示(created_at)が少し特殊で9時間の誤差あり。(何か変換できるプログラムは必要っぽい)

idの桁数が多すぎて、数字扱いにならない?(Libreoffice calc、idをテキストにするなど)

ソートするには何か必要。(自分のデータは並びが不順でした)

課題

  • 日付の変換で、日付順のソート(後日、個人的に解決済み)

  • full_textには、@ユーザー名の「メンション」「リプライ」、「RT」が含まれるので、どうするか?

参考