API для встраивания на сайт [3rdparty]

Nomaid

New member
API для встраивания на сайт.

Предлагаю скрипты и совместную разработку модуля для управления RadioBoss через API.
На данный момент скрипт просто отправляет несколько команд и выводит список "Играет и следующая композиция". Скрипт пишется для DLE, поэтому некоторые пути к файлам нужно будет менять под себя.

Ссылки на просмотр скрипта, изменения видны в реальном времени:
r_radioboss.php
r_radioactions.php
r_radiobutton.php
Заметки

Ссылки для совместного доступа. Требуется аккаунт на Google:
r_radioboss.php
r_radioactions.php
r_radiobutton.php
Заметки

Этот вариант пришедший первым в голову, поэтому может быть у Вас будут идеи совсем другой реализации.
 
Интересно. Может быть стоило в отдельную тему это? А то на 14-й странице не все найдут...
 
А я писал на почту djsoft просил создать две темы. Сейчас в ЛС напишу...  :( нет не напишу.

Я просто не очень на этом форуме ориентируюсь, поэтому сомневаюсь на тему где создать ветку. Если можешь линкани где и попробую отдельно тему создать.

Еще хотел спросить возможно ли изменить ответы отправляемые API? Если да, то с кем это решать?
 
Личные сообщения отключены из-за спама. Я вынес в отдельную тему - пусть пока будет в бета версиях, далее посмотрим.

По поводу ответов API - что именно хотелось бы изменить?
 
Слишком замысловатый ответ и вложенность ответа на action=playbackinfo
Если выводить через foreach, то выползает "Playback", который я не совсем понял о чем говорит: pos="74518" len="333264"
 
Это обычный XML, можно извлечь отдельные значение с помощью, например, SimpleXML в PHP.

pos и len - в миллисекундах (1000мс = 1с).
 
Буду пробовать. До этого я писал от имени пользователя Nomaid
 
Nomaid, Интересно, но это далеко не API, а несколько набросков, причём для CMS'ки.
Вот если-бы написать полноценный класс, то уже интереснее.

На счёт ответа, как сказано выше, SimpleXML в помощь :)
 
Разработкой скрипта занимаюсь я, просто с начала смотрел на форум под другим аккаунтом.

Dragon_Knight сказал(а):
Nomaid, Интересно, но это далеко не API, а несколько набросков, причём для CMS'ки.
Вот если-бы написать полноценный класс, то уже интереснее.

Немного я опередил и уже обновил файлы... Теперь все обработки в классе идут. Может я не правильно выразился... Я не пытаюсь свое API написать, а лишь скрипт, который будет отправлять команды в RadioBoss.
 
1. Обновил все файлы
2. Запнулся при попытке получения библиотеки. Фукция function getlibrary при попытке получить xml выдает ошибку. Тех кто может помочь прошу в заметки
3. С самой программой знаком мало, поэтому не совсем понял где (в какой папке) должен храниться файл который мы через API пытаемся добавить в список воспроизведения. Поэтому не могу проверить работоспособность скрипта
 
1. Функции getlibrary нет - для получения музыкальной базы команда library
То, что в ответе нет открывающей "<" - проверяйте ваш код, где-то этот символ теряется.
Ответы можно тестировать через Internet Explorer. Например, можете ввести адрес:
http://127.0.0.1:9000/?pass=p&action=library&filename=Base

2. Эта функция связана с предыдущей: в базе хранятся имена файлов - их можно использовать для вставки треков в плейлист. Файл может находиться в любой папке, главное чтобы она была доступна с того компьютера, на котором установлен RB.
 
1. Пардон. Буду дома исправлю. Функцию getlibrary я привожу из своего скрипта. В нем идет получение библиотеки по адресу "http://192.168.0.4:3310/?pass=123123123&action=library&filename=Base".

Просто в последней версии пробовал прогнать через simplexml_load_string и получил эту ошибку. А в реальности у меня ошибку выдает simplexml_load_file()

2. Если я правильно понял нам нужно все доступные файлы добавить в библиотеку, потом action=library&filename=Base смотрим файлы с путями и какой-то из них можем добавить в плейлист?
 
yozhzh сказал(а):
Просто в последней версии пробовал прогнать через simplexml_load_string и получил эту ошибку. А в реальности у меня ошибку выдает simplexml_load_file()
Где-то на этапе между получением ответа от RB и вызовом implexml_load_file() теряется первый символ строки.

yozhzh сказал(а):
2. Если я правильно понял нам нужно все доступные файлы добавить в библиотеку, потом action=library&filename=Base смотрим файлы с путями и какой-то из них можем добавить в плейлист?
Да, наиболее простой путь получения списка файлов на сайте - это использование базы.
 
Дома ))

Исправил, получилось как я предполагаю:
Код:
1	function getlibrary ($libraryname = "Base") {
2		$r_command = $this->r_host . "pass=" . $this->r_pass . "&action=library&filename=".$libraryname;
3		$xml = simplexml_load_file($r_command) or die("Ошибка загрузки URL");
4		
5		echo $xml->TracksList->Track['title'];

так вот ошибка идет при попытке получения данных в строке 3
 
Проверьте через браузер, что возвращается RadioBOSS'ом в ответ на команду. Потом смотрите что идет в функцию simplexml_load_file
Можно попробовать загрузить ответ в переменную
Код:
$s = file_get_contents(...)
И ее уже передать в simplexml_load_file
 
пробовал. получаю
Код:
Warning: simplexml_load_file(): I/O warning : failed to load external entity "<?xml version="1.0" encoding="UTF-8"?>
<TracksList xmlns="tracks">
<Version version="1"/>
Это из исходного кода ответа в браузере взято

Я заметил при выводе playbackinfo все нормально, но там нет подобных вещей
xmlns="tracks"

А гугл по xmlns вообще ничего адекватного не отвечает. Есть мануал PHP и там говорится о дополнительном параметре "ns", но тут блуждая по ссылкам я вообще ничего не понимаю.
 
Пока можете сделать замену в строке (xmlns="tracks" заменить на пустую строку).
В следующем обновлении 4.9 "xmlns=" наверное, будет удален из ответа.
 
yozhzh, уже красивее.
Конфигурировать класс в самом класе не есть гуд.
Я-бы сделал так:
PHP:
class radioboss
{
	// ...
	var $config = array("host" => NULL, "pass" => NULL);

	function __construct($host, $pass)
	{
		$this -> config['host'] = $host;
		$this -> config['pass'] = $pass;
	}

	// ...
}

$RB = new radioboss(%host%, %pass%);
 
Dragon_Knight, согласен. Я бы и все константы вывел в отдельный файл, но на сколько я понял константы из скрипта нельзя использовать в классе.

На счет функции получения библиотеки наверное лучше подожду обновления программы. Не нашел адекватного способа вырезания строки из xml. Пробовал получить через file(), потом из массива вырезал строку, но вывести эти данные нормально не получается.
 
yozhzh, что мешает в конструкторе сделать инклуд?
Тока я не понял зачем выносить их из класса. Я привык делать так: всё что относиться к классу\функции. Например на днях делал класс для вставки ролика утуб на сайт, так в файле содержится и класс и набор отдельных функций, таких как парсинг ссылки.
 
Назад
Верх