- Загрузка видео (MP4) и фото-каруселей по публичной ссылке на пост
- Парсинг метаданных через JSON-блоки в
<script>тегах страницы - Нормализация URL: обработка
\/,\uXXXXи percent-encoding - Ротация User-Agent, поддержка прокси и cookies
- Повторные попытки с джиттером и управление таймаутами
- Python-биндинги через
pyo3/maturin
# Скачать пост по ссылке
cargo run --release -- https://www.threads.net/@username/post/ABC123
# Указать корневую папку для сохранения
cargo run --release -- https://www.threads.net/@username/post/ABC123 --output-root ./downloadsАргументы CLI:
| Аргумент | Описание |
|---|---|
url |
Ссылка на пост Threads |
--output |
Путь для сохранения конкретного файла |
--output-root |
Корневая папка для сохранения ассетов |
--config |
Путь к файлу конфигурации |
--skip-check |
Пропустить проверку URL перед загрузкой |
use trsave_core::{execute_download, DownloadRequest};
let request = DownloadRequest {
url: "https://www.threads.net/@username/post/ABC123".to_string(),
output: None,
skip_check: false,
output_root: None,
config_path: None,
runtime_config: None,
max_size_mb: None,
};
let outcome = execute_download(request).await?;
println!("Скачано: {:?}", outcome.assets);from trsave_core import download_as_files, download_as_binary
# Скачать в файлы на диск
files = download_as_files(url="https://www.threads.net/@username/post/ABC123")
# Скачать в память (binary)
binary = download_as_binary(url="https://www.threads.net/@username/post/ABC123")
for asset in binary.assets:
print(asset.filename, len(asset.content))Создайте файл threads_config.json:
{
"cookies": {
"sessionid": "your_session_id"
},
"proxies": [],
"max_retries": 3,
"retry_backoff": 1.25,
"request_timeout": 15.0,
"accept_language": "ru-RU,ru;q=0.9"
}Или используйте переменные окружения:
| Переменная | Описание |
|---|---|
THREADS_CONFIG_PATH |
Путь к файлу конфигурации |
TRSAVE_COOKIES_JSON |
Cookies в виде JSON-строки |
TRSAVE_COOKIE |
Cookies в формате key=value;key2=value2 |
TRSAVE_PROXIES |
Список прокси через запятую |
TRSAVE_MAX_RETRIES |
Максимальное количество повторных попыток |
TRSAVE_RETRY_BACKOFF |
Задержка между повторами (секунды) |
TRSAVE_REQUEST_TIMEOUT |
Таймаут запроса (секунды) |
TRSAVE_ACCEPT_LANGUAGE |
Значение заголовка Accept-Language |
MIT — см. LICENSE.