Перейти к основному содержимому

Internet Archive CLI (ia)

Internet Archive CLI (ia) — официальная утилита командной строки от Internet Archive для работы с архивом: загрузка файлов, скачивание, поиск по каталогу, управление метаданными и интеграция с Wayback Machine.

Сайт: archive.org/developers/internetarchive/cli

Зачем нужен архивисту​

Internet Archive — крупнейший публичный веб-архив. Возможности ia:

  • Загрузить WARC на archive.org для публичного доступа через Wayback Machine.
  • Скачать WARC других архивов для локального использования.
  • Метаданные для каталогизации.
  • Поиск по 40+ млн items.
  • Скрипты — Python API + CLI для автоматизации.

Где незаменим:

  • Загрузка в Wayback Machine — ia сам не отправляет в Wayback, но используется в связке с SavePageNow API.
  • Архивирование собственных данных — фильмов, книг, аудио, ПО, веб-страниц.
  • Использование архивов других — скачивание для офлайн-анализа.
  • Программный доступ к 40+ миллионам items.

Возможности​

  • Загрузка файлов на archive.org (upload).
  • Скачивание любых item (download).
  • Поиск по 40+ млн items.
  • Метаданные — чтение и изменение (read/write).
  • Удаление собственных uploads.
  • Список файлов в item.
  • Каталогизация — добавление тегов, описаний.
  • Python API для скриптов.
  • Wayback Machine — интеграция через API (с версии ia 1.0+).
  • Аутентификация через cookies или API keys.
  • Прогресс-бар для больших файлов.
  • Возобновление прерванных загрузок.

Когда использовать​

✅ Подходит для:

  • Загрузки WARC на archive.org для долгосрочного публичного хранения.
  • Скачивания архивов других пользователей (фильмы, аудио, документы).
  • Скриптов автоматизации — регулярные выгрузки.
  • Каталогизации своих коллекций.
  • Интеграции с Wayback Machine.

❌ Не подходит для:

  • Архивации текущих веб-страниц (для этого — SavePageNow API или Browsertrix).
  • Локального архива (для этого — pywb, Browsertrix, Wpull).
  • Массовой загрузки тысяч мелких файлов (лучше через requests/curl с API).

Установка​

Через пакетные менеджеры (рекомендуется)​

# macOS
brew install internetarchive

# Debian/Ubuntu (PPA)
sudo add-apt-repository ppa:internetarchive/ppa
sudo apt update && sudo apt install internetarchive

# Arch
yay -S internetarchive

# Windows (через pip)
pip install internetarchive

Через pip​

pip install internetarchive

Из исходников​

git clone https://github.com/jjjake/internetarchive
cd internetarchive
pip install -e .

Зависимости​

  • Python 3.8+.
  • requests, tqdm, docopt, jsonschema, urllib3, six — основные.
  • yargs (опционально) — для shell completion.

Аутентификация​

Перед использованием нужно настроить ключи:

Получить ключи​

  1. Зарегистрироваться на archive.org.
  2. Перейти в API keys.
  3. Скопировать access и secret.

Настроить​

ia configure

# Интерактивно:
# Email: [email protected]
# Password: ********

Это создаст ~/.ia-файл с ключами.

Или через переменные окружения​

export IA_ACCESS_KEY=your_access_key
export IA_SECRET_KEY=your_secret_key

Или через config-файл​

# ~/.config/ia.ini или ~/.ia
[s3]
access = your_access_key
secret = your_secret_key

Использование​

Поиск​

# Простой поиск
ia search 'subject:"russian web archive"'

# С лимитом
ia search 'collection:webarchive' --num-found 20

# JSON-вывод
ia search 'title:"russia"' --json | jq '.[0:3]'

# Фильтр по типу
ia search 'mediatype:movies AND subject:russia' --num-found 10

Загрузка файла​

# Простая загрузка
ia upload my-archive archive.warc.gz

# С метаданными
ia upload my-archive archive.warc.gz \
--metadata "title:My Archive" \
--metadata "description:Archive of example.com 2024" \
--metadata "subject:web-archive" \
--metadata "creator:Ruarxive" \
--metadata "licenseurl:https://creativecommons.org/publicdomain/zero/1.0/"

# Загрузка нескольких файлов
ia upload my-archive *.warc.gz

# С прогрессом
ia upload my-archive big-archive.warc.gz --no-derive

Скачивание файла​

# Скачать конкретный файл
ia download my-archive archive.warc.gz

# Скачать все файлы item
ia download my-archive

# В конкретную директорию
ia download my-archive --dest-dir ./downloads

# С определённым форматом
ia download my-archive --format "Archive BitTorrent"

Просмотр метаданных​

# Все метаданные
ia metadata my-archive

# В JSON
ia metadata my-archive --json

# Конкретное поле
ia metadata my-archive --field=title

Изменение метаданных​

# Из CSV-файла
ia metadata my-archive --spreadsheet=metadata.csv

# Из JSON
ia metadata my-archive --json-file=metadata.json

# Удалить поле
ia metadata my-archive --remove=subject --remove=tags

Список файлов в item​

ia list my-archive

# С размерами
ia list my-archive --json | jq '.[] | {name, size}'

Удаление​

# Удалить файл из item
ia delete my-archive/archive.warc.gz

# Удалить весь item
ia delete my-archive --all

Создание item​

ia create my-archive \
--metadata "title:My Archive" \
--metadata "description:..." \
--metadata "mediatype:web"

Wayback Machine (через SavePageNow)​

ia имеет команды для работы с Wayback Machine:

# Сохранить страницу в Wayback
ia wayback save https://example.com/article

# Проверить, есть ли страница в Wayback
ia wayback check https://example.com/article

# Получить список всех версий
ia wayback versions https://example.com/article

[!NOTE] Функции ia wayback могут быть ограничены. Для production-архивации используйте Browsertrix или собственный скрипт с SavePageNow API.

Программный API (Python)​

Установка и аутентификация​

from internetarchive import get_item, search_items, upload

# Аутентификация автоматическая из ~/.ia

Поиск​

results = search_items('subject:"russian web archive"')
for item in results:
print(item['identifier'], item.get('title'))

Загрузка​

import internetarchive

item = internetarchive.upload(
'my-archive',
'archive.warc.gz',
metadata={
'title': 'My Archive',
'description': 'Archive of example.com 2024',
'creator': 'Ruarxive',
'subject': ['web-archive', 'russia'],
'licenseurl': 'https://creativecommons.org/publicdomain/zero/1.0/',
},
verbose=True,
)

Скачивание​

item = get_item('my-archive')
item.download(
files=['archive.warc.gz'],
destdir='./downloads',
verbose=True,
)

Метаданные​

item = get_item('my-archive')
print(item.metadata)

# Изменить
item.modify_metadata({
'title': 'Updated Title',
'description': 'Updated description',
})

Batch-скрипт​

import os
from pathlib import Path
from internetarchive import upload

# Загрузить все WARC из директории
warcs = Path('./warcs').glob('*.warc.gz')

for warc in warcs:
identifier = warc.stem # имя без расширения
print(f"Uploading {identifier}...")
upload(
identifier,
str(warc),
metadata={
'title': f'Archive {identifier}',
'mediatype': 'web',
'collection': 'ruarxive',
'creator': 'Ruarxive',
},
verbose=True,
)

Сравнение с другими инструментами​

ИнструментНазначениеUploadDownloadAPIСложность
ia (Internet Archive CLI)Работа с archive.org✅✅✅ PythonНизкая
WgetСкачивание сайтов❌⚠️ HTTP❌Низкая
BrowsertrixКроулинг → WACZ❌❌⚠️Средняя
WARC-processingЧтение WARC❌⚠️✅ PythonСредняя
rcloneСинхронизация с S3✅✅⚠️Низкая

Когда ia лучше всех​

  • Нужно загрузить в archive.org для публичного доступа.
  • Нужен программный доступ к каталогу archive.org.
  • Хочется Python API для интеграций.

Когда лучше rclone​

  • Нужна синхронизация (не одиночные upload/download).
  • Много облачных провайдеров (S3, GCS, Azure).

Когда лучше Browsertrix​

  • Цель — крулинг (создание WARC), а не управление ими.
  • Нужен JS-рендеринг.

Best practices​

1. Всегда добавляйте метаданные при upload​

ia upload my-archive archive.warc.gz \
--metadata "title:..." \
--metadata "description:..." \
--metadata "creator:..." \
--metadata "subject:web-archive;russia" \
--metadata "licenseurl:https://creativecommons.org/publicdomain/zero/1.0/" \
--metadata "date:2024"

Без метаданных item будет невозможно найти через поиск.

2. Используйте mediatype:web для WARC​

--metadata "mediatype:web"

Это правильная категория для WARC-файлов.

3. Группируйте в коллекции​

--metadata "collection:ruarxive"

Создайте свою коллекцию (ruarxive-2024, ruarxive-news, и т.д.).

4. Указывайте лицензию​

--metadata "licenseurl:https://creativecommons.org/publicdomain/zero/1.0/"

Без лицензии использование другими может быть под вопросом.

5. Для больших загрузок — ia или Python API с chunked upload​

upload('my-archive', 'huge-archive.warc.gz', verbose=True)
# Автоматически chunked, с возобновлением

6. Используйте ~/.ia-файл, а не env vars​

# Не нужно каждый раз экспортировать
ia configure

7. Проверяйте загрузку​

ia list my-archive
# Убедитесь, что файл появился и его размер совпадает

Ограничения​

  • Только archive.org — нет поддержки других архивов (SolrWayback, Common Crawl).
  • Лимиты на размер файла — 50 ГБ максимум для одного item (можно обойти через multi-part).
  • Медленная загрузка — 5-10 МБ/с на типичном канале.
  • Wayback Machine — отдельный сервис, не все команды ia его покрывают.
  • Метаданные — есть лимиты на размер и формат.
  • Удаление — не сразу, проходит через review.

Юридические аспекты​

[!WARNING] Загружая WARC на archive.org, вы делаете его публично доступным. Убедитесь, что:

  • У вас есть права на распространение контента.
  • Вы не нарушаете законы о персональных данных, авторском праве, ToS сайтов.
  • Лицензия в метаданных соответствует действительности.

Подробности: Правовые вопросы.

Для общественно-значимого контента (правительственные сайты, новостные архивы, общедоступные данные) — лицензия CC0 или CC-BY подходит.

Ресурсы​

Связанные материалы​