• Введение

    Здесь и следующих подразделах мы расскажем как использовать API нашей панели управления Интернет-радио для получения информации о состоянии эфира и других данных программными методами. Используя наш API Вы можете строить свои собственные скрипты, приложения и модули для сайта своего радио, мобильного приложения и любой интеграции, где требуется программное взаимодействие с сервером радио.

    Для работы с API у Вас уже должна быть установлена и настроена наша Панель Управления Интернет-радио. Для работы с API Вы должны знать URL своей панели управления: тот адрес, по которому Вы обычно заходите в интерфейс вещателя, где Ваши каналы, плей-листы, сетка вещания и прочие разделы.

  • Авторизация

    Большинство запросов к API нацелены на получение информации о состоянии радио, но в некоторых случаях есть необходимость:

    • получить информацию, которая является не публичной, например, список диджеев на радио с паролями доступа
    • внести изменения на сервере радио, например, добавить новый канал, сервер, создать плей-лист и так далее.

    В таких случаях API потребует авторизацию при запросе. Наша платформа Интернет-радио поддерживает стандартный механизм авторизации для API: ключи, которыми вы можете управлять в разделе “Настройки” -> “API ключи” панели управления Интернет-радио.

  • История эфира

    URL: /api/v2/history/
    HTTP Методы: GET
    Параметры:
    limit: количество запрашиваемых элементов
    offset: отступ (с какой записи начинать вывод)
    server: ID радио-сервера

    История треков в эфире радио, последний трек в выводе данного API представляет собой трек, который играет прямо сейчас на радио.

    Пример

    import requests
    
    response = requests.get("https://demoaccount.s02.radio-tochka.com:8080/api/v2/history/?limit=1&offset=0&server=1")
    print(response.json())

    Результат

    {
       "count":500,
       "next":"https://demoaccount.s02.radio-tochka.com:8080/api/v2/history/?limit=1&offset=1&server=1",
       "previous":"None",
       "results":[
          {
             "album":"Ozzmosis (Expanded Edition)",
             "all_music_id":1190,
             "author":"Ozzy Osbourne",
             "author_other":"None",
             "comment":"None",
             "composer":"None",
             "dj_name":"AutoDJ",
             "genre":"None",
             "id":11552,
             "img_fetched":true,
             "img_large_url":"https://demoaccount.s02.radio-tochka.com:8080/media/tracks/trackImage1190_large.jpg",
             "img_medium_url":"https://demoaccount.s02.radio-tochka.com:8080/media/tracks/trackImage1190_medium.jpg",
             "img_url":"https://demoaccount.s02.radio-tochka.com:8080/media/tracks/trackImage1190.jpg",
             "isrc":"None",
             "jingle_id":"None",
             "label":"None",
             "length":296347,
             "lyricist":"",
             "metadata":"Ozzy Osbourne - I Just Want You",
             "n_listeners":0,
             "performance_type":"None",
             "playlist_title":"All music",
             "publisher":"None",
             "title":"I Just Want You",
             "ts":1733763534000,
             "year":"None"
          }
       ]
    }

    Параметры

    • album: Альбом
    • all_music_id: ID трека в музыкальной библиотеке сервера. Если трек является джинглом, этот параметр равен null. Если трек был воспроизведён в прямом эфире, а не из музыкальной библиотеки Авто-диджея - этот параметр равен null.
    • author: исполнитель
    • author_other: со-автор
    • comment: комментарий к треку
    • composer: композитор
    • dj_name: имя диджея, во время эфира которого вышел в эфир этот трек.
    • genre: жанр композиции
    • id: ID записи в истории треков (уникальное значение)
    • img_fetched: системой была выполнена попытка подгрузки обложки трека на музыкальных сервисах, если она отсутствует в mp3 тэгах файла
    • img_large_url: - URL картинки в максимальном разрешении для этого трека без сжатия
    • img_medium_url: - вариант картинки среднего размера, который система получила путём сжатия оригинальной картинки до 500х500 пикселей
    • img_url: мини-обложка трека, обычно в разрешении 100х100 пикселей
    • isrc: ISRC код трека (используется для отчётности правообладателям)
    • jingle_id: если трек в эфире был джинглом - этот параметр содержит ID джингла в базе контента Авто-диджея
    • label: лейбл
    • length: длительность трека в миллисекундах
    • lyricist: автор текста
    • metadata: итоговые метаданные с которыми трек вышел в эфир, обычно это Исполнитель - Название, но метаданные могут содержать и другие данные, в зависимости от формата мета-данных, которые указаны в разделе “Настройки” радио-панели: например, имя ведущего Диджея
    • n_listeners: количество слушателей на радио на момент запуска трека в эфир
    • performance_type: вид исполнения: вокал, инструментал,чтец и т.п.
    • playlist_title: название плей-листа, который был в эфире, может быть null для джинглов и для треков из прямого эфира
    • publisher: издатель
    • title: название трека
    • ts: время выхода в эфир в формате int в миллисекундах во временной зоне UTC
    • year: год трека

  • Описание API панели администратора

    Справочник API для панели администратора

    Панель администратора используется для добавления и управления вашими радио-аккаунтами на сервере. Обычно URL панели администратора после установки нашей Панели Управления Интернет-радио выглядит примерно так:

    https://stream.radio.ru:2345

    Базовый URL-префикс для API: /api/v1/


    Авторизация

    POST /api/v1/rest-auth/login/

    Описание: endpoint логина в систему, используйте его для получения токена авторизации по логину и паролю админа

    Запрос (JSON):

    {
      "username": "admin",
      "password": "secret"
    }
    

    Пример успешного входа (HTTP 200):

    {
      "key": "<dj-rest-auth-token>",
      "user": { /* здесь следует информация об аккаунте пользователя */ }
    }
    

    Пример на curl:

  • Плейлисты

    Endpoint: /api/v2/playlists/
    HTTP метод: GET, POST
    Авторизация: необходима
    Параметры:
    server: ID радиосервера

    Это API позволяет управлять плейлистами вашей станции.

    Пример: GET

    Получить все плейлисты с сервера с ID 1:

    import requests
    API_KEY = "6aNLaqRN.87L4xZ5LUXwWLCkK7dBswDafWZNcaLOB"
    
    headers = {"SC-API-KEY": API_KEY}
    
    response = requests.get(
      "https://demo.streaming.center:1030/api/v2/playlists/?server=1",
      headers=headers
    )
    print(response.json())

    Пример ответа

    [
       {
          "id":1,
          "duration":9244067,
          "playlist_files_per_page":1000,
          "tracks_num":55,
          "name":"All music",
          "is_default":true,
          "is_random":true,
          "on_air":false,
          "directory_name":"",
          "current_track_order":-9,
          "server":1
       },
       {
          "id":2,
          "duration":9240712,
          "playlist_files_per_page":1000,
          "tracks_num":54,
          "name":"Morning shows",
          "is_default":false,
          "is_random":false,
          "on_air":true,
          "directory_name":"",
          "current_track_order":43,
          "server":1
       }
    ]

    Описание

    Этот API endpoint возвращает массив ваших плейлистов. Каждый плейлист содержит следующие свойства:

  • Каналы вещания

    Endpoint: /api/v2/channels/
    HTTP метод: GET, POST
    Авторизация: GET - не обязательна, POST - необходима
    Query параметры для GET:
    limit: количество элементов в ответе
    offset: смещение для пагинации
    server: ID радиосервера

    Этот endpoint позволяет получить список каналов вещания радиостанции и создать новый канал.

    Пример: GET

    Получить список каналов для сервера с ID 1:

    import requests
    
    response = requests.get(
    	"https://demo.streaming.center:1030/api/v2/channels/?limit=20&offset=0&server=1"
    )
    print(response.json())

    Пример ответа

    {
       "count":2,
       "next":null,
       "previous":null,
       "results":[
    	  {
    		 "id":11,
    		 "active":true,
    		 "server":1,
    		 "bitrate":"128",
    		 "listeners":"500",
    		 "s_type":"icecast",
    		 "s_format":"mp3",
    		 "ip_address":"127.0.0.1",
    		 "port":8000,
    		 "ssl_port":8443,
    		 "mount_point":"/stream",
    		 "public":true,
    		 "traf":0,
    		 "traf_month":0,
    		 "autodj_enabled":true,
    		 "centovacast_compatible":true,
    		 "proxy_enabled":false,
    		 "proxy_status":0,
    		 "proxy_url_path":null,
    		 "ssl_proxy_enabled":false,
    		 "ssl_proxy_status":0,
    		 "ssl_proxy_url_path":null,
    		 "allow_auth_listeners_only":false,
    		 "queue_size":524288,
    		 "burst_size":131072,
    		 "listeners_current":37,
    		 "listeners_peak":82,
    		 "traffic":"0 B",
    		 "state":2,
    		 "links_html":"<a href=\"#\">Listen</a>",
    		 "stream_url":"http://s02.demo.streaming.center:8000/stream",
    		 "secure_stream_url":"https://s02.demo.streaming.center:8443/stream",
    		 "admin_link":"https://s02.demo.streaming.center:8443/",
    		 "youtube_stream_image":null,
    		 "youtube_stream_image_resolution":null,
    		 "fb_stream_image":null,
    		 "fb_stream_image_resolution":null,
    		 "vk_stream_image":null,
    		 "vk_stream_image_resolution":null,
    		 "telegram_stream_image":null,
    		 "telegram_stream_image_resolution":null,
    		 "rutube_stream_image":null
    	  }
       ]
    }

    Описание ответа

    Ответ списка использует стандартную пагинацию и содержит поля:

  • Сетка вещания

    Endpoint: /api/v2/grid/
    HTTP метод: GET, POST
    Авторизация: GET - не обязательна, POST - необходима
    Query параметры для GET:
    server: ID радиосервера
    start_ts: начало диапазона в Unix timestamp
    end_ts: конец диапазона в Unix timestamp
    utc: необязательный флаг, `1` если `start_ts` и `end_ts` передаются в UTC

    Этот endpoint позволяет получить события сетки вещания за выбранный диапазон времени и создать новое событие в расписании.

    Как работает GET списка событий

    При запросе списка API:

  • Подкасты

    Endpoint: /api/v2/podcasts/
    HTTP метод: GET
    Авторизация: не требуется
    Параметры:
    limit: количество записей в ответе (опционально)
    offset: смещение, указывает начальную запись (опционально)
    server: ID радиосервера (опционально)

    Возвращает список подкастов.

    Пример

    import requests
    
    response = requests.get("https://demoaccount.s02.radio-tochka.com:8080/api/v2/podcasts/?server=1")
    print(response.json())

    Пример ответа

    [
        {
            "id": 2,
            "folder": "the-retro-podcast",
            "image": "https://radio.com:8080/media/podcast_covers/podcast1.jpg",
            "episodes_count": 5,
            "feed_url": "https://radio.com:8080/api/v2/podcasts/2/feed.xml",
            "public_page_url": "https://radio.com:8080/public/podcasts/2/",
            "title": "The Retro Podcast",
            "description": "There are many variations of passages of Lorem Ipsum",
            "published": true,
            "server": 1
        },
    ]

    Описание

    • folder: папка подкаста в файловой системе сервера
    • image: изображение обложки подкаста
    • episodes_count: количество эпизодов в этом подкасте
    • feed_url: URL RSS-ленты для этого подкаста
    • public_page_url: URL публичной страницы этого подкаста, позволяет просматривать подкаст в браузере
    • title: название подкаста
    • description: описание подкаста
    • published: true, если подкаст опубликован (не черновик)
    • server: ID радиосервера, к которому относится подкаст
    Endpoint: /api/v2/podcasts/
    HTTP метод: POST
    Авторизация: необходима
    Parameters:
    title: название подкаста, string
    published: boolean - опубликован подкаст или нет
    description: описание подкаста, string
    server: ID радиосервера

    Создает подкаст на радио с указанным ID радиосервера. Если вам также нужно включить обложку подкаста в запрос на создание, отправьте POST-запрос с заголовком multipart/form-data и укажите обложку подкаста через параметр image.