Привет, Гост |
Трябва да се регистрирате преди да може да публикувате на нашия сайт.
|
Форумни статистики |
» Членове: 5,345
» Последен член: anonymous
» Форумни теми: 1,136
» Форумни публикации: 20,480
Пълна статистика
|
|
|
Среда за разработка |
Публикувано от: Majide - 04-11-2015, 13:27 - Форум: Програмиране
- Отговори (1)
|
|
Коя среда за разработка (IDE) предпочитате за работа върху Kodi addon's и др.?
Аз в момента съм заложил на Geany - лека, мултиплаформена с поддръжка на множество езици и GPL лиценз.
|
|
|
[УРОК] Как да създадем video addon за Kodi Media Center |
Публикувано от: Majide - 02-11-2015, 19:10 - Форум: Програмиране
- Отговори (52)
|
|
Kodi Media Center (познат още като XBMC) позволява разширяване на функционалността му чрез различни категории приставки (addons). Видео приставките позволяват да намирате и гледате видео, без да напускате интерфейса на Kodi. Този урок демонстрира как се създава такава приставка чрез елементарни знания по програмиране и логическо мислене.
/Готовата структура е съобразена с python2, а в Коди вече се използва python3 т.е. ще трябва да се съобразите с промяната в някои функции, методи и др. направени след прехода към новата версия на програмния език и с текущата версия на Коди/
Предварителни изисквания:
- да разполагате с инсталиран 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
Забележка: В посочените долу примери ще срещнете интернет адреси от вида h**p://server/link - да се четат http://server/link(форумната система автоматично съкращава връзките и те не могат да се видят целите)
Начало
1. Изберете подходящ сайт за създаването на видео приставка. Трябва да има богато и интересно съдържание, по възможност с разлистване по каталог, налична търсачка и еднакво структуриране на страниците, обложките, видеата и именованията им. Нека изберем сайта http://www.vplaybg.com. Видеата в него са разпределени по категории, с 24 заглавия на страница, налична търсачка и както вече споменахме еднакво структуриране - което ще направи правенето на приставката лесно. Ако страницата с желания от нас видеоклип е h**p://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'
Тук виждаме, че видеата се зареждат през адрес h**p://www.vplaybg.com/videos.php?vid= и същия идентификатор, като този от адреса на страницата a2bc4d02b. По същия начин стои въпросът с обложките на видеата. Ако знаем идентификатора на едно видео, тогава неговата обложка ще бъде h**p://www.vplaybg.com/uploads/thumbs/идентификатор-1.jpg
2. Създаване на главно меню на приставката. Въвеждаме в default.py от 24 ред надолу категориите от сайта по същия шаблон: addDir('Папка','h**p://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,'')
Преминете към прозореца на 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 = 'h**p://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. Адресът, който получавате е следния: h**p://www.vplaybg.com/search.php?keywords=word т.е. h**p://www.vplaybg.com/search.php?keywords=низ–за–търсене. В модул CATEGORIES поставете h**p://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 към сайта).
В случая трябва да конструираме финалния адрес за достъп до видеото, като към h**p://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.
|
|
|
Електронен програмен справочник (EPG) за български и чуждестранни ТВ и радиа |
Публикувано от: Majide - 31-10-2015, 22:25 - Форум: Ръководства и полезни връзки
- Отговори (1308)
|
|
Здравейте приятели!
Забелязах, че има потребност от достъпен EPG за българските и чуждестранни TV канали във XMLTV формат. Това е форматът, който използват PVR сървърите за TV секцията на Kodi, както и някои други приложения и STB устройства. В момента огромен екип от цели двама човека работи по този амбициозен проект.
Посетете посочената страница за да видите кои канали покрива към момента> http://epg.cloudns.org. На този адрес ще намерите също линка за сваляне на файла и удобен генератор на примерна плейлиста (съобразена с покриваните канали). Молим ви, ако разполагате с някакъв платен хостинг да ни заделите няколко мегабайта местенце за да гарантираме стабилността на услугата (пишете на лични съобщения).
Въпроси и отговори:
В какъв формат е предлаганото EPG?
XMLTV - индустриално приет формат за програмен справочник;
В кои програми мога да го ползвам?
В тези, които поддържат XMLTV формат за EPG. Файла, който се изтегля от download линка е предварително компресиран с GZip - такава е практиката и при останалите разпространители на EPG. Ако се налага, можете предварително да го декомпресирате преди употреба.
Кои канали са включени?
Единствения актуален списък ще откриете на официалната страница ТУК.
EPG добре, генерира също и плейлиста, ама тя е празна! Къде са стрийминг линковете на телевизиите?
Ние предлагаме единствено програмния справочник, нищо друго!
Плейлистата, която се генерира на сайта с кой софтуер е съвместима?
Ами лога на каналите поддържате ли?
Да! На адрес http://epg.cloudns.org можете да видите необходимите настройки. Разбира се вариант е и сами да си зареждате логата локално от някаква ваша директория, като имената на самите изображения трябва да посочите в tvg-logo=" канал.png" (таговете) на плейлистата. Изображенията с по-висока резолюция могат да причинят забавяне (лаг) при по-слаби STB устройства или компютри! Добро място за търсене на лога е сайта lyngsat-logo.com, thelogodb.com, както и Google разбира се.
Може ли да включите канал Х в EPG системата?
Ще проверим дали разполагаме с източник на разписание за него и ще ви уведомим след това.
Има канали, които са означени като "X канал (универсално EPG)". Какво означава това?
Това са виртуални канали, чието EPG можете да използвате в истинските канали от същата категория, за които няма налично разписание. Например "Музикален канал", можете да използвате за всички истински музикални канали, за които нямате разписание към този момент.
Имам проблем с канал Х - за някои часове, няма посочено никакво разписание или лого, а канала си върви?
Кажете ни кой е канала и ще направим проверка.
Можете ли да ни изпращате EPG файла, вместо да го изтегляме?
Да можем! Ако разполагате с Dropbox акаунт е възможно да ви споделим директория с актуалния файл с разписанието. За целта, трябва само да ни уведомите за желанието си и какво е вашето потребителско име в съответната облачна услуга. Ако не използвате облачни услуги, но разполагате с ваш сървър, можем да ъплоудваме файла директно към вас по някой от следните протоколи: FTP/FTPS, Webdav, Resilio Sync (Bittorrent sync), Rsync или RTRR (само за ваша употреба, без да ви включваме в разпределената система);
Не ми работи линка за сваляне на EPG! Какво да правя?
Пробвайте отново! Дизайна на системата е такъв, че евентуалните проблеми не се задържат за дълго Шегата настрана, но това е малко вероятно да се случи. Винаги можете да опитате и с резервния линк - посочете с мишката основния линк в сайта и ще видите резервния. Без значение кой от двата използвате, свалянето протича по същия начин. Ако лог-файла на Kodi ви се пълни с грешки при импортиране на EPG-то, опитайте да го зареждате локално (вижте следващия въпрос);
Искам да си зареждам разписанието локално, но да ми се обновява файла автоматично. Какво да направя?
Използвайте скрипт, който да изтегля по разписание файла вместо вас и го разархивира в дадена директория. Според вашата операционна система изберете един от посочените:
Скрипт за изтегляне на EPG файла под Линукс
Скрипт за изтегляне на EPG файла под Уиндоус
Искам файла с разписанието да се изтегля некомпресиран. Има ли отделен линк за некомпресирания файл?
Няма друг линк, но можете чрез скрипт за изтегляне да автоматизирате процеса по изтегляне и разархивиране на разписанието. Вижте горния въпрос!
Кога да изтегляме разписанието по график със скрипта?
Можете по всяко време, денонощно. Между 00:00 и 12:30ч. ще изтеглите справочника генериран предишния ден, а между 12:31 и 23:59 ще изтеглите справочника от този (текущ) ден.
Доставчика ми е блокирал линка за изтегляне. Може ли да направите нещо?
Опитайте да използвате публикуваният скрипт за изтегляне по разписание! Той прави няколко опита (5 по подразбиране) да изтегли разписанието от различни места. Ако при вас не сработи или ви създава проблеми стартирането му по график, пишете ни на лични съобщения за алтернативен вариант.
Антивирусната/Защитната стена засича свалянето като опасно! Да ни заразите ли искате?
Първо нашите съболезнования (за потребителите на OS Windows). Второ, това е false positive на вашата защитна система. Файла, който се изтегля от нас е компресиран текстов файл, нищо повече.
|
|
|
|