Usted puede unirse a la manija de la tabla a la tabla de mensajes.
select date, id, text
from message
left join handle
on message.handle_id = handle.ROWID
Sin embargo, esto sólo proporciona el número de teléfono o ID de Apple dirección de correo electrónico. Esto es debido a que el chat.db no almacena los nombres de los contactos - este es busqué en la marcha por los Mensajes.
Puede adjuntar la libreta de direcciones de la base de datos y realizar una consulta de unirse a las mesas de las dos bases de datos para obtener la información que necesita.
-
Iniciar un sqlite3 sesión. Abrir Terminal y ejecutar
sqlite3
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
-
Determinar que los Contactos de la base de datos a utilizar. 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 más grande base de datos. Ir a
~/Library/Application Support/AddressBook/Sources
y buscar la carpeta con el tamaño más grande, o de lo contrario se echar un vistazo a través de cada una de las carpetas de la carpeta de Metadatos utilizando QuickLook a encontrar contactos dentro de la base de datos.
Una vez que usted haya encontrado la carpeta de Fuentes que contiene los contactos que desea, obtener la ruta de acceso a la base de datos. Haga clic derecho en AddressBook-v22.abcddb
dentro de la carpeta con tus contactos, mantenga ⌥ y seleccione " Copiar "de la libreta de direcciones-v22.abcddb" como nombre de Ruta'.
-
En la Terminal dentro de sqlite3, ejecute el siguiente:
attach "/Users/yourusername/Library/Messages/chat.db" as cdb;
attach "<paste your path>" as adb;
Reemplazar 'nombredeusuario' en el primer comando y pegar la ruta que has copiado en el segundo.
-
Ejecutar SQL. Copiar y pegar todas estas líneas.
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 de magia.
-
substr(handle.id, 4)
presume de números de teléfono de los Mensajes comienzan con un código de país en el formato de un plus seguido de 2 dígitos.
-
substr(replace(…), 2)
presume de números de teléfono de los Contactos comienzan con un 0.
Este es el estándar de formato internacional. Esto tendrá que ser ajustado para Estados Unidos.
-
Usted debe obtener un resultado parecido:
datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet