saveapi.org

API для скачивания YouTube

Это единственная платформа с двумя шагами, и причина честная: у остальных источников варианты качества уже существуют, и отдать все ссылки нам ничего не стоит. Вариант YouTube не существует, пока его не соберут — видео и аудио идут отдельными потоками и их надо смуксовать, — поэтому восемь готовых ссылок были бы обещанием, которое мы не сдержим. Вместо этого info сообщает точный вес каждого варианта, а create собирает выбранный и возвращает подписанную ссылку со сроком. Ссылка ведёт к нам, потому что YouTube подписывает свои медиа-URL под IP запросившего: на вашем сервере они отвечают 403.

видеоаудиоGET /v1/youtube/info2 кредита

Какие ссылки принимаем

Любая ссылка на публичный пост с этих хостов. Короткие ссылки и страновые зеркала раскрываются автоматически.

Хосты

youtube.com · youtu.be · youtube-nocookie.com

Запрос

Шаг 1 — список качеств (2 кредита)

curl -s "https://api.saveapi.org/v1/youtube/info" \
  -H "Authorization: Bearer sk_live_xxxx" \
  -G --data-urlencode "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ"

Шаг 2 — ссылка на выбранное качество (10 кредитов)

curl -s "https://api.saveapi.org/v1/youtube/create" \
  -H "Authorization: Bearer sk_live_xxxx" \
  -G --data-urlencode "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \
  --data-urlencode "quality=720p"

Ответ

{
  "success": true,
  "platform": "youtube",
  "source_url": "https://youtu.be/dQw4w9WgXcQ",
  "video_id": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
  "author": "Rick Astley",
  "duration_seconds": 213,
  "duration_str": "3:33",
  "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
  "is_short": false,
  "formats": [
    { "quality": "360p",  "file_size": 11330415, "file_size_str": "10.8 MB", "exact": true },
    { "quality": "720p",  "file_size": 29884416, "file_size_str": "28.5 MB", "exact": true },
    { "quality": "1080p", "file_size": 80546201, "file_size_str": "76.8 MB", "exact": true }
  ],
  "audio_formats": [
    { "quality": "m4a", "file_size": 3460300, "file_size_str": "3.3 MB", "exact": true },
    { "quality": "mp3", "file_size": 8520000, "file_size_str": "8.1 MB", "exact": false }
  ],
  "credits": { "spent": 2, "remaining": 99998 }
}

Вопросы перед началом

Почему два вызова, а не один?
Потому что вариант качества у YouTube — это работа, а не готовая ссылка. info стоит один вызов и сообщает точный размер каждого качества; create собирает выбранное. Восемь ссылок из первого вызова означали бы либо восемь сборок, либо ссылки, которые не работают.
Есть ли параметр limit_mb?
Нет и не будет. limit_mb придуман для Telegram-ботов, которым нельзя превышать лимит загрузки. Здесь вы заранее видите file_size в байтах по каждому варианту и решаете сами.
Сколько живёт ссылка на скачивание?
У неё есть подписанный срок (expires, Unix-время), после него она отвечает 410. Вызовите create снова. Ссылка отдаёт файл потоком, а не готовую копию, поэтому Range и Content-Length отсутствуют — размер берите из file_size, который info сообщил до выбора.
Размеры точные?
Да, кроме MP3: его мы перекодируем, поэтому размер оценочный — разницу показывает поле exact. Размеры видео и M4A берутся из источника.

См. также

Руководства с этим эндпоинтом

Другие платформы

Получить ключ и попробоватьПолный справочник API