Типы данных
Результаты, data для опросов типов data по API, будут возвращать информацию в одном из форматов, описанных ниже.
Результат полезной нагрузки
Атрибуты
Корневая структура данных JSON имеет следующие атрибуты.
| название | тип | описание |
|---|---|---|
data | список объектов данных | Данные получены из источника. |
metadata | объект метаданных | Метаданные, связанные с data . |
Метаданные
Атрибуты
| название | тип | описание |
|---|---|---|
count | инт | Количество объектов в data . |
файл
Тип данных file виден во всем API, так как это ссылка на файл, который можно загрузить из API посредством опроса типа files .
Атрибуты
| название | тип | описание |
|---|---|---|
file_id | нить | Идентификатор, используемый для запроса файла из API. Значение гарантированно будет уникальным только в пределах текущего источника. |
type | строка, всегда file | Спецификатор типа данных. |
name | нить | Имя файла без расширения. |
extension | строка, необязательно | Расширение файла, если доступно. |
mime_type | строка, необязательно | MIME-тип файла, если он доступен. |
size | интервал, необязательный | Размер файла, если он доступен. |
checksum | строка, необязательно | Контрольная сумма md5, если она доступна. |
пример
{
"file_id": "abc123",
"type": "file",
"name": "IMG_0003",
"extension": "jpg",
"mime_type": "image/jpeg",
"size": 2505426,
}
Образ
Расширяет файл .
| название | тип | описание |
|---|---|---|
file_id | нить | Идентификатор, используемый для запроса файла из API. Значение гарантированно будет уникальным только в пределах текущего источника. |
type | нить | Всегда image . |
filename | нить | Оригинальное имя файла. Расширение в этом имени файла должно соответствовать расширению файла. |
file_path | нить | Путь к файлу относительно других файлов в его службе. Например, путь внутри резервной копии. |
width | интервал, необязательный | Ширина файла, если она доступна. |
height | интервал, необязательный | Высота файла, если она доступна. |
пример
{
"file_id": "abc123",
"type": "image",
"filename": "IMG_0003.JPG",
"file_path": "Media/DCIM/100APPLE/IMG_0003.JPG",
"name": "IMG_0003",
"extension": "jpg",
"mime_type": "image/jpeg",
"width": 3000,
"height": 2002,
"size": 2505426,
}
видео
Расширяет файл .
| название | тип | описание |
|---|---|---|
file_id | нить | Идентификатор, используемый для запроса файла из API. Значение гарантированно будет уникальным только в пределах текущего источника. |
type | нить | Всегда video . |
filename | нить | Оригинальное имя файла. Расширение в этом имени файла должно соответствовать расширению файла. |
file_path | нить | Путь к файлу относительно других файлов в его службе. Например, путь внутри резервной копии. |
width | интервал, необязательный | Ширина файла, если она доступна. |
height | интервал, необязательный | Высота файла, если она доступна. |
duration | интервал, необязательный | Продолжительность видео, если доступно. |
пример
{
"file_id": "abc123",
"type": "video",
"filename": "IMG_0009.MOV",
"file_path": "Media/DCIM/100APPLE/IMG_0009.MOV",
"name": "IMG_0009",
"extension": "mov",
"mime_type": "video/quicktime",
"width": 1920,
"height": 1080,
"size": 5421796,
"duration": 9.135623
}
видео
Расширяет файл .
| название | тип | описание |
|---|---|---|
file_id | нить | Идентификатор, используемый для запроса файла из API. Значение гарантированно будет уникальным только в пределах текущего источника. |
type | нить | Всегда audio . |
filename | нить | Оригинальное имя файла. Расширение в этом имени файла должно соответствовать расширению файла. |
file_path | нить | Путь к файлу относительно других файлов в его службе. Например, путь внутри резервной копии. |
transcription | строка, необязательно | Текстовая транскрипция аудиосообщения, если таковая имеется. |
пример
{
"id": "abc123",
"type": "audio",
"filename": "Audio Message.caf",
"file_path": "Library/SMS/Attachments/.../Audio Message.caf",
"transcription": "Test voice message",
}
Аудио транскрипции
Транскрипция аудиосообщений, если она доступна в данных резервной копии, возвращается как часть audio . Это доступно для аудиосообщений, созданных в сообщениях iOS, начиная с iOS 17.
Сообщение
Атрибуты
| название | тип | описание |
|---|---|---|
id | нить | Уникальный идентификатор сообщения. Используйте это для дедупликации возвращаемых данных, если это необходимо. |
data_type | строка, всегда message | Спецификатор типа данных. |
type | строка, необязательно | Используется, когда служба обмена сообщениями обрабатывает различные типы сообщений. Например, SMS и iMessage в случае сообщений iOS. |
handle | нить | Вторая сторона разговора, часто уникальный идентификатор приложения для обмена сообщениями. |
handle_name | строка, необязательно | Если возможно, отображаемое имя дескриптора. |
contact | вложенный контакт, необязательный | Объект, ссылающийся на контакт iOS второй стороны разговора. |
conversation_id | нить | Идентификатор группировки сообщений по разговору. |
from_me | логический | Было ли сообщение отправлено или получено. |
user | строка, необязательно | Пользователь приложения для обмена сообщениями в случае, когда несколько пользователей/учетных записей могут использовать приложение для обмена сообщениями с устройства. |
text | нить | Тело сообщения. |
edits | список правок, по желанию | Список изменений содержимого сообщений для приложений, в которых редактирование сообщений поддерживается, а история сохраняется в резервных копиях. |
translation | объект перевода, необязательный | Данные о переводе, если сообщение было переведено с помощью встроенной функции перевода iOS. |
attachments | список файлов, необязательный | Массив значений file_id , которые можно использовать с методом download_file . Если сообщение не содержит вложения, возвращается пустой массив. |
group | строка, необязательно | Название группы на момент отправки сообщения . |
group_id | строка, необязательно | Уникальный идентификатор группы в контексте этого приложения. Это может быть не целое число, и, если оно присутствует, предоставляет только информацию в дополнение к conversation_id . |
group_handles | список строк, необязательный | Это значение равно null для сообщений от человека к человеку, а в групповых беседах представляет собой массив строк, представляющих номера телефонов или адреса электронной почты iMessage. |
group_contacts | строка, необязательно | Массив объектов, ссылающихся на контакты iOS в группе. |
deleted | логический, необязательный | Логическое значение, указывающее, было ли сообщение удалено. |
marked_unread | логическое значение, необязательно | Пометил ли пользователь сообщение как непрочитанное, если оно доступно. |
date | дата и время | Когда сообщение было отправлено или получено. |
date_read | дата-время, необязательно | Когда сообщение было впервые прочитано, если доступно. |
date_edited | дата/время, необязательно | Когда сообщение редактировалось в последний раз, если применимо. |
date_deleted | дата/время, необязательно | Когда сообщение было удалено, если применимо. |
атрибуты translation
| название | тип | описание |
|---|---|---|
translated_text | нить | Переведённый текст. |
source_language | нить | Исходный языковой код (например, en_US ). |
target_language | нить | Язык, на который было переведено сообщение (например, es_ES ). |
пример
{
"id": "a1b2c3d4",
"data_type": "message",
"type": "SMS",
"handle": "reincubate",
"handle_name": "Reincubate",
"conversation_id": "w6x7y8z9",
"from_me": false,
"text": "Hi from London!",
"edits": [{
"text": "Hi!",
"date": "2023-06-27T10:20:00.000000Z"
}, {
"text": "Hi from London!",
"date": "2023-06-27T10:21:00.000000Z"
}],
"attachments": [],
"group_handles": [
"+441234567890",
"renate@reincubate.com"
],
"deleted": false,
"date": "2023-06-27T10:20:00.000000Z",
"date_edited": "2023-06-27T10:21:00.000000Z"
}
Дескрипторы сообщений и разговоры
Извлекатели данных API поддерживают исторически широкий диапазон исходных данных и будут пытаться перестроить данные, которые со временем стали фрагментированы из-за обновлений приложений и iOS. Поскольку приложения для обмена сообщениями добавляют новые функции, они не всегда заботятся о том, чтобы базовые данные были идеально перенесены в новую структуру. Поэтому API должен выводить определенную информацию, чтобы возвращать согласованные данные.
Один из таких случаев относится к дескрипторам и информации о беседе, возвращаемой из приложений для обмена сообщениями, и, в частности, из модуля данных ios_messages.messages . API заполнит conversation_id либо числовым идентификатором, если такая информация существует или может быть выведена, либо откатом, чтобы использовать дескриптор стороннего поставщика для установки conversation_id . Поэтому рекомендуется использовать это поле для связывания сообщений из одного чата.
Отредактированные и удаленные сообщения
Информация об отредактированных и удаленных сообщениях доступна для ios_messages.messages для резервных копий, сделанных с устройств под управлением iOS 16 и более поздних версий. Ожидается, что информация об удаленных сообщениях будет доступна только тогда, когда сообщение еще можно восстановить на момент создания резервной копии, что, по словам Apple, происходит через 30–40 дней после удаления .
Для отредактированных сообщений история изменений возвращается в атрибуте edits . Каждое редактирование включает состояние text и время, когда редактирование было зафиксировано. text атрибут самого сообщения всегда будет таким же, как и у окончательного редактирования.
Переведённые сообщения
Когда пользователь переводит входящее сообщение с помощью встроенной функции перевода iOS (доступной начиная с iOS 26), данные перевода сохраняются в резервной копии и возвращаются в атрибуте translation . Это включает в себя:
- Переведённый текст
- Исходный язык оригинального сообщения
- Целевой язык, на который было переведено сообщение.
Коды языков соответствуют стандартному формату локали (например, en_US для американского английского, es_ES для испанского).
Обратите внимание, что данные перевода доступны только для сообщений, которые были явно переведены пользователем на устройстве. Исходный текст сообщения всегда возвращается в атрибуте text .
разговор
Поток беседы.
| название | тип | описание |
|---|---|---|
id | нить | Идентификатор элемента. |
data_type | строка, всегда conversation | Идентификатор типа данных элемента. |
group | необязательная строка | Название группы. |
members | список contact | Участники беседы. |
контакт
атрибуты contact
| название | тип | описание |
|---|---|---|
id | нить | Идентификатор элемента. |
data_type | строка, всегда contact | Идентификатор типа данных элемента. |
name | необязательная строка | Полное имя контакта. |
first_name | необязательная строка | Имя контакта. |
middle_name | необязательная строка | Отчество контакта. |
last_name | необязательная строка | Фамилия контакта. |
prefix | необязательная строка | Префикс имени контакта. |
suffix | необязательная строка | Суффикс имени контакта. |
nickname | необязательная строка | Никнейм контакта. |
records | список элементов contact.record | Записи контактов, связанные с контактом. |
organisation | необязательная строка | Название организации контакта. |
department | необязательная строка | Отдел контактного лица в организации. |
jobtitle | необязательная строка | Должность контактного лица в организации. |
birthday | необязательная дата | День рождения контакта. |
атрибут contact.record
Существует 5 типов записей записей контактов: Phone , Email , URL , Social Address и Address . Они соответствуют номеру телефона, адресу электронной почты, URL-адресу веб-сайта, идентификатору учетной записи в социальной сети и почтовому адресу соответственно.
Первые 4 имеют одинаковые атрибуты:
| название | тип | описание |
|---|---|---|
type | нить | Один из: Phone , Email , URL , Social сети . |
name | необязательная строка | Метка, связанная с записью. |
value | нить | Значение записи. |
Тип записи контакта « Address » имеет дополнительные поля адреса:
| название | тип | описание |
|---|---|---|
type | строка, всегда Address | Запись номера телефона. |
name | необязательная строка | Метка, связанная с номером. |
CountryCode | необязательная строка | Код страны. |
Country | необязательная строка | Название страны. |
ZIP | необязательная строка | Почтовый индекс. |
State | необязательная строка | Название штата или аббревиатура. |
City | необязательная строка | Название города. |
Municipality | необязательная строка | Название муниципалитета. |
SubLocality | необязательная строка | Название района или района. |
Street | необязательная строка | Имя адреса улицы. |
Образец данных
{
"id": "2cf6a837304d6614",
"data_type": "contact",
"first_name": "John",
"middle_name": "'Gala'",
"last_name": "Appleseed",
"prefix": "Mr.",
"suffix": "Jr.",
"nickname": "John'o",
"records": [
{
"type": "Phone",
"name": "MAIN",
"value": "1-800-MY-APPLE"
},
{
"type": "Phone",
"name": "UK",
"value": "0800 039 1010"
},
{
"type": "URL",
"name": "HOMEPAGE",
"value": "http://www.apple.com"
},
{
"type": "URL",
"name": "HOMEPAGE",
"value": "http://www.apple.com/uk/"
},
{
"City": "Cupertino",
"State": "CA",
"ZIP": "95014",
"name": "WORK",
"CountryCode": "US",
"Country": "United States",
"Street": "1 Infinite Loop",
"type": "Address",
"SubLocality": null,
"Municipality": null
}
],
"organisation": "Apple Inc.",
"department": "Marketing",
"jobtitle": "VP Juicing",
"birthday": "1976-04-01"
}
Вызов
атрибуты call
| название | тип | описание |
|---|---|---|
id | нить | Идентификатор элемента. |
data_type | строка, всегда call | Идентификатор типа данных элемента. |
call_type | нить | Один из: Phone , FaceTime Video FaceTime Audio . |
address | нить | Второй участник звонка. Это может быть номер телефона, Apple ID или другой идентификатор. В групповых звонках это будет идентификатор, с которого начался звонок. |
participants | необязательный список объектов участников | Для групповых звонков — список всех участников звонка. |
duration | плавать | Продолжительность вызова. |
answered | логический | Был ли ответ на звонок. |
from_me | логический | Был ли звонок исходящим или входящим. |
video | буль | Независимо от того, был ли это видеозвонок или нет. |
date | дата и время | Когда был сделан звонок. |
атрибуты call.participant
| название | тип | описание |
|---|---|---|
handle | нить | Идентификатор, связанный с участником, например, номер телефона, идентификатор WhatsApp, Apple ID и т. д. |
name | необязательная строка | Название связано с рукояткой. |
number | необязательная строка | Номер телефона, связанный с этим именем пользователя. |
answered | буль | Ответил ли участник на звонок или нет. |
Образец данных
{
"id": "24116c5b16b85217",
"data_type": "call",
"call_type": "Phone",
"address": "07123456789",
"participants": [{
"handle": "01234567890",
"number": "01234567890",
"answered": true
}, {
"handle": "09876543210",
"number": "09876543210",
"answered": false
}],
"duration": 5.131359,
"answered": true,
"from_me": true,
"video": false,
"date": "2015-07-20 10:23:27.538011"
}
Событие
атрибуты event
| название | тип | описание |
|---|---|---|
id | нить | Идентификатор элемента. |
data_type | строка, всегда event | Идентификатор типа данных элемента. |
unique_identifier | необязательная строка | UID элемента для дедупликации в нескольких источниках данных о событиях. |
calendar | необязательная строка | Название календаря. |
calendar_uid | необязательная строка | UID календаря. |
calendar_store | необязательная строка | Тип хранилища календаря, т. е. iCloud , по Default . |
summary | необязательная строка | Краткое описание или название события. |
description | необязательная строка | Описание события. |
start_date | необязательная дата и время | Когда событие начнется. |
end_date | необязательная дата и время | Когда событие закончится. |
start_time_zone | необязательная строка | Часовой пояс start_date . |
end_time_zone | необязательная строка | Timeone из end_date . |
all_day | логический | Продлится ли мероприятие целый день. |
travel_time | необязательная продолжительность | Продолжительность события в пути. |
recurrence | необязательный вложенный event.recurrence | Настройки повторения события. |
location | необязательная строка | Где происходит событие. |
start_location | необязательная строка | Откуда начинается событие. |
attendees | необязательный список строк | Имена участников мероприятия. |
attached_url | необязательная строка | URL-адрес, связанный с событием. |
creation_date | необязательная дата и время | Когда событие было создано. Не задано, если запись календаря по умолчанию, например, праздничные дни. |
атрибуты event.recurrence
| название | тип | описание |
|---|---|---|
interval | целое число | Количество repeat для повторения, т.е. 1 Yearly (раз в 1 год). |
repeat | нить | Один из: OneTime , Daily , Weekly , Monthly , Yearly . |
repeat_end_date | необязательная дата и время | Когда перестать повторяться. |
Образец данных
{
"id": "3",
"unique_identifier": "f5fcf872-34f6-3f60-ba03-74d5a7a3bbbb",
"calendar": "Home",
"calendar_id": "477a2001537fe178d6b77cdceb8bac2e",
"calendar_store": "Default",
"summary": "Christmas Day",
"description": "Bank holiday in the UK",
"start_date": "2017-12-25T00:00:00.000000",
"end_date": "2017-12-25T23:59:59.000000",
"start_time_zone": None,
"end_time_zone": None,
"all_day": True,
"travel_time": None,
"recurrence": {
"interval": 1,
"repeat": "Yearly",
"repeat_end_date": None,
"specifier": ""
},
"location": None,
"start_location": None,
"attendees": ["John Appleseed"],
"attached_url": None,
"creation_date": None
}
Запись
{
"title": "Monday meeting:",
"note": "Monday meeting:\n Discuss X,\n discuss Y.",
"summary": null,
"folder": "icloud",
"sub_folder": "work",
"attachments": [
{
"type": "image",
"file_id": "8e22cf6e524357b4eb3da775d193072ebba9543f",
"file_path": "Media/80DDDEAD-B33F-37B2-7219432C0359/Image.jpeg"
}
],
"creation_date": "2016-06-06 13:23:20.000000",
"last_modified": "2016-06-07 15:21:25.000000"
}
Посещение
Запись о посещении веб-сайта.
Атрибуты
| название | тип | описание |
|---|---|---|
data_type | строка, всегда visit | Идентификатор типа данных элемента. |
url | нить | URL посещенной страницы. |
title | нить | Заголовок посещенной страницы. |
date_created | дата и время | Когда визит состоялся. |
{
"data_type": "visit",
"url": "https://reincubate.com/",
"title": "Reincubate: the app data company",
"date_created": "2020-01-01T00:00:00.000000Z"
}
печенье
HTTP-cookie.
Атрибуты
| название | тип | описание |
|---|---|---|
data_type | строка, всегда cookie | Идентификатор типа данных элемента. |
name | нить | Имя файла cookie. |
value | нить | Значение файла cookie. |
domain | нить | Спецификатор домена файла cookie. |
path | нить | Спецификатор пути файла cookie. |
flags | нить | Любые флаги, установленные для файла cookie. |
creation_date | дата и время | Когда файл cookie был создан. |
expiry_date | дата и время | Когда срок действия файла cookie истекает. |
{
"data_type": "cookie",
"name": "sample_cookies",
"value": "sample_value",
"domain": "reincubate.com",
"path": "/",
"flags": "",
"creation_date": "2020-01-01T00:00:00.000000Z",
"expiry_date": "2020-01-01T00:00:00.000000Z"
}
Расположение
Атрибуты данных
| название | тип | описание |
|---|---|---|
data_type | строка, всегда location | Идентификатор типа данных. |
latitude | плавать | Координата широты местоположения. |
longitude | плавать | Координата долготы местоположения. |
altitude | плавать | Координата высоты местоположения. |
horizontal_accuracy | плавать | Горизонтальная точность измерения. |
vertical_accuracy | плавать | Вертикальная точность измерения. |
position_type | нить | Идентификатор используемого метода измерения. |
date_created | дата и время | Когда было произведено измерение. |
Образец данных
{
"data_type": "location",
"latitude": 51.507452392689146,
"longitude": -0.07398372304584414,
"altitude": 0.0,
"horizontal_accuracy": 65.0,
"vertical_accuracy": 0.0,
"positioning_type": "Wifi",
"date_created": "2020-01-01T00:00:00.000000Z"
}
Голосовая почта
Представляет собой голосовое сообщение с устройства.
Атрибуты
| название | тип | описание |
|---|---|---|
rowid | инт | Уникальный идентификатор голосового сообщения в базе данных. |
filename | нить | Название аудиофайла, содержащего голосовое сообщение. |
file_id | нить | Идентификатор, используемый для запроса аудиофайла у API. |
file_path | нить | Путь к файлу голосовой почты относительно резервной копии. |
date | нить | Дата и время получения голосового сообщения (формат ISO 8601). |
token | нить | Статус голосовой почты (например, "Завершено"). |
sender | нить | Номер телефона звонившего, оставившего голосовое сообщение. |
callback_num | нить | Номер телефона для обратного звонка, связанный с голосовой почтой. |
duration | инт | Продолжительность голосового сообщения в секундах. |
expiration | строка, необязательный | Срок действия голосового сообщения (формат ISO 8601). |
trashed_date | строка или целое число | Дата перемещения голосового сообщения в корзину или 0 , если сообщение не было перемещено в корзину. |
flags | инт | Системные флаги, связанные с голосовой почтой. |
sim_slot | строка, необязательный | Идентификатор слота SIM-карты для устройств с несколькими SIM-картами (например, "A-98ACC814-BDB0-51F8-A098-CB63A6A60E9F"). Для устройств с одной SIM-картой — null , или используется слот SIM-карты по умолчанию. |
пример
{
"rowid": 50,
"filename": "50.amr",
"file_id": "4ff0327d0148e7fa175a12f5a25ed7148a29de6d",
"file_path": "Library/Voicemail/50.amr",
"date": "2024-01-15 14:30:00.000000",
"token": "Complete",
"sender": "+123456789",
"callback_num": "+123456789",
"duration": 45,
"expiration": "2024-02-14 14:30:00.000000",
"trashed_date": 0,
"flags": 3,
"sim_slot": null
}
Пример (устройство с несколькими SIM-картами)
{
"rowid": 28,
"filename": "28.amr",
"file_id": "a1b2c3d4e5f6...",
"file_path": "Library/Voicemail/A-98ACC814-BDB0-51F8-A098-CB63A6A60E9F/28.amr",
"date": "2024-01-15 14:30:00.000000",
"token": "Complete",
"sender": "+123456789",
"callback_num": "+123456789",
"duration": 30,
"expiration": "2024-02-14 14:30:00.000000",
"trashed_date": 0,
"flags": 3,
"sim_slot": "A-98ACC814-BDB0-51F8-A098-CB63A6A60E9F"
}