一方で、
特定の人とのやりとりのみ、キャリアメールやSMSを使用せざるを得ない
という現象が世の中には存在します。


たとえば私の場合、
家族との連絡はキャリアメール、
大学の友人との連絡はSMS、
となります。


これは単純に古くからの知人とのやりとりが
当初キャリアメールやSMSであったこと
そして今も、家族(親)はガラケーユーザであること、
大学の友人は信条的にSNSをやっていない
という理由からやりとりの手段が更新されていないためとなります。


しかし、こうは言えないでしょうか。
彼らとのやりとりがプリミティブなインタフェースであるがゆえに、
現代では当たり前のソーシャル機能に疑問を投げかけてくれていると。
そしてそこで記録されるログは機能にかざられない本来の自分であると。


そんなことは得てしてどうでもよく、
今日も私は家族や友人に、
どうやってスマホとSNSをやってもらおうか悩む日々です。


というわけでして、今回はSMSの履歴を取得する方法について書いていきます。

SMSのメール履歴データですが、
iphoneを利用しておりMacの場合、下記のフォルダにバックアップされております。


ライブラリ > Application Support > Mobile Sync > Backup


上記のフォルダの中に下記の名前のファイルがSMSの履歴に該当するデータとなりますので
任意の場所にコピーしておきます。


上記データはSQliteで操作することができます。
わかりやすいように「message_db」とリネームしておくことにします。
Macの場合はデフォルトでインストールされております。

ターミナルでmessage_dbファイルをおいた場所に移動し、
下記のコマンドでsqliteでの操作を開始します。


まずは、テーブルを確認しておきましょう。


すると下記のようなテーブル一覧があるかと思います。

_SqliteDatabaseProperties
attachment
chat
chat_handle_join
chat_message_join
handle
message
message_attachment_join

上記テーブルのなかで、
messageがSMSなどのやりとりの履歴一覧となります。

テーブルの項目は下記で確認できます。


この中で必要なデータは下記かと思います。

text sms、imessageの本文
handle_id やりとりしている相手のid

sms2


各handle_idがどの相手かはhandleテーブルに格納されております。

sms_handle


上記から抽出したい相手のhandle_idを確認します。


例えば、「09012345678」という電話番号の方(handle_idが45とする)とのやりとりを抽出したいときは、
下記のようなsqlで取得できます。

あるいは、もはやhandle_idを介さずテーブルをjoinして、
下記のようにしても良いかと思います。
※データが国際電話番号表記(+81)のため、
 念のためlikeでhandleの中のid(電話番号)を指定。


このファイルをcsvで書き出す場合は下記のコマンド後に
任意のsqlを記述することで可能です。


得られたcsvファイルはpythonやexcelなどで編集できます。
※文字化けする場合は適宜ファイルのエンコードを指定してください。

sms_log


以上、今回はsmsの履歴を取得する手順について見ていきました。