スナックelve 本店

バツイチ40代女の日記です

全ツイートダウンロードしたあとでDMをエクセルで見れるようにする

f:id:elve:20210709063203p:plain

ネタ元
ascii.jp

どうせならVBAで処理したいと思って
宇宙一わかりやすい?VBA-JSONを使ったJSONパースのしかた - Qiita
この辺読んだがわからず。断念。

ネタ元のコードだとエラーが出る。
インデントがなんか気に食わないらしいので入力し直して、足りないパッケージ入れてもダメ。
dmConversationのmessagesにmessageCreateがあるの前提のコードなので

        {
          "messageCreate" : {
            "reactions" : [ ],
            "urls" : [ ],
            "text" : "はーい!\n楽しみにしてまーす!(o^^o)",
            "mediaUrls" : [ ],
            "senderId" : "XXX",
            "id" : "XXX",
            "createdAt" : "2017-07-07T05:20:26.586Z"
          }
        },
        {
          "participantsLeave" : {    //■■■ここでエラーが出ちゃう■■■
            "userIds" : [
              "XXX"
            ],
            "createdAt" : "2017-07-06T22:17:04.340Z"
          }
        },

ので、回避するようにしただけ。

# -*- coding: utf-8 -*-
# エクセルを立ち上げておいてファイル読み込む
import json
import re
import sys
import io
import codecs
from dateutil.parser import parse
from pytz import timezone

# jasonファイルを開いて読み込む
with codecs.open(r'ダウンロードしたデータのパス\data\direct-messages-group.js', 'r' , 'utf-8', 'ignore') as f:
    data = f.read()
tw = json.loads(data[data.find('['):])

# 書き出すファイルを開く
f = open(r'出力したいパス\direct-messages.tsv', 'wb')

# 見たいデータを出力する
for t in tw:
    for m in t['dmConversation']['messages']:
        try :
            s = m['messageCreate']['text']
            c = parse(m['messageCreate']['createdAt']).astimezone(timezone('Asia/Tokyo')).strftime("%Y-%m-%d %H:%M:%S")
            s = s.replace("\n", " ")
            s = s.replace("\r", " ")
            s = "https://twitter.com/messages/"+t['dmConversation']['conversationId']+"\t"+c+"\t"+s+'\n'
            f.write(s.encode('utf-8'))
        except:
            continue
f.close()

エクセルで見るときはファイル→開く→ファイルの種類を(*.*)に→direct-messages.tsvを開く
f:id:elve:20210709062917p:plain
次へ
f:id:elve:20210709062932p:plain
スペースにチェック入れて完了

検索もソートもガンガンできるぜ!!