Помогни ни да направим Uroci.net по - богат! Добави урок

Как да създадем video addon за Kodi Media Center (XBMC)

PhoenixBG   трудност:    видян: 2396

Предварителни изисквания:

  • да разполагате с инсталиран Kodi Media Center на компютъра, на който ще разработвате;
  • да отделите поне два часа от времето си за вникване в методиката на програмиране.

 

Видео приставките за Kodi се пишат на езика python, както е посочено в kodi.wiki. За да започнем работа, първо изтеглете някаква среда за разработка/програмиране с поддръжка на python. Аз използвам DrPython, който освен текстов редактор със синтактично оцветяване на сорс кода, предлага възможност и за изпълнение/дебъгинг на python скриптове. Обикновения Notepad няма да ви е достатъчен, защото интерпретатора на python е супер чувствителен към отстъпите в началото на всеки ред и средата за разработка е хубаво да следи за неправилни indent-и. Изтеглете също и този примерен video addon, който създадох като отправна точка за целта на урока. Стартирайте Kodi и по обичайния начин инсталирайте в него пробната приставка plugin.video.example-0.0.1.zip. За да можем да превключваме от Kodi към другите прозорци, ще трябва да го демаксимизирате - това става с вълшебната команда (наклонена на ляво черта) намира се близо до бутона Ентър на клавиатурата. Сега стартирайте средата за програмиране (DrPython в моя случай) и отворете в нея файла на примерната приставка: default.py (а къде се намира този файл? в потребителската директория на kodi/addons/plugin.video.example/default.py ). Отваряйки default.py ще видите следния примерен код:

 

# -*- coding: utf-8 -*-
#Библиотеки, които използват python и Kodi в тази приставка
import re
import sys
import os
import urllib
import urllib2
...

elif mode==3:
        print ""+url
        PLAY(name,url,iconimage)
xbmcplugin.endOfDirectory(int(sys.argv[1]))

 

Също така през Notepad или подобен текстов редактор отворете лог файла на Kodi, който ще ни е необходим за откриване на грешките в процеса на тестване. Ще го откриете в директорията kodi/temp/kodi.log

 

Начало

 1. Изберете подходящ сайт за създаването на видео приставка. Трябва да има богато и интересно съдържание, по възможност с разлистване по каталог, налична търсачка и еднакво структуриране на страниците, обложките, видеата и именованията им. Нека изберем сайта http://www.vplaybg.com. Видеата в него са разпределени по категории, с 24 заглавия на страница, налична търсачка и както вече споменахме еднакво структуриране - което ще направи правенето на приставката лесно. Ако страницата с желания от нас видеоклип е http://www.vplaybg.com/watch.php?vid=a2bc4d02b , тогава преглеждаме изходния й код през интернет браузър и се спираме на това:

 

 var flashvars = { "flashplayer": "http://www.vplaybg.com/players/jwplayer5/jwplayer.swf", "playlist": [{ file: 'http://www.vplaybg.com/videos.php?vid=a2bc4d02b', type: 'video', image: 'http://www.vplaybg.com/uploads/thumbs/a2bc4d02b-1.jpg'

 

Тук виждаме, че видеата се зареждат през адрес http://www.vplaybg.com/videos.php?vid= и същия идентификатор, като този от адреса на страницата a2bc4d02b. По същия начин стои въпросът с обложките на видеата. Ако знаем идентификатора на едно видео, тогава неговата обложка ще бъде:


 
 2. Създаване на главно меню на приставката. Въвеждаме в default.py от 24 ред надолу категориите от сайта по същия шаблон:         addDir('Папка','http://www.example.com',1,'DefaultFolder.png')
Когато приключите, модула CATEGORIES трябва да изглежда по този начин:
 
def CATEGORIES():
addDir('Търсене на видео','http://www.vplaybg.com/search.php?keywords=',2,searchicon)
addDir('Игрални филми','http://www.vplaybg.com/category.php?cat=filmi&page=1&order=DESC',1,'DefaultVideo.png')
addDir('Сериали','http://www.vplaybg.com/category.php?cat=SERIALI&page=1&order=DESC',1,'DefaultVideo.png')
addDir('Музика','http://www.vplaybg.com/category.php?cat=music&page=1&order=DESC',1,'DefaultAudio.png')
#addDir('','',1,'')

Изразът &page=1&order=DESC трябва да бъде добавян към края на адресите на категориите, за да бъде възможно минаването към следваща страница по-нататък. DefaultVideo, DefaultAudio и др. такива изображения  може да ползвате наготово като обложки в Kodi. Иначе, може да използвате и ваши локални или интернет хостнати изображения от вида http://server/image.jpg
Преминете към прозореца на Kodi и тествайте добавката example - отворете я и нашето меню вече трябва да се вижда!
 
 3. Разлистване на видеата. Ако  опитате да отворите меню "Игрални филми" , трябва да се случат следните неща:

- зареждане на подадения адрес на категория от модула CATEGORIES;
- претърсването му по зададен шаблон (регулярен израз);
- структуриране на резултатите по подходящ за Kodi начин;
- добавянето на всеки елемент към един общ списък, явяващ се съдържанието на тези виртуални директории.

Погледнете следния код в модула INDEXPAGES: match = re.compile('(.+?)').findall(data)
На мястото на (.+?) трябва да бъде поставен регулярен израз, способен да "хване" всичко необходимо: (заглавие, адрес на видеото или поне страницата му, обложка). Предвид удобното структуриране в този сайт, ние ще прихванем само името на видеото и неговото ID. По това ID сами ще конструираме адреса за зареждане на видеото и неговата обложка без изобщо да се налага да посещаваме и претърсваме страницата на отделното видео. И така, през интернет браузъра заредете сайта https://regex101.com и от левия му панел превключете на python. В голямото поле TEST STRING сложете целия изходен код на страницата каталог с игрални филми. В полето REGULAR EXPRESSION поставете vid=(.+?)" class="pm-title-link " title="(.+?)"> а в малкото поле в дясно от него буква "g". В панела в дясно MATCH INFORMATION трябва да видите следното:
 
 
Т.е. регулярния израз е "хванал" необходимото :) Накратко регулярния израз е последователност от HTML (в случая) или др. тагове и (.+?) поставен на мястото, на което искаме да "хванем" полезни данни. Този регулярен израз поставяме в кода на приставката match = re.compile('vid=(.+?)" class="pm-title-link " title="(.+?)">').findall(data)
Конструирането адресът на обложката се налага, когато е възможно това и/или когато не сме прихванали пълния й адрес с регулярния израз. В случая, адресът на обложката (ред 46) ще стане thumbnail = 'http://www.vplaybg.com/uploads/thumbs/' + vid + '-1.jpg'
Понеже страниците с видеата са много повече от една, трябва някак да си осигурим преминаване към следващата страница през приставката. В сайта, това става чрез следните атрибути "закачени" към края на адресите &page=номернастраница&order=DESC
Order логично касае сортирането по азбучен ред или наопаки, а номера на страницата е ясен. Затова в първия модул CATEGORIES трябва да добавим &page=1&order=DESC към края на адресите на всички категории. По този начин просто ще актуализираме номера на текущата страница +1 и ще я подаваме на модула INDEXPAGES наново за преиндексиране.
Всяка страница с изключение на последната съдържа точно 24 видеа. Т.е. ако списъка с заглавията във виртуалната директория на Kodi показва 24 видеа, тогава следваща страница с резултати трябва да има. За целта създаваме брояча br и му задаваме начална стойност 0. След всяко добаване на ново видео към списъка в INDEXPAGES актуализираме брояча br = br + 1.  След като приключи обхождането на текущата страница проверяваме колко са текущите видеа в брояча. Ако са точно 24, добавяме виртуална директория в края на списъка със заглавие "следваща страница>>" и конструираме адреса на тази следваща страница. Заменяме номера на текущата страница със следващия и после изпращаме към  INDEXPAGES за индексиране. Намирането на текущата страница става отново с регулярен израз (.+?)&page=(.+?)&order=DESC по показаният отгоре начин. След като приключите работата по този модул, целия ще изглежда по следния начин:
 
def INDEXPAGES(url):
req = urllib2.Request(url)
req.add_header('User-Agent', UA)
response = urllib2.urlopen(req)
print 'request page url:' + url
data=response.read()
response.close()

#Начало на обхождането
br = 0 #Брояч на видеата в страницата - 24 за този сайт
match = re.compile('vid=(.+?)" class="pm-title-link " title="(.+?)">').findall(data)
for vid,title in match:
thumbnail = 'http://www.vplaybg.com/uploads/thumbs/' + vid + '-1.jpg'
#print thumbnail
#print title
addLink(title,vid,3,thumbnail)
br = br + 1 #добавяме и това видео към общия брояч
#Край на обхождането

#Ако резултатите са на повече от една страници
print 'Items counter: ' + str(br)
if br == 24: #тогава имаме следваща страница и конструираме нейния адрес
getpage=re.compile('(.+?)&page=(.+?)&order=DESC').findall(url)
for baseurl,page in getpage:
newpage = int(page)+1
url = baseurl + '&page=' + str(newpage) + '&order=DESC'
print 'URL OF THE NEXT PAGE IS' + url
thumbnail='DefaultFolder.png'
addDir('следваща страница>>',url,1,thumbnail)

 

4. Търсачка. През вашия браузър потърсете думата word в търсачката на vplaybg.com. Адресът, който получавате е следния: http://www.vplaybg.com/search.php?keywords=word т.е. http://www.vplaybg.com/search.php?keywords=низ–за–търсене.  В модул CATEGORIES поставете http://www.vplaybg.com/search.php?keywords= като адрес на търсачката. Отидете на ред 70, където започва модула на търсачката. Тук ние преконструираме адресът за търсене, за да бъде възможно преминаването към следващата страница с резултати searchurl = url + searchText + '&page=1&order=DESC'    След като приключите, модулът ще изглежда така:

 

def SEARCH(url):
        keyb = xbmc.Keyboard('', 'Търсачка')
        keyb.doModal()
        searchText = ''
        if (keyb.isConfirmed()):
            searchText = urllib.quote_plus(keyb.getText())
            searchText=searchText.replace(' ','+')
            searchurl = url + searchText + '&page=1&order=DESC'
            searchurl = searchurl.encode('utf-8')
            print 'SEARCHING:' + searchurl
            INDEXPAGES(searchurl)
        else:
            addDir('Върнете се назад в главното меню за да продължите','','',"DefaultFolderBack.png")

 

 5. Модул за зареждане на видео. За да можем да отваряме разлистените заглавия в Kodi, трябва да го "захраним" с подходящо конструирани данни. Основно трябват ни адреса на видеото, заглавието му и обложката. Разбира се, може да му подадете и много други данни , които сте успяли да извлечете с регулярните изрази (или от json в случай, че имате щастието да разчитате на официално API към сайта).

В случая трябва да конструираме финалния адрес за достъп до видеото, като към http://www.vplaybg.com/videos.php?vid= добавим ID-то на избраното видео. Ще получите това:

 

def PLAY(name,url,iconimage):
        url = 'http://www.vplaybg.com/videos.php?vid=' + url #Конструираме адреса за достъп до видеото
        li = xbmcgui.ListItem(iconImage=iconimage, thumbnailImage=iconimage, path=url)
        li.setInfo('video', { 'title': name })
        try:
            xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xbmcgui.ListItem(path = url))
        except:
            xbmc.executebuiltin("Notification('Грешка','Видеото липсва на сървъра!')")

 

 6. Подробностите. Най-важното са пуправките, извинете подробностите. Всеизвестен факт е, че външния вид продава, а характеристиките задържат потребителя във времето да не избяга към друг продукт. Стига толкова маркетинг. В същата директория като default.py отворете с Notepad или друг текстов редактор със синтактично оцветяване на XML файла addon.xml и го редактирайте според вашите нужди. Посочете желаното име на приставката, нейната версия, вашето име или прякор и описанието й. Като приключите, трябва да сте получили нещо такова:

 

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<addon id="plugin.video.vplaybg" name="VPLAYBG" version="0.0.1" provider-name="Majide">
  <requires>
      <import addon="xbmc.python" version="2.1.0"/>
  </requires>
  <extension point="xbmc.python.pluginsource" library="default.py">
      <provides>video</provides>
  </extension>
  <extension point="xbmc.addon.metadata">
      <summary lang="bg">Приставка за съдържание при поискване от vplaybg.com</summary>
      <summary lang="en">Addon for VOD from vplaybg.com</summary>
    <description lang="bg">Приставка за съдържание при поискване от vplaybg.com. Препоръчително е използването на широколентова интернет връзка!</description>
      <description lang="en">Addon for watching on demand videos from vplaybg.com. Broadband internet connection is recomended!</description>       
      <disclaimer lang="bg">Някои елементи на тази приставка, може да не са легални в държавата ви - проверете и инсталирайте на ваша отговорност.</disclaimer>
      <disclaimer lang="en">Some parts of this addon may not be legal in your country of residence - please check with your local laws before installing.</disclaimer>
      <language>bg,en</language>
      <platform>all</platform>
      <forum></forum>
      <website></website>
      <email></email>
  </extension>
</addon>

 

Отворете също и changelog.txt за да посочите информация относно промените в тази версия на приставката.

Следва направа на обложка за приставката. С растерен или векторен графичен редактор по ваш избор (Gimp, Photoshop,...) направете желаната от вас обложка. Може да си вземете логото на сайта от въпросния сайт (ако той разполага с подходящо такова).

В същата тази директория на приставката plugin.video.example влезте в директория resources и изтрийте файла settings.xml и директорията language след като приставката няма да има настройки и няма да е мултиезична , а само на български език. Сега преименувайте директорията plugin.video.example  на plugin.video.vplaybg. Затворете Kodi и го стартирайте отново (демаксимизиран, както беше и досега). Изпробвайте работоспособността на приставката и в случай на грешка, погледнете в дъното на лог файла kodi.log (който все още трябва да държите отворен). Там ще откриете подробности за грешката, ако има такава. Ако нямате грешки, остава да бъде изключено ненужното рапортуване в лога: в default.py коментирайте следните редове, поставяйки знак # преди командата print: 38,47,48,60,79.

За да разпространите приставката, компресирайте директорията с ZIP  и посочете точната й версия: plugin.video.vplaybg-0.0.1.zip .

За повече информация (на английски език) посетете kodi.wiki



Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: IT Новини