Разработка видео-сервиса для IconBIT устройств

в 15:00, , рубрики: Песочница, метки: , , ,

В этой статье мы поговорим о разработке собственного видео сервиса (плагина) для приложения «Медиацентр», которое идёт в комплекте к Android-устройствам компании IconBIT. Перед тем, как продолжить, рекомендую прочесть инструкцию по разработки плагинов, её можно скачать здесь.

Итак, приступим.

Нам потребуется любой текстовый редактор (с поддержкой UTF-8 кодировки), но я рекомендую использовать Notepad++. Открываем текстовый редактор и добавляем строки:

require('video')
require('parser')

function onLoad()
    return 1
end

function onCreate(args)
end

Для получения данных с сайта необходимо добавить код парсинга html-страницы. Для этого открываем в браузере сайт и выбираем в меню браузера опцию «посмотреть исходный код». Далее находим начало списка контента, можно искать по названию первого фильма. Например, в исходном коде есть следующий отрывок:

<div class="item"> <a href="http://site/super-puper.html">
<h1>Супер-пупер фильм</h1></a><img src="http://site/sp.jpg">

Тогда в функцию «onCreate» добавляем следующий код для вывода списка фильмов в виде обложек:

local t={view='grid_poster',type='folder'}
local x=http.get('http://site/')
for url,title,image in string.gmatch(x,'class="item">.-href="(.-)".-<h1>(.-)</h1>.-src="(.-)"') do
    table.insert(t,{title=title,mrl='#stream/q=video&id='..url,image=image})
end
return t

Теперь наш плагин будет выводить список в виде обложек к фильмам, который отображается на главной странице сайта, выглядит это примерно так:

Разработка видео-сервиса для IconBIT устройств - 1

Для просмотра фильма этого недостаточно, поэтому необходимо добавить парсинг страницы с описанием и просмотра контента. Для этого открываем какой-нибудь фильм в браузере и смотрим исходный код. Например, код содержит:

<h1>Супер-пупер фильм</h1><img src="http://site/sp.jpg">
<span>Жанр:<br>Комедия</span><span>Режиссёр:<br>Губка Боб</span><span>Страна:<br>Астролябия</span><p class="descr">Тут описание фильма</p>
<br><br>
<iframe src="http://vk.com/video_ext.php?1234567890" />

Редактируем функцию «onCreate» и получаем:

local t={view='grid_poster',type='folder'}
if not args.q then
    local x=http.get('http://site/')
    for url,title,image in string.gmatch(x,'class="item">.-href="(.-)".-<h1>(.-)</h1>.-src="(.-)"') do
        table.insert(t,{title=title,mrl='#stream/q=video&id='..url,image=image})
    end
elseif args.q == 'video' then
    t['view']='annotation'
    local x=http.get(args.id)
    t['name']=parse_match(x,'<h1>(.-)</h1>')
    t['description']=parse_match(x,'class="descr">(.-)</p>')
    t['poster']=parse_match(x,'<img.-src="(.-)"')
    t['annotation']=parse_array(x,{'(Жанр:.-)</span>','(Режиссёр:.-)</span>','(Страна:.-)</span>'})
    local url=string.match(x,'<iframe src="(.-)"')
    table.insert(t,{title='Смотреть',mrl='#stream/q=get&url='..http.urlencode(url)..'&t='..t['name']})
elseif args.q == 'get' then
    return video(http.urldecode(args.url),args)
end
return t

В данном коде добавлен вывод информации о фильме и возможность просмотр фильма. Функция «video» — это предопределённая функция общего модуля «video», которая позволяет воспроизвести видео с некоторых ресурсов, включая видео из социальной сети ВКонтакте. Внешне это выглядит примерно так:

Разработка видео-сервиса для IconBIT устройств - 2

В результате получим вполне рабочий сервис, приведём полный код сервиса с комментариями:

require('video') --загружаем общий модуль видео
require('parser') --загружаем общий модуль разборки текста

function onLoad()
    return 1
end

function onCreate(args)
	local t={view='grid_poster',type='folder'} -- определяем по умолчанию вид в виде обложек
	if not args.q then
		local x=http.get('http://site/') -- загружаем страницу сайта
		-- в цикле с помощью регулярных выражений парсим содержимое
		for url,title,image in string.gmatch(x,'class="item">.-href="(.-)".-<h1>(.-)</h1>.-src="(.-)"') do
			-- добавляем фильм в конец списка
			table.insert(t,{title=title,mrl='#stream/q=video&id='..url,image=image})
		end
	elseif args.q == 'video' then
		t['view']='annotation' -- переопределяем вид на описание
		local x=http.get(args.id) -- загружаем страницу с описанием
		t['name']=parse_match(x,'<h1>(.-)</h1>') -- получаем заголовок
		t['description']=parse_match(x,'class="descr">(.-)</p>') -- получаем описание
		t['poster']=parse_match(x,'<img.-src="(.-)"') -- получаем обложку фильма
		-- получения массива характеристик фильма
		t['annotation']=parse_array(x,{'(Жанр:.-)</span>','(Режиссёр:.-)</span>','(Страна:.-)</span>'})
		local url=string.match(x,'<iframe src="(.-)"') -- получаем ссылку на видео
		-- добавляем пункт "Смотреть", по которому начинается воспроизведение
		table.insert(t,{title='Смотреть',mrl='#stream/q=get&url='..http.urlencode(url)..'&t='..t['name']})
	elseif args.q == 'get' then
		return video(http.urldecode(args.url),args) -- возвращаем прямую ссылку на воспроизведение
	end
	return t -- возвращаем список фильмов
end

Теперь сохраняем данный текст в файл под именем service.lua (кодировка UTF-8 без BOM).
Для работы плагина также необходимо создать конфигурационный файл, для этого создаем новый текстовый файл и добавляем туда текст:

<?xml version="1.0" encoding="UTF-8"?>

<service>

<id>site</id>
<label>@string/label</label>
<description>@string/description</description>
<version>0.0.1</version>
<author>© 2015</author>

<strings>
    <string name="label">Site</string>
	<string name="description">Кинотеатр</string>
</strings>

</service>

Редактируем нужную информацию и сохраняем текст в файл под именем service.xml (кодировка UTF-8 без BOM).

В завершении необходимо два данных файла добавить в ZIP архив, метод сжатия должен быть deflate. Архив переименовываем в вид site.IMC.zip, где site имя вашего сервиса.

Также можно добавить иконку сервиса, для этого добавьте файл иконки icon.png в архив.

Далее архив можно скопировать на USB флешку, подключить флешку к плееру и проверить работу.

О том, как добавить переход по страницам, выбор жанров и поиск рассмотрим в следующих статьях.

Полезные ссылки

Официальная страничка
Инструкция по разработки плагинов
Совместимые устройства

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js