Skip to content

Media API

immisterio edited this page Oct 26, 2025 · 4 revisions

Каждый запрос должен содержать валидный auth_token. Список допустимых токенов задаётся в конфигурации (init.conf, init.yaml). При отсутствии или неверном токене контроллер возвращает 401 Unauthorized с сообщением об ошибке.

Пример init.conf

"media": {
  "tokens": ["token1", "token2"]
}

Пример init.yaml

media:
  tokens:
    - token1
    - token2

Маршруты

GET /media/rsize/{token}/{width}/{height}/{*url}

  • Назначение: Получение прокси-ссылки на изображение с изменением размеров.
  • Параметры пути:
    • token — токен авторизации.
    • width, height — желаемые размеры. Если одно из значений равно 0, масштабирование происходит пропорционально по другому параметру.
    • url — исходная ссылка на изображение.
  • Результат: Редирект на внутренний прокси-хост /proxyimg:{width}:{height}/… или исходный URL, если прокси отключён.

GET /media/{type}/{token}/{*url}

  • Назначение: Получение прокси-ссылки на медиа ресурс.
  • Параметры пути:
    • type — тип ресурса (img, video).
    • token — токен авторизации.
    • url — исходная ссылка на ресурс.
  • Результат: Редирект на прокси или прямой поток.

GET /media

  • Назначение: Универсальный способ получить прокси-ссылку через query-параметры без жёсткого формата пути.
  • Параметры:
    • url — исходный адрес ресурса.
    • headers — JSON-строка с дополнительными заголовками (опционально).
    • Прочие поля (type, auth_token, width, height, proxy, proxy_name, apnstream, useproxystream) передаются через query-параметры и привязываются к MediaRequestBase.
  • Результат: HTTP редирект на проксированный ресурс.

POST /media

  • Назначение: Массовая генерация прокси-ссылок.
  • Тело запроса: JSON-массив urls и дополнительные параметры, совместимые с MediaRequest (type, auth_token, width, height, proxy, headers, и т.д.).
  • Результат: JSON-ответ с массивом urls, содержащим прокси-ссылки.

Примеры использования

Прямой переход из браузера

https://lampac.example.com/media/img/YOUR_TOKEN/https://remote.host/path/poster.jpg
https://lampac.example.com/media/video/YOUR_TOKEN/https://remote.host/video.m3u8

Для изменения размеров изображения:

https://lampac.example.com/media/rsize/YOUR_TOKEN/320/480/https://remote.host/path/poster.jpg

JavaScript (Fetch API)

var params = [
  'url=' + encodeURIComponent('https://remote.host/video.m3u8'),
  'type=video',
  'auth_token=YOUR_TOKEN',
  'useproxystream=true'
].join('&');

fetch('https://lampac.example.com/media?' + params, {
  redirect: 'follow'
})
.then(function(response) {
  if (response.redirected) {
    return response.url;
  }
  throw new Error('Не удалось получить прокси-ссылку');
})
.then(function(proxyUrl) {
  console.log('Проксированная ссылка:', proxyUrl);
})
.catch(function(error) {
  console.error(error);
});

JavaScript (POST несколько ссылок)

fetch('https://lampac.example.com/media', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    auth_token: 'YOUR_TOKEN',
    type: 'img',
    width: 320,
    height: 480,
    urls: [
      'https://remote.host/path/poster1.jpg',
      'https://remote.host/path/poster2.jpg'
    ]
  })
})
.then(function(res) {
  return res.json();
})
.then(function(data) {
  console.log('Проксированные изображения:', data.urls);
})
.catch(function(error) {
  console.error(error);
});

Обработка заголовков и прокси

  • Для передачи дополнительных заголовков используйте JSON-объект в поле headers (GET — строка, POST — массив объектов HeadersModel).
  • Для работы через именованный прокси укажите proxy_name, который должен существовать в AppInit.conf.globalproxy.
  • При прямом указании proxy контроллер создаёт временную конфигурацию и применяет её к запросу.

Обработка ошибок

  • 400 Bad Request возвращается при отсутствии обязательных параметров (url, urls).
  • 401 Unauthorized — при некорректном токене.
  • Ответы об ошибках имеют формат:
{
  "success": false,
  "error": "сообщение"
}