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
Заметки

Этот вариант пришедший первым в голову, поэтому может быть у Вас будут идеи совсем другой реализации.
 

djsoft

Administrator
Команда форума
Интересно. Может быть стоило в отдельную тему это? А то на 14-й странице не все найдут...
 

Nomaid

New member
А я писал на почту djsoft просил создать две темы. Сейчас в ЛС напишу...  :( нет не напишу.

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

Еще хотел спросить возможно ли изменить ответы отправляемые API? Если да, то с кем это решать?
 

djsoft

Administrator
Команда форума
Личные сообщения отключены из-за спама. Я вынес в отдельную тему - пусть пока будет в бета версиях, далее посмотрим.

По поводу ответов API - что именно хотелось бы изменить?
 

Nomaid

New member
Слишком замысловатый ответ и вложенность ответа на action=playbackinfo
Если выводить через foreach, то выползает "Playback", который я не совсем понял о чем говорит: pos="74518" len="333264"
 

djsoft

Administrator
Команда форума
Это обычный XML, можно извлечь отдельные значение с помощью, например, SimpleXML в PHP.

pos и len - в миллисекундах (1000мс = 1с).
 

yozhzh

New member
Буду пробовать. До этого я писал от имени пользователя Nomaid
 

Dragon_Knight

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

На счёт ответа, как сказано выше, SimpleXML в помощь :)
 

yozhzh

New member
Разработкой скрипта занимаюсь я, просто с начала смотрел на форум под другим аккаунтом.

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

Немного я опередил и уже обновил файлы... Теперь все обработки в классе идут. Может я не правильно выразился... Я не пытаюсь свое API написать, а лишь скрипт, который будет отправлять команды в RadioBoss.
 

yozhzh

New member
1. Обновил все файлы
2. Запнулся при попытке получения библиотеки. Фукция function getlibrary при попытке получить xml выдает ошибку. Тех кто может помочь прошу в заметки
3. С самой программой знаком мало, поэтому не совсем понял где (в какой папке) должен храниться файл который мы через API пытаемся добавить в список воспроизведения. Поэтому не могу проверить работоспособность скрипта
 

djsoft

Administrator
Команда форума
1. Функции getlibrary нет - для получения музыкальной базы команда library
То, что в ответе нет открывающей "<" - проверяйте ваш код, где-то этот символ теряется.
Ответы можно тестировать через Internet Explorer. Например, можете ввести адрес:
http://127.0.0.1:9000/?pass=p&action=library&filename=Base

2. Эта функция связана с предыдущей: в базе хранятся имена файлов - их можно использовать для вставки треков в плейлист. Файл может находиться в любой папке, главное чтобы она была доступна с того компьютера, на котором установлен RB.
 

yozhzh

New member
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 смотрим файлы с путями и какой-то из них можем добавить в плейлист?
 

djsoft

Administrator
Команда форума
yozhzh сказал(а):
Просто в последней версии пробовал прогнать через simplexml_load_string и получил эту ошибку. А в реальности у меня ошибку выдает simplexml_load_file()
Где-то на этапе между получением ответа от RB и вызовом implexml_load_file() теряется первый символ строки.

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

yozhzh

New member
Дома ))

Исправил, получилось как я предполагаю:
Код:
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
 

djsoft

Administrator
Команда форума
Проверьте через браузер, что возвращается RadioBOSS'ом в ответ на команду. Потом смотрите что идет в функцию simplexml_load_file
Можно попробовать загрузить ответ в переменную
Код:
$s = file_get_contents(...)
И ее уже передать в simplexml_load_file
 

yozhzh

New member
пробовал. получаю
Код:
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", но тут блуждая по ссылкам я вообще ничего не понимаю.
 

djsoft

Administrator
Команда форума
Пока можете сделать замену в строке (xmlns="tracks" заменить на пустую строку).
В следующем обновлении 4.9 "xmlns=" наверное, будет удален из ответа.
 

Dragon_Knight

New member
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%);
 

yozhzh

New member
Dragon_Knight, согласен. Я бы и все константы вывел в отдельный файл, но на сколько я понял константы из скрипта нельзя использовать в классе.

На счет функции получения библиотеки наверное лучше подожду обновления программы. Не нашел адекватного способа вырезания строки из xml. Пробовал получить через file(), потом из массива вырезал строку, но вывести эти данные нормально не получается.
 

Dragon_Knight

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