Puoi unire la tabella degli handle alla tabella dei messaggi.
select date, id, text
from message
left join handle
on message.handle_id = handle.ROWID
Tuttavia,questoforniscesoloilnumeroditelefonool'indirizzoemaildell'IDApple.Ciòèdovutoalfattochechat.dbnonmemorizzainomideicontatti:questovienecercatoalvolodaMessaggi.
Puoiallegareildatabasedellarubricaedeseguireunaqueryunendoletabelledeiduedatabaseperottenereleinformazioninecessarie.
Avviaunasessionesqlite3.ApriTerminaleedesegui
sqlite3
SQLiteversion3.19.32017-06-2716:48:08Enter".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
-
Determina quale database dei contatti utilizzare. I contatti possono provenire da più fonti. Nel mio caso, tutti i miei contatti sono su iCloud, quindi è facile scegliere il database più grande. Vai a
~/Library/Application Support/AddressBook/Sources
e trova la cartella con la dimensione più grande, o altrimenti guarda attraverso la cartella Metadata di ogni cartella usando QuickLook per trovare i contatti all'interno del database.
UnavoltatrovatalacartellainSorgenticontenentiicontattichedesideri,ottieniilpercorsodeldatabase.FaiclicdestrosuAddressBook-v22.abcddb
all'internodellacartellaconituoicontatti,tienipremuto⌥eseleziona"Copia" AddressBook-v22.abcddb "come Pathname".
-
In Terminale in sqlite3, esegui quanto segue:
attach "/Users/yourusername/Library/Messages/chat.db" as cdb;
attach "<paste your path>" as adb;
Sostituisci "nomeutente" nel primo comando e incolla il percorso che hai copiato nel secondo.
-
Esegui questo SQL. Copia e incolla tutte queste righe in.
select date, id, ZFIRSTNAME || ' ' || ZLASTNAME, text
from cdb.message
left join cdb.handle
on message.handle_id = handle.ROWID
left join adb.ZABCDPHONENUMBER
on replace(substr(handle.id, 4), ' ', '')
like '%' || substr(replace(ZABCDPHONENUMBER.ZFULLNUMBER, ' ', ''), 2)
left join adb.ZABCDRECORD
on ZABCDPHONENUMBER.ZOWNER = ZABCDRECORD.Z_PK;
Si noti che questo SQL contiene alcuni numeri magici.
-
substr(handle.id, 4)
presume i numeri di telefono da Messaggi iniziano con un codice paese nel formato di un segno più seguito da 2 cifre.
-
substr(replace(…), 2)
presuppone che i numeri di telefono da Contatti inizi con uno 0.
Questo è il formato internazionale standard. Questo dovrà essere modificato per gli Stati Uniti.
-
Dovresti ottenere un risultato simile a:
datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet