В этой статье мы поговорим о разработке собственного видео сервиса (плагина) для приложения «Медиацентр», которое идёт в комплекте к 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
Теперь наш плагин будет выводить список в виде обложек к фильмам, который отображается на главной странице сайта, выглядит это примерно так:
Для просмотра фильма этого недостаточно, поэтому необходимо добавить парсинг страницы с описанием и просмотра контента. Для этого открываем какой-нибудь фильм в браузере и смотрим исходный код. Например, код содержит:
<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», которая позволяет воспроизвести видео с некоторых ресурсов, включая видео из социальной сети ВКонтакте. Внешне это выглядит примерно так:
В результате получим вполне рабочий сервис, приведём полный код сервиса с комментариями:
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 флешку, подключить флешку к плееру и проверить работу.
О том, как добавить переход по страницам, выбор жанров и поиск рассмотрим в следующих статьях.
Полезные ссылки
Официальная страничка
Инструкция по разработки плагинов
Совместимые устройства