GAPI

API для скачивания из Reddit

Посты с Reddit, разобранные в прямые ссылки. У видео возвращаются все качества, которые закодировал Reddit, и отдельно звуковая дорожка.

GEThttps://api.gapi.dev/reddit

Требуется заголовок X-API-Key · ответ в JSON

Параметры

urlобязательныйstring

Публичный пост Reddit: работает и reddit.com/r/…/comments/…, и короткие ссылки redd.it.

напр. https://www.reddit.com/r/IndieDev/comments/10hgvjq/vr_has_been_punishing_for_particles

Ответы

{
  "platform": "reddit",
  "type": "video",
  "title": "VR has been punishing for particles performance-wise…",
  "author": "peterfrance",
  "thumbnail": "https://external-preview.redd.it/…",
  "duration": 24,
  "media": [
    { "type": "video", "url": "https://v.redd.it/…/DASH_1080.mp4", "quality": "1080p", "ext": "mp4" },
    { "type": "video", "url": "https://v.redd.it/…/DASH_720.mp4", "quality": "720p AVC", "ext": "mp4" },
    { "type": "audio", "url": "https://v.redd.it/…/DASH_audio.mp4", "quality": "126kbps", "ext": "mp4" }
  ]
}

Попробовать

GEThttps://api.gapi.dev/reddit
Примеры
Ключа ещё нет? Создать бесплатно
curl -G 'https://api.gapi.dev/reddit' \
  --data-urlencode 'url=https://www.reddit.com/r/IndieDev/comments/10hgvjq/vr_has_been_punishing_for_particles' \
  -H 'X-API-Key: YOUR_KEY'

Что даёт каждая ссылка

Вы отправляетеtypemedia содержит
пост с видеоvideoвсе качества и звук отдельным элементом
пост с изображениемimageизображение в полном разрешении
пост-галереяalbumвсе изображения из него

Чего он не делает

Ленты сабреддитов, ветки комментариев, страницы пользователей и всё, что лежит в закрытом или карантинном сабреддите. Эндпоинт принимает ссылку на один пост.

Разбор по полям — на странице формы ответа.

Как выбрать качество и звук

Reddit отдаёт каждое качество отдельным mp4 без звука, а звук приходит одним элементом с типом audio. Возьмите самое высокое видео и дорожку, затем склейте их. Значение quality это подпись вроде 720p AVC, а не число, поэтому берите цифры до буквы p.

data = response.json()

video = max(
    (m for m in data["media"] if m["type"] == "video" and m["quality"][0].isdigit()),
    key=lambda m: int(m["quality"].split("p")[0]),
)
audio = next((m for m in data["media"] if m["type"] == "audio"), None)

# Reddit keeps them apart; ffmpeg joins them without re-encoding.
# ffmpeg -i video.mp4 -i audio.mp4 -c copy out.mp4

Примеры кода

Один и тот же запрос на четырёх языках. Подставьте ключ из личного кабинета, и код запустится как есть.

curl -G 'https://api.gapi.dev/reddit' \
  --data-urlencode 'url=https://www.reddit.com/r/IndieDev/comments/10hgvjq/vr_has_been_punishing_for_particles' \
  -H 'X-API-Key: gapi_live_your_key_here'

Один вызов — один запрос

Карусель из десяти слайдов стоит столько же, сколько одно фото: одно списание с баланса. Считаются вызовы, а не файлы.

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