A little bit ago I deleted my instagram account (not the app, my actual account). Before doing so I made sure to backup my data thinking that I might want to look back on it in the future. I was right. Recently I wanted to look back through some messages, but it was not easy to read; the json format that Instagram provides was on a single line, and the file was too big for vim to handle. Here is a snippet of what it would look like:
1
|
[{"participants": ["person1", "person2", "person3"], "conversation": [{"sender": "person3", "created_at": "2020-07-12T14:30:19.783799+00:00", "text": "Our very own group chat!"}, {"sender": "person2", "created_at": "2020-07-09T12:05:49.033851+00:00", "text": "Wow this is exciting"}, {"sender": "person1", "created_at": "2020-07-08T06:51:20.897859+00:00", "likes": [{"username": "person2", "date": "2020-07-08T16:38:07.925968+00:00"}], "text": "Hey everyone welcome to the groupchat!"}]}]
|
This is where jq
came in handy.
1
2
3
4
5
6
7
|
cat messages.json | jq --color-output '.[]
| (.conversation
| . as $orig
| length as $len
| [keys[]
| $orig[$len - 1 - .]]) as $new
| .conversation |= $new' | less
|
While not much, we’re already getting somewhere. This formats, colorcodes, and sortes the conversations chronologically.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{
"participants": [
"person1",
"person2",
"person3"
],
"conversation": [
{
"sender": "person1",
"created_at": "2020-07-08T06:51:20.897859+00:00",
"likes": [
{
"username": "person2",
"date": "2020-07-08T16:38:07.925968+00:00"
}
],
"text": "Hey everyone welcome to the groupchat!"
},
{
"sender": "person2",
"created_at": "2020-07-09T12:05:49.033851+00:00",
"text": "Wow this is exciting"
},
{
"sender": "person3",
"created_at": "2020-07-12T14:30:19.783799+00:00",
"text": "Our very own group chat!"
}
]
}
|
Next, if you want to focus in on a single converation you had with a person you can run the following:
1
2
3
4
5
6
7
8
9
10
|
cat messages.json | jq --color-output '.[]
| if .participants == ["person1", "person2", "person3"]
then (.conversation
| . as $orig
| length as $len
| [keys[]
| $orig[$len - 1 - .]]) as $new
| $new | .[] | [.created_at, .sender, .text] | @csv
else empty
end' | less
|
This outputs the conversation as a csv with columns for timestamp, user, and text. You can open the output csv in your favorite csv viewer.
1
2
3
|
"\"2020-07-08T06:51:20.897859+00:00\",\"person1\",\"Hey everyone welcome to the groupchat!\""
"\"2020-07-09T12:05:49.033851+00:00\",\"person2\",\"Wow this is exciting\""
"\"2020-07-12T14:30:19.783799+00:00\",\"person3\",\"Our very own group chat!\""
|
Hope this helps you to rediscover your Instagram dms!