Nosy
Output, backup, and read all your iPhone text messages.
Nosy extracts text messages from the native iOS (iPhone, iPad) database stored on your computer after each backup and organizes it into an array of easily explorable messages.
Nosy returns an array of messages with the fields
- receiver
- sender
- message
- imessage (Boolean)
- date (contains a unix timestamp)
which can then be outputted to
- a html file (default)
- a json string
- a json document
- a csv documents
Install
$ gem install nosy
Or add Nosy to your Gemfile and run bundle install
.
From the command line
Nosy can be run from the command line using:
# Find, parse and output to an HTML file
$ nosy
# … to a JSON file
$ nosy json true
# … to a JSON string
$ nosy json false
# … to a CSV file
$ nosy csv
Note: This will only work on a Mac OSX system. Nosy (is nosy, and) will try to grab your iOS message database, parse it, and then export it, but only knows where the files are stored on a Mac system.
Find and Parse
If you are on a Mac OSX system, Nosy (is nosy, and) will try to grab your iOS message database, parse it, and then export it.
all_texts = Nosy.hunt_and_parse
all_texts.each do |text|
text.receiver
text.sender
text.message
text.imessage
text.date
end
If you are on a Mac OSX system, Nosy (is nosy, and) will try to grab your iOS message database and parse it.
all_texts = Nosy.hunt_and_parse
all_texts.each do |text|
text.receiver
text.sender
text.message
text.imessage
text.date
end
Location
The location of the folder storing the iOS message backups in Mac OSX is
$ ~/Library/Application Support/MobileSync/Backup/
Each of the folders will represent an Apple device. Within your desired device's folder, the iOS message database will be the file entitled 3d0d7e5fb2ce288813306e4d4636395e047a3d28
Hunt
If you are on Mac OSX running Nosy.hunt will return a String with the location of the first parseable iOS message database if there is one.
require 'nosy'
new_text_backup_file_location = Nosy.hunt
Parsing
If you pass in an iOS message database, Nosy can detect if a file can be parsed as an iPhone database.
valid = Nosy.can_parse?(iphone_database_location)
Also, Nosy can parse the file and return an array of all available text messages.
all_texts = Nosy.parse(iphone_database_location)
all_texts.each do |text|
text.receiver
text.sender
text.message
text.imessage
text.date
end
Searching
Nosy can search through the texts in your iOS message database. Nosy searching supports any combination of the following keys:
- receiver
- sender
- message
- imessage
- date - supports a Unix timestamp and an optional leading operator [ < , > , <= , >= ]
Note
nosty_texts = Nosy.new(iphone_database_location)
# Array of texts where I am the sender
my_sent_texts = nosty_texts.search(:sender => "me")
# Array of texts where the date is less than 1273175931
before_then_texts = nosty_texts.search(:date => "<1273175931")
# Array of texts where I am the sender and the date is less than 1273175931
before_then_texts = nosty_texts.search(:sender => "me", :date => "<1273175931")`
Outputting
If you provide nosy with an array of texts it will be able to output them to a html file, json string, json file, or csv. The method will return the location of the file.
# All texts to a json file
all_texts = Nosy.hunt_and_parse
Nosy.output(all_texts, "json", true)
# All texts to a json string
Nosy.output(all_texts, "json", false)
# Texts from me to a csv file
nosty_texts = Nosy.new(iphone_database_location)
my_sent_texts = nosty_texts.search(:sender => "me")
Nosy.output(my_sent_texts, "csv")
# Texts from me to a html file
Nosy.output(my_sent_texts, "html")
Contributions
Contributions, improvements, and suggestions more than welcome! Please!
Some Ideas
Currently, Nosy is yet to...
- Properly handle MMS (group and media) messages.
- Let you search for two values in one key.
- Let you hunt for the iOS message database on systems other than Mac OSX.
- Run on Heroku due to its dependency on Sqlite3.
Acknowledgment