Un modo molto semplice per capire cos’è un file di database è pensarlo come una cartella che contiene un mucchio di tabelle simili a Excel. Proprio come i database più grandi o di livello enterprise è possibile connettersi e accedere ai dati nel database in una varietà di modi.
Utilizzo di Python e panda
In questo tutorial, sto usando Python e l’incredibile modulo pandas per connettersi al database, esplorare le tabelle e i dati che contiene e quindi leggere i dati dalle tabelle appropriate.,
Sopra ci colleghiamo al database ed esploriamo quali tabelle ci sono. Ho scoperto che ci sono alcune tabelle nel database tra cui una chiamata message e altri nomi chat, handle e attachment. Esploriamo la tabella dei messaggi perché è quella che sembra più promettente per contenere i nostri iMessage. Lo faccio trasferendo la tabella in un dataframe pandas, un tipo di file che è molto più facile da esplorare e manipolare per i progetti di analisi dei dati.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
Ottenere il testo del messaggio e il numero di telefono
Abbiamo colpito bingo!, La tabella dei messaggi sembra infatti contenere tutti gli iMessage salvati. Ha un campo di testo con l’effettivo messaggio inviato o ricevuto, un campo data (più su quello sotto) e un id handle. Dopo una piccola esplorazione ho scoperto che handle_id è un codice per ogni numero di telefono o id Apple con cui hai avuto una conversazione. Per mappare handle_id all’id Apple, possiamo utilizzare una tabella nel database (opportunamente) denominata handle e join su handle_id.
Aggiunta di un id chat
Allo stesso modo, la tabella dei messaggi include anche un chat_id che associa ogni messaggio alla chat univoca., Questo può essere utile quando si esegue l’analisi su chat con più persone al loro interno. Possiamo ottenere il chat_id di ogni messaggio unendo la tabella dei messaggi con la tabella chat_message_join (di nuovo, con nome appropriato) su message_id.
Ottenere la data
La tabella dei messaggi include anche una colonna data e questo è stato un po ‘ difficile da decodificare poiché non è esattamente in alcun formato ampiamente utilizzato nel settore. Inoltre, il modo in cui questa colonna è registrata è un po ‘ diverso nella versione più recente di Mac OS X rispetto a quelli più vecchi.,
Accredita a questa pagina stackoverflow che mi ha aiutato a capirlo.
Nelle versioni di Mac OS X prima di High Sierra (che è la versione 10.13 e rilasciata a settembre 2017), la colonna data è di tipo epoch ma, a differenza dello standard di conteggio dei secondi da 1970-01-01, conta i secondi da 2001-01-01., Per convertire quel tipo in un campo di dati che possiamo effettivamente comprendere, possiamo usare un comando mentre interroghiamo la tabella dei messaggi per creare un nuovo campo (lo chiameremo date_utc, poiché sta dando una data di fuso orario UTC come risultato) in base al campo data.
In Mac OS X High Sierra e versioni successive, è la stessa cosa, ma il formato della data è ora molto più granulare: è in nano-secondo livello. Quindi ora dobbiamo dividere per 1,000,000,000
prima di applicare lo stesso frammento di codice che abbiamo applicato sopra.,
Mettendo tutto insieme
Puoi trovare il notebook qui con tutto il codice in modo da poter estrarre i tuoi iMessage dal tuo laptop e iniziare ad analizzare!
Dovrebbero essere necessari solo pochi minuti e alla fine dovresti avere una cronologia di base dei tuoi dati iMessage che include il numero di telefono (o e-mail), il testo, una chat unica per ogni gruppo unico di persone con cui hai avuto una chat e il timestamp (nel fuso orario UTC) di ogni messaggio inviato.
Puoi effettivamente trovare più dati nel database come i dettagli se il messaggio è stato consegnato e letto così come gli allegati., Non sto toccando quegli attributi su questo post.