Как создать скрипт для прослушивания онлайн-радио в Linux

В этой статье мы расскажем, как создать простой скрипт на Python, который будет собирать данные об онлайн-радиостанциях из открытых источников и воспроизводить их эфир прямо в терминале Linux. Мы будем использовать API RadioBrowser для получения списка радиостанций и утилиту mpv для воспроизведения потокового аудио.

Что понадобится:

  1. Linux-система (Ubuntu, Debian или любой дистрибутив).
  2. Python 3.
  3. Установленные пакеты: requests (для работы с HTTP-запросами) и mpv (для воспроизведения аудио).

Шаг 1: Установка необходимых инструментов

Для начала установим все необходимые зависимости:

sudo apt update
sudo apt install python3 python3-pip mpv

Теперь установим библиотеку requests, которая поможет нам работать с API:

pip3 install requests

Шаг 2: Создание скрипта

Создайте новый файл с именем radio_player.py и вставьте в него следующий код:

#!/usr/bin/env python3

import requests
import random
import subprocess
import sys

# Функция для получения списка радиостанций через API RadioBrowser
def get_radio_stations(limit=10):
    url = f"https://de1.api.radio-browser.info/json/stations?limit={limit}"
    try:
        response = requests.get(url)
        response.raise_for_status()
        stations = response.json()
        return stations
    except requests.exceptions.RequestException as e:
        print(f"Ошибка при получении данных: {e}")
        sys.exit(1)

# Функция для воспроизведения потока с помощью mpv
def play_stream(stream_url):
    try:
        print(f"Воспроизводится: {stream_url}")
        subprocess.run(["mpv", stream_url], check=True)
    except subprocess.CalledProcessError as e:
        print(f"Ошибка при воспроизведении: {e}")
        sys.exit(1)

def main():
    # Получаем список радиостанций
    stations = get_radio_stations(limit=20)  # Ограничим до 20 станций для быстродействия

    if not stations:
        print("Не удалось получить список радиостанций.")
        sys.exit(1)

    # Выводим список станций
    print("Доступные радиостанции:")
    for i, station in enumerate(stations):
        print(f"{i + 1}. {station['name']} ({station['country']})")

    # Выбираем случайную радиостанцию
    random_station = random.choice(stations)
    print(f"\nВыбрана случайная радиостанция: {random_station['name']} ({random_station['country']})")

    # Получаем URL потока
    stream_url = random_station.get('url_resolved', None)

    if not stream_url:
        print("URL потока недоступен.")
        sys.exit(1)

    # Воспроизводим поток
    play_stream(stream_url)

if __name__ == "__main__":
    main()

Шаг 3: Как работает скрипт?

1. Получение данных о радиостанциях:
– Скрипт отправляет запрос к API RadioBrowser, который предоставляет информацию о тысячах онлайн-радиостанций по всему миру. Мы ограничиваем количество станций до 20 для ускорения работы.

2. Случайный выбор радиостанции:
– Из полученного списка радиостанций выбирается одна случайная станция.

3. Воспроизведение потока:
– Для воспроизведения выбранного потока используется утилита mpv. Если вы предпочитаете использовать другой медиаплеер, например, vlc, замените "mpv" на "vlc" в вызове subprocess.run.

Шаг 4: Запуск скрипта

  1. Сохраните скрипт в файл, например, radio_player.py.
  2. Сделайте его исполняемым:
chmod +x radio_player.py
  1. Запустите скрипт:
./radio_player.py

Возможные улучшения

Этот скрипт можно расширить, добавив больше функциональности:

  • Фильтрация по жанрам: Вы можете модифицировать запрос к API, чтобы фильтровать радиостанции по жанрам, странам или языкам.
  • Ручной выбор радиостанции: Вместо случайного выбора можно позволить пользователю выбрать радиостанцию из списка.
  • Использование других медиаплееров: Если вам не нравится mpv, вы можете использовать другие медиаплееры, такие как vlc или mplayer.

Заключение

Теперь вы знаете, как создать простой скрипт для прослушивания онлайн-радио в Linux. Этот проект можно легко адаптировать под свои нужды, добавив новые функции или изменив логику работы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *