最近はLINEやFacebookなどのコミュニケーションツールが普及したことで、
メールや電話番号などを知らない人とやりとりしている、
ということは多いのではないでしょうか。

一方で、
特定の人とのやりとりのみ、キャリアメールやSMSを使用せざるを得ない
ということもありえます。

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

これは単純に古くからの知人とのやりとりが
当初キャリアメールやSMSであったこと
そして今も、家族(親)はガラケーユーザであること、
大学の友人は信条的に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などのやりとりの履歴一覧となります。


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


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

textsms、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の履歴を取得する手順について見ていきました。