Предварителни изисквания:
Видео приставките за 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. По същия начин стои въпросът с обложките на видеата. Ако знаем идентификатора на едно видео, тогава неговата обложка ще бъде:
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,'')
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