twarc — архивация Twitter/X через API v2
twarc — Python-библиотека и инструмент командной строки проекта DocNow для сбора JSON-данных Twitter/X через официальный API. Пакет устанавливает две команды:
twarc2— работа с API v2 (актуальный API X);twarc— старая команда для API v1.1, который X больше не предоставляет.
- Бесплатный доступ к API и программа Academic Research (бесплатный полнотекстовый поиск по всему архиву для исследователей) закрыты в 2023 году.
- На октябрь 2026 года API X работает по модели оплаты за использование: кредиты покупаются заранее, стоимость списывается за каждый полученный объект (например, $0,005 за прочитанный пост), действует потолок в 3 млн прочитанных постов в месяц. Актуальные цены — на странице X API pricing.
- Массовая архивация через API стоит дорого; для отдельных постов чаще достаточно Wayback Machine или браузерной архивации.
Возможности
- Полный JSON — каждый ответ API сохраняется со всеми полями, по умолчанию с метаданными о том, когда и как собраны данные (отключается
--no-metadata). - Обработка лимитов — twarc сам ждёт сброса лимитов API.
- Гидратация — восстановление полных данных по списку ID твитов (
hydrate) и обратная операция (dehydrate). - Плагины — например,
twarc-csv(командаtwarc2 csv) для преобразования в CSV.
Установка
pip install twarc
Версия 2.14.1 требует Python 3.13 или новее.
Настройка
twarc2 configure
Команда интерактивно запрашивает ключи приложения из X Developer Console и сохраняет их в файл конфигурации twarc. Ключ можно передать и через переменную окружения BEARER_TOKEN или параметр --bearer-token.
Команды сверены с исходным кодом (
src/twarc/command2.py) иtwarc2 --helpверсии 2.14.1 (октябрь 2026).
Команды twarc2
# Поиск за последние 7 дней
twarc2 search "climate change" results.jsonl
# Поиск по всему архиву (флаг --archive, нужен соответствующий уровень доступа)
twarc2 search --archive --start-time 2020-01-01 --end-time 2020-12-31 \
"from:example" historical.jsonl
# Ограничить число сохранённых твитов
twarc2 search --limit 10000 "python" python.jsonl
# Недавние твиты пользователя (имя или ID)
twarc2 timeline example_user user-tweets.jsonl
# Один твит по ID или URL
twarc2 tweet 1234567890123456789 tweet.jsonl
# Ветка обсуждения по ID твита
twarc2 conversation 1234567890123456789 thread.jsonl
# Подписчики и подписки
twarc2 followers example_user followers.jsonl
twarc2 following example_user following.jsonl
# Твиты, которые понравились пользователю (нужен ID пользователя)
twarc2 liked-tweets 12345678 likes.jsonl
# Списки
twarc2 lists members 1234567890 members.jsonl
twarc2 lists tweets 1234567890 list-tweets.jsonl
# Поток по правилам фильтрации
twarc2 stream-rules add "lang:ru archive"
twarc2 stream --limit 1000 stream.jsonl
Основные параметры поиска и лент: --start-time, --end-time, --since-id, --until-id, --limit, --max-results (размер страницы ответа), --archive.
Гидратация
# Извлечь ID твитов из набора данных
twarc2 dehydrate tweets.jsonl ids.txt
# Позже восстановить полные данные по файлу с ID (по одному в строке)
twarc2 hydrate ids.txt full-tweets.jsonl
Так обычно распространяют наборы данных о Twitter: публикуют только ID, а пользователи сами гидратируют их через API. Удалённые и скрытые твиты при этом не восстанавливаются.
Плоский формат
Ответы API v2 приходят страницами: твиты в data, связанные пользователи и медиа — в includes. Команда flatten переносит связанные объекты внутрь каждого твита — по одному твиту на строку:
twarc2 flatten results.jsonl flat.jsonl
Python API
from twarc import Twarc2, expansions
t = Twarc2(bearer_token="YOUR_TOKEN")
# search_recent — последние 7 дней; search_all — весь архив (если доступен)
for page in t.search_recent("query", max_results=100):
for tweet in expansions.ensure_flattened(page):
print(tweet["id"], tweet["text"])
Хранение собранных данных
- Храните исходные JSONL-файлы без изменений, сжатые
gzip. - Рядом сохраняйте описание: запрос, диапазон дат, дату сбора, версию twarc.
- Перед публикацией проверьте условия X: Developer Policy разрешает передавать третьим лицам в основном только ID постов и пользователей (не более 1,5 млн ID постов одному получателю за 30 дней без письменного разрешения X).
Если API недоступен
- Wayback Machine — проверить, есть ли сохранённая копия поста. См. Wayback Machine API и waybackpy.
- archive.ph — сохранить и ли найти снимок отдельного поста.
- Auto-Archiver — фиксация отдельных постов со скриншотами и хешами (есть модуль
twitter_api_extractor). - Browsertrix — браузерная копия страницы в WARC/WACZ.
- Выгрузка собственного архива — Как сохранить данные из Twitter (X).
Ресурсы
Связанные материалы
- Mastodon, Bluesky, Threads — открытые альтернативы
- Auto-Archiver — для OSINT
- Wayback Machine API — для архивных твитов
- Социальные сети — обзор
- Data Take-Out: Twitter
- Правовые вопросы
- Ландшафт 2026