Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dvamishkilapa/vkarchivedownloader

Утилита для скачивания всех вложений, которые можно получить из архива аккаунта VKontakte
https://github.com/dvamishkilapa/vkarchivedownloader

aiohttp archive asyncio beautifulsoup4 browser bs4 cookie json multithreading parse parser processpoolexecutor python vk vkontakte

Last synced: 28 days ago
JSON representation

Утилита для скачивания всех вложений, которые можно получить из архива аккаунта VKontakte

Awesome Lists containing this project

README

        

# VKArchiveDownloader VKArchiveDownloader icon

Утилита для скачивания данных по ссылкам, которые можно получить из [архива](https://vk.com/faq18145) аккаунта [VKontakte](https://vk.com).

- [VKArchiveDownloader ](#vkarchivedownloader-)
- [1. Описание работы](#1-описание-работы)
- [2. Результат работы](#2-результат-работы)
- [2.1 JSON файл с ссылками](#21-json-файл-с-ссылками)
- [2.2 Папки с данными](#22-папки-с-данными)
- [2.3 Логи работы утилиты](#23-логи-работы-утилиты)
- [3. Использование утилиты](#3-использование-утилиты)
- [3.1 Использование `Сookie` файлов браузера](#31-использование-сookie-файлов-браузера)
- [3.2 Настройка через файл конфигурации `config.ini`](#32-настройка-через-файл-конфигурации-configini)
- [3.3 Запуск утилиты, используя исходный код (рекомендуется)](#33-запуск-утилиты-используя-исходный-код-рекомендуется)
- [3.4 Запуск утилиты, используя собранный `exe` файл для Windows x64](#34-запуск-утилиты-используя-собранный-exe-файл-для-windows-x64)
- [4. Вопросы и ответы](#4-вопросы-и-ответы)
- [4.1 Почему нет поддержки скачивания видео?](#41-почему-нет-поддержки-скачивания-видео)
- [4.2 Почему в папке сообщений или в папке документов начали появляется скачивания по пути `*/text/html` без разрешения файла?](#42-почему-в-папке-сообщений-или-в-папке-документов-начали-появляется-скачивания-по-пути-texthtml-без-разрешения-файла)
- [4.3 Почему в логах начали часто появляется ошибки, связанные с `asyncio.TimeoutError`?](#43-почему-в-логах-начали-часто-появляется-ошибки-связанные-с-asynciotimeouterror)
- [4.4 Почему выдается ошибка, подобная `PermissionError: [Errno 13] Permission denied: '.../Cookies'`?](#44-почему-выдается-ошибка-подобная-permissionerror-errno-13-permission-denied-cookies)
- [4.5 Фактически, доступ к сжатым фото и голосовым сообщениям может получить любой человек, у которого на них есть ссылка?](#45-фактически-доступ-к-сжатым-фото-и-голосовым-сообщениям-может-получить-любой-человек-у-которого-на-них-есть-ссылка)
- [4.6 Как работает скачивание по ссылкам (для любопытных)?](#46-как-работает-скачивание-по-ссылкам-для-любопытных)
- [4.7 Чем опасно отключение проверки SSL сертификата? (флаг `disable_ssl`)](#47-чем-опасно-отключение-проверки-ssl-сертификата-флаг-disable_ssl)
- [5. Тесты производительности](#5-тесты-производительности)

## 1. Описание работы

С помощью данной утилиты возможно скачать данные по ссылкам, которые, так или иначе разбросаны по архиву [VKontakte](https://vk.com).

Информация о поддерживаемых данных, которые можно скачать:
| Тип данных | Поддержка | Сохранение по дате | Примечание | Папка хранения |
| ----------- | :-------: | :----------------: | ---------------------------------------------------------------------------------- | ----------------------- |
| `Сообщения` | ✅ | ✅ | Полная поддержка **[*]**, [кроме видео](#41-почему-нет-поддержки-скачивания-видео) | `./output/messages` |
| `Стена` | ✅ | ✅ | Все фото со стены скачиваются из `photos` (`Фото`) | `./output/photos` |
| `👍->Фото` | ✅ | ❌ | Полная поддержка **[*]** | `./output/likes/photos` |
| `Фото` | ✅ | ✅ | Полная поддержка | `./output/photos` |
| `Файлы` | ✅ | ✅ | Полная поддержка **[*]** | `./output/profile` |
| `Музыка` | ❌ | ❌ | В архиве есть только названия песен, но не ссылки | `-` |

**[*]** - [Если включен доступ к `Сookie` файлам.](#31-использование-сookie-файлов-браузера)

## 2. Результат работы

Результат работы утилиты будет находится в директории `output`.

### 2.1 JSON файл с ссылками

В папке `output`, после работы утилиты, будет находится файл `links_info.json`. Его содержание зависит от того, какие данные были запрошены в архиве.

Пример `links_info.json`, где были запрошены все поддерживаемые типы данных:

```json
{
"messages": {
"id диалога/беседы": {
"name": "Имя диалога/беседы",
"dialog_link": "Ссылка на диалог/беседу",
"Тип данных": ["Ссылки, связные с типом данных"]
}
},
"photos": {
"Имя альбома": {
"Тип данных": ["Ссылки, связные с типом данных"]
}
},
"likes/photo": {
"not_parse": ["Ссылки, связные с типом данных"]
}

}
```

Для каждой папки из архива, в которой происходит поиск, все ссылки отсортированы по типу контента или их поведения.

Возможные типы разделения ссылок:

- Разделение на основе информации о том, на что ссылается ссылка. Информация содержится в заголовке ответного запроса `content-type`, о котором [подробнее можно прочитать тут](https://developer.mozilla.org/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types). Чаще всего, встречаются следующие типы:
- `image/jpeg`: изображения в формате `jpeg`;
- `image/png`: изображения в формате `png`;
- `image/gif`: анимационные изображения в формате `gif`;
- `video/mp4`: видеофайлы в формате `mp4`;
- `audio/ogg`: аудиофайлы в формате `ogg`. Обычно, голосовые сообщения;
- `application/octet-stream`: базовый тип бинарных данных. Может быть чем угодно;
- `application/pdf`: файлы `PDF`;
- `application/msword`: файлы Microsoft Word, а именно, файлы `doc`;
- `application/vnd.openxmlformats`: файлы Microsoft Word, а именно, файлы `docx`;
- `application/zip`: `ZIP` архивы;
- `application/x-rar-compressed`: `RAR` архивы;
- `text/plain`: текстовые файлы `txt`;
- Ссылки, связанные с [VKontakte](https://vk.com):
- `vk_contact`: ссылки на профили людей или сообществ;
- `vk_video`: ссылка на видео;
- `vk_story`: ссылка на истории;
- `vk_club`: ссылки на группы;
- Ссылки, при работе с которыми были получены ошибки:
- `error`: ссылки [VKontakte](https://vk.com), переход по котором приводит к ошибке. Например, ошибке отсутствия файла на серверах;
- `not_parse`: ссылки, парсинг которых был неудачен или пропущен;
- `telegram_contact`: ссылки на профили [мессенджера Telegram](https://telegram.org/);
- `github_link`: ссылки, связанные с [GitHub](https://github.com/);
- `aliexpress_link`: ссылки, связанные с [AliExpress](https://aliexpress.ru/);
- `pastebin_link`: ссылки, связанные с [Pastebin](https://pastebin.com/);
- `gdrive_link`: ссылки, связанные с [Google Drive](https://drive.google.com/);
- `google_link`: ссылки, связанные с [Google.com](https://www.google.com/);
- `wikipedia_link`: ссылки, связанные с [Wikipedia](https://www.wikipedia.org/);
- `🍓`: ссылки, связанные с [PornHub](https://www.pornhub.com/);
- `dns_shop_link`: ссылки, связанные с магазином [DNS](https://www.dns-shop.ru/);
- `habr_link`: ссылки на [Habr](https://habr.com);
- `onedrive_link`: ссылки, связанные с [OneDrive](https://www.microsoft.com/ru-ru/microsoft-365/onedrive/online-cloud-storage?market=ru);
- `youtube_link`: ссылки, связанные с [YouTube](https://www.youtube.com).

### 2.2 Папки с данными

В папке `output`, после работы утилиты, будут находится папки с данными, которые удалось получить.

Возможные папки при условии, если присутствуют исходные данные в архиве, можно просмотреть в [таблице поддерживаемых типов данных](#1-описание-работы).

### 2.3 Логи работы утилиты

В процессе работы утилиты, весь процесс работы логируется и хранится в папке `logs`.

## 3. Использование утилиты

Перед использованием утилиты необходимо запросить [данные архива на официальной странице VKontakte](https://vk.com/data_protection?section=rules&scroll_to_archive=1).

[VKontakte](https://vk.com) дает возможность архивировать разные данные, в зависимости от пожеланий и терпения. Чем больше данных выбрано, тем больше времени будет формироваться архив.
Утилита сможет забрать любые [поддерживаемые данные](#1-описание-работы), которые найдет, вне зависимости от выбора.

![Диалог выбора данных для архивирования](./doc/vk_archive.png)

### 3.1 Использование `Сookie` файлов браузера

Утилита поддерживает использование `Сookie` файлов некоторых браузеров. Это может понадобится для скачивания контента, для которого необходима авторизация на сайте [VKontakte](https://vk.com).

Пример таких данных (сложно перечислить их всех, проще сказать, что все, кроме сжатых фото и голосовых сообщений):

- Бинарные данные (`.doc`, `.docx`, `.pdf`, etc);
- `ZIP` архивы;
- Текстовые файлы (`.txt`, `.ini`, `.py`, etc);
- Фото, которые были отправлены документом, чтобы избежать сжатия;
- etc.

Поддерживается множество популярных браузеров и ОС. Их список можно найти на
[странице используемого для этого модуля `browser_cookie3`](https://github.com/borisbabic/browser_cookie3#testing-dates--ddmmyy).

Для того, что утилита могла использовать такие `Сookie` файлы, достаточно авторизоваться в учетной записи [VKontakte](https://vk.com), для которой был сформирован архив
используя браузер, [который поддерживается со стороны `browser_cookie3`](https://github.com/borisbabic/browser_cookie3#testing-dates--ddmmyy).

> :warning: **`Сookie` файлы аккаунта будут использованы исключительно для доступа к ресурсам [VKontakte](https://vk.com) и не будут переданы на сторонние ресурсы.**

### 3.2 Настройка через файл конфигурации `config.ini`

Работа утилиты может быть настроена в конфигурационном файле `config.ini`.

Доступные параметры:

- `main_parameters` - главные параметры утилиты:
- `use_coockie=True` - использование `Coockie` файлов [VKontakte](https://vk.com) для скачивания документов.

`True` - использовать `Coockie` файлы, `False` - не использовать;

- `semaphore_small=10` - количество одновременных скачиваний файлов малого размера, таких, как фото.

Если скорость сети оставляет желать лучшего, стоить уменьшить данное значение.
10 одновременных скачиваний отлично работает на 150-200 мбит/c;

- `semaphore_big=2` - количество одновременных скачиваний файлов большого размера. Например, документы.

Если скорость сети оставляет желать лучшего, стоить уменьшить данное значение
2 одновременных скачиваний отлично работает на 150-200 мбит/c;

- `core_count=0` - количество потоков для поиска ссылок в архиве.

Если значение равно `0` - автоматическое определение количества используемых потоков;

- `log_level=INFO` - уровень ведения лог-файла.

`INFO` - только сообщения ошибок, предупреждений и информация.
`DEBUG` - сообщения ошибок, предупреждений, информации, а также сообщения отладки (для разработчика);

- `delete_output_folder=False` - нужно ли отчищать содержимое папки результата перед выполнением скрипта.

Удобнее не удалять результаты работы скрипта, если скачивание идет частями.
`True` - отчищать, `False` - оставить нетронутым.

- `save_by_date=False` - нужно ли разделять сохраняемые файлы по подпапкам, на основе даты `d-m-yyyy`.

Для файлов и альбомов - дата загрузки, для сообщений - дата сообщения.
`True` - разделять, `False` - оставить обычную логику сохранения.

- `disable_ssl=False` - отключать ли проверку SSL сертификата. [Подробнее об этом описано в Q&A](#48-чем-опасно-отключение-проверки-ssl-сертификата-флаг-disable_ssl).

Шифрования трафика не будет использоваться, используйте только под вашу ответственность.
Стоит использовать только в безопасной сети и в случаях, когда возникают ошибки вида:
```Cannot connect to host [...] certificate verify failed: self signed certificate in certificate chain```

- `folder_parameters` - параметры папок архива.

Если любой из параметров в этой секции будет закомментирован в конфигурационном файле - парсинг папки будет пропущен.

По умолчанию, используются имена папок, которые встречаются в архиве ВК (проверено в 2024 году):

- `vk_archive_folder=Archive` - имя папки архива VK;

- `messages_folder=messages` - имя папки сообщений из архива.

- `profile_folder=profile` - имя папки профиля (документов аккаунта) из архива.

- `photos_folder=photos` - имя папки фото из архива.

- `likes_folder=likes/photo` - имя папки лайков и папки лайкнутых фото из архива.

### 3.3 Запуск утилиты, используя исходный код (рекомендуется)

Для запуска утилиты из исходного кода в системе должен быть установлен [Python 3.10.5 или выше](https://www.python.org/).

> :warning: **Для установки зависимостей в ОС Windows, [скорее всего, понадобится Microsoft Visual C++ версии 14.0 или выше.](https://stackoverflow.com/questions/40504552/how-to-install-visual-c-build-tools)**

Необходимо скачать или клонировать репозиторий в удобное для работы место. Предварительно стоит убедиться, установлен ли в системе [Git](https://git-scm.com/download/win),
если будет происходить клонирование репозитория, а не скачивание исходного кода с сайта.

Клонирование репозитория:

```bash
git clone https://github.com/DvaMishkiLapa/VKArchiveDownloader.git
```

В клонированную или скачанную директорию необходимо поместить директорию архива [VKontakte](https://vk.com) `Archive`. Сделайте это любым удобным для вас способом.

После клонирования или скачивания репозитория, а также перемещения папки `Archive`, необходимо в директории репозитория развернуть виртуальное окружение `venv`.

Для ОС Windows необходимо открыть CMD, PowerShell или [Windows Terminal](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=fr-ch&gl=ch) в папке репозитория и ввести следующие команды:

```bash
py -m venv .venv
```

```bash
.\.venv\Scripts\activate
```

> :warning: В Windows 10 и выше возможна ошибка, связанная с запретом выполнения скриптов в системе. [Тут хорошая статься с описанием и решением этой проблемы](https://www.itechtics.com/enable-script-execution-powershell/).

Для ОС Linux необходимо в папке репозитория ввести следующие команды:

```bash
python3 -m venv .venv
```

```bash
source ./.venv/bin/activate
```

После разворачивания виртуального окружения необходимо установить зависимости:

```bash
pip install -r requirements.txt
```

После всех шагов необходимо запустить утилиту и ждать ее завершения:

```bash
python main.py
```

### 3.4 Запуск утилиты, используя собранный `exe` файл для Windows x64

> :warning: Для данного способа не требуется установка [Python](https://www.python.org/). Замечено, что **в таком режиме утилита работает, примерно, на 15% медленнее**.

Необходимо [скачать последний собранный релиз `VKArchiveDownloader_win64.zip`](https://github.com/DvaMishkiLapa/VKArchiveDownloader/releases/latest)
и распаковать архив с ним в любую удобную папку.

После этого необходимо поместить директорию архива [VKontakte](https://vk.com) `Archive` в директорию распакованной утилиты. Сделайте это любым удобным для вас способом.

После всех шагов подготовки запустите `VKArchiveDownloader.exe` любым удобным способом.

## 4. Вопросы и ответы

### 4.1 Почему нет поддержки скачивания видео?

Есть несколько причин, по которым это не реализовано:

1. **Странное поведения доступа к ссылке на само видео.** Не ясно почему, но я не всегда могу получить ссылку на исходник видео в максимальном качестве.
2. **Скачивание займет много времени и займет большое пространство на постоянном носителе.** Время - не самый критичный параметр. Но размер самого видео - уже более весомый аргумент, учитывая, что не все видео, в итоге, будут нужны после скачивания.

Как альтернативу данному вопросу, после работы утилиты, в [JSON файле с ссылками](#21-json-файл-с-ссылками) будет отдельная категория `vk_video` со всеми ссылками на видео [VKontakte](https://vk.com).

### 4.2 Почему в папке сообщений или в папке документов начали появляется скачивания по пути `*/text/html` без разрешения файла?

Это не решенная проблема. В папках лежат `html` страницы, которые [VKontakte](https://vk.com) отдает на попытку скачать какой-либо документ.
В этот момент утилита сталкивается с ошибкой [429 Too Many Requests](https://developer.mozilla.org/ru/docs/Web/HTTP/Status/429),
которая появляется, если в день было слишком много попыток скачать документы.
Пока что, решением данной проблемы является время - нужно подождать 1-2 дня.
Проблема появится, если запускать утилиту за один день множество раз, например, с разными настройками.
Стоит помнить о таком поведении [VKontakte](https://vk.com).

Также данная проблема может встретится, если а архиве содержится *безумно* много ссылок на документы в случае, если, например, аккаунт был довольно активным в использовании.
Выходом из такой ситуации может стать разделение скачиваемого контента по дням.
Например, в 1 день в `config.ini` оставить только настройку с сообщениями и запустить утилиту, а в следующий день выбрать другую категорию.

### 4.3 Почему в логах начали часто появляется ошибки, связанные с `asyncio.TimeoutError`?

Для скачивания файлов в утилите заложен таймаут в 15 минут. Если за это время файл не будет скачан, скачивание оборвется с ошибкой `asyncio.TimeoutError` в лог-файле.

Что бы решить данную проблему, стоит уменьшить количество одновременных скачиваний в настройке `semaphore_small` и `semaphore_big` конфигурационного файла `config.ini`.

Для удобства, все ссылки, которые быль обработаны и для них была получена ошибка тайм-аута, будут собраны в отдельную группу данных `timeout_error` в файле `links_info.json`.

### 4.4 Почему выдается ошибка, подобная `PermissionError: [Errno 13] Permission denied: '.../Cookies'`?

Она возникает, если Google Chrome или браузер, основанный на его движке, открыт во время работы скрипта.
Как вариант решения проблемы, можно закрыть браузер перед началом работы скрипта.
После появления строчки в логах `В работе утилиты будут использованы файлы 🍪` браузер можно будет снова открыть.

Ошибка не возникает, если не используются cookie.

Подробнее об этой проблеме и путях ее решения можно прочитать в [соответствующем Issue](https://github.com/borisbabic/browser_cookie3/issues/180#issuecomment-1587691954).

### 4.5 Фактически, доступ к сжатым фото и голосовым сообщениям может получить любой человек, у которого на них есть ссылка?

**Да.** Для доступа к такому контенту не нужны никакие механизмы авторизации. Если ссылка (или [группа ссылок](#21-json-файл-с-ссылками)) попадет к другому человеку,
он без каких либо сложностей сможет получить файл, на который эта ссылка ссылается. Так что осторожнее с этим интересным решением ребят из [VKontakte](https://vk.com).
[Все, что попадает в интернет, остается там на всегда.](https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%A1%D1%82%D1%80%D0%B5%D0%B9%D0%B7%D0%B0%D0%BD%D0%B4)

[Пример такой ссылки, которая была взята из моего случайного диалога.](https://sun9-west.userapi.com/sun9-16/s/v1/if1/kv24aVeTxKf21aJOc6V1YpLgL4KCr7ZA87lPTVG_fjiHJ0qNHh_xHMm42saXvfh3aCSUtMV5.jpg?size=479x480&quality=96&type=album)

### 4.6 Как работает скачивание по ссылкам (для любопытных)?

После нахождения всех ссылок в архиве [VKontakte](https://vk.com), их можно разделить на три основных категории:

1. Ссылки, связанные с [VKontakte](https://vk.com);
2. Ссылки, связанные с серверами [VKontakte](https://vk.com);
3. Ссылки, связанные с другими ресурсами.

Скачивание файлов выполняется только для 1 и 2 категории.

- Ссылки 2 категории - чаще всего, это ссылки, которые сразу можно найти в сообщениях, в архиве.
Это прямые ссылки на файл, которые хранятся в каком-то из серверов [VKontakte](https://vk.com). Выглядят они, примерно, так:

- `https://sun9-**.userapi.com/<ссылка_на_файл>`, где `**` - некоторое число от 1 до 99;
- `https://psv4.userapi.com/<ссылка_на_файл>`.

- Ссылки 1 категории - либо ссылки на какой-либо документ, либо ссылка на фото с предпросмотром в интерфейсе
[VKontakte](https://vk.com) (с лайками, комментариями и так далее).
В этом случае, что бы получить файл, необходимо быть авторизованным на сайте, утилита это делает [через файлы `Сookie` от используемого браузера](#31-использование-сookie-файлов-браузера).
Если такая авторизация присутствует, в `html` коде страницы, на которую вела ссылка, можно найти ссылку [с редиректом на ссылку](https://www.nic.ru/info/blog/redirect/) 2 категории.

### 4.7 Чем опасно отключение проверки SSL сертификата? (флаг `disable_ssl`)

> :warning: Хотя данная опция может помочь в случаях, когда существуют проблемы с сертификатом [VKontakte](https://vk.com), лучше найти причину, по которой скрипт не может с ним работать.

Отключение проверки SSL сертификата представляет собой значительный риск безопасности и может привести к серьёзным последствиям. Вот несколько ключевых аспектов, которые стоит учесть:

1. Подверженность атакам "man-in-the-middle" (MitM): При отключении проверки SSL сертификата, ваше приложение не может убедиться в идентичности сервера, к которому оно подключается. Это дает злоумышленникам возможность перехватывать и модифицировать передаваемые данные, такие как личная информация, учетные данные и финансовая информация;
2. Утечка конфиденциальной информации: Без верификации сертификатов нет гарантий, что соединение защищено от несанкционированного доступа третьих лиц. Это может привести к утечке важной конфиденциальной информации.
3. Риск повреждения данных и атак: В отсутствие защиты SSL/TLS злоумышленники могут не только просматривать, но и изменять данные во время их передачи. Это может привести как к искажению информации, так и к внедрению вредоносного кода в вашу систему.

## 5. Тесты производительности

Здесь приведены тесты производительности выполнения утилиты на разных платформах и с разными конфигурациями.
Все запуски выполнены на максимально возможном количестве потоков, если не указано иное.
| ЦП или SoC | Использование 🍪 | ОС | Общее кол-во 🔗 | ⌛ поиска 🔗 | ⌛ скачивания | Общее ⌛ |
| -------------------------------------------------------------------------------------------------------------------------------------- | :-----------------------------------------------------: | ------------------------------------------------------------------------------------------ | :------------: | :------------: | :-------------: | :-------------: |
| [Core i7-8565U](https://ark.intel.com/content/www/ru/ru/ark/products/149091/intel-core-i78565u-processor-8m-cache-up-to-4-60-ghz.html) | [Google Chrome](https://www.google.com/intl/ru/chrome/) | Windows 11 | 15141 | 2 мин. 1 сек. | 8 мин. 10 сек. | 10 мин. 11 сек. |
| [Core i7-8565U](https://ark.intel.com/content/www/ru/ru/ark/products/149091/intel-core-i78565u-processor-8m-cache-up-to-4-60-ghz.html) | [Vivaldi](https://vivaldi.com/ru/) | Windows 11 + [WSL](https://ru.wikipedia.org/wiki/Windows_Subsystem_for_Linux) Ubuntu 22.04 | 15141 | 35 сек. | 10 мин. 48 сек. | 11 мин. 24 сек. |
| [Core i7-8565U](https://ark.intel.com/content/www/ru/ru/ark/products/149091/intel-core-i78565u-processor-8m-cache-up-to-4-60-ghz.html) | ❌ | Manjaro Linux | 13753 | 25 сек. | 4 мин. 29 сек. | 4 мин. 54 сек. |
| [Snapdragon 855](https://www.devicespecifications.com/ru/model/3bce4fca) | ❌ | Android 12 + [Termux](https://termux.com/) | 13753 | 45 сек. | 6 мин. 38 сек. | 7 мин. 23 сек. |
| [Exynos 4412](https://www.devicespecifications.com/ru/model/1fc3284d) | ❌ | Android 9 + [Linux Deploy](https://github.com/meefik/linuxdeploy) Ubuntu 15.10 | 13753 | 5 мин. 19 сек. | 23 мин. 1 сек. | 28 мин. 20 сек. |
| [OMAP 3430 890MHz](https://en.wikipedia.org/wiki/Nokia_N900) | ❌ | [postmarketOS](https://wiki.postmarketos.org/wiki/Nokia_N900_(nokia-n900)) | 3519 | 12 мин. 8 сек. | 29 мин. 5 сек. | 41 мин. 13 сек. |