Puedes unir la tabla de manejadores a la tabla de mensajes.
select date, id, text
from message
left join handle
on message.handle_id = handle.ROWID
Sinembargo,estosoloproporcionaelnúmerodeteléfonooladireccióndecorreoelectrónicodeIDdeApple.Estosedebeaquechat.dbnoalmacenalosnombresdeloscontactos,losmensajeslobuscanalinstante
Puedeadjuntarlabasededatosdelalibretadedireccionesyrealizarunaconsultauniendotablasdelasdosbasesdedatosparaobtenerlainformaciónquenecesita.
Iniciaunasesiónsqlite3.AbrelaTerminalycorre
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 qué base de datos de Contactos usar. Los contactos pueden provenir de múltiples fuentes. En mi caso, todos mis contactos están en iCloud, por lo que es fácil elegir la base de datos más grande. Ir a
~/Library/Application Support/AddressBook/Sources
y busque la carpeta con el tamaño más grande, o busque en la carpeta de Metadatos de cada carpeta usando QuickLook para encontrar contactos dentro de la base de datos.
UnavezquehayaencontradolacarpetaenFuentesquecontienenloscontactosquedesea,obtengalarutaalabasededatos.HazclicderechoenAddressBook-v22.abcddb
dentrodelacarpetacontuscontactos,manténpresionadoyselecciona"Copiar" AddressBook-v22.abcddb "como Pathname’.
-
En la Terminal dentro de sqlite3, ejecute lo siguiente:
attach "/Users/yourusername/Library/Messages/chat.db" as cdb;
attach "<paste your path>" as adb;
Reemplace ‘su nombre de usuario’ en el primer comando y pegue la ruta que copió en el segundo.
-
Ejecuta este SQL. Copia y pega todas estas líneas en.
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;
Tenga en cuenta que este SQL contiene algunos números mágicos.
-
substr(handle.id, 4)
supone que los números de teléfono de los mensajes comienzan con un código de país en el formato de un signo más seguido de 2 dígitos.
-
substr(replace(…), 2)
supone que los números de teléfono de los Contactos comienzan con un 0.
Este es el formato internacional estándar. Esto tendrá que ser ajustado para EE. UU.
-
Deberías obtener una salida que se parezca a:
datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet