Ви можете приєднати таблицю обробки до таблиці повідомлень.
Однак це лише номер телефону або електронна адреса Apple ID. Це пов’язано з тим, що chat.db не зберігає імена контактів - це підшукується під час повідомлення Messenger.
Ви можете приєднати до бази адресних книг і виконати запит, що з'єднує таблиці з двох баз даних, щоб отримати необхідну інформацію.
Почніть сеанс sqlite3. Відкрийте термінал і запустіть
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>
Визначте, яку базу даних контактів використовувати. Контакти можуть надходити з різних джерел. У моєму випадку всі мої контакти знаходяться на iCloud, тому легко вибрати найбільшу базу даних. Йти до
~/Library/Application Support/AddressBook/Sources
і знайдіть папку з найбільшим розміром або іншим чином перегляньте папку Метадані кожної папки за допомогою QuickLook для пошуку контактів у базі даних.
Знайшовши папку в Джерелах, що містять бажані контакти, знайдіть шлях до бази даних. Клацніть правою кнопкою миші AddressBook-v22.abcddb
в папці з контактами, утримуйте клавішу select та виберіть "Копіювати" AddressBook-v22.abcddb "як Pathname".
У Терміналі в sqlite3 запустіть наступне:
attach "/Users/yourusername/Library/Messages/chat.db" as cdb;
attach "<paste your path>" as adb;
Замініть "yourusername" у першій команді та вставте шлях, який ви скопіювали у другій.
Запустіть цей SQL. Скопіюйте та вставте всі ці рядки в.
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;
Зауважте, що цей SQL містить деякі магічні числа.
substr(handle.id, 4)
припускає, що номери телефонів з Повідомлень починаються з коду країни у форматі плюс, а потім 2 цифри.
substr(replace(…), 2)
передбачає, що номери телефонів у Контакти починаються з 0.
Це стандартний міжнародний формат. Це потрібно буде скоригувати для США.
Ви повинні отримати вихід, що нагадує:
datetimestamp|+441234567890|First Last|Lorem ipsum dolor sit amet