3 часа
Разлистване на каталози можеш да правиш по следния начин:
В общия случай правиш заявка към web страницата на категорията и четеш отговора й. Когато сайта няма API, можеш да претърсиш за необходимата ти информация с регулярни изрази. Резултата от регулярните изрази, подаваш на addLink(title,link,plot,duration,3,cover) според описаните аргументи на addLink, които си заложил в кода на добавката. Подаваш ги в същия ред и формат в който ги очакваш. Ако нещо липсва, подаваш '', защото няма съдържание, но все пак е аргумент, макар и празен. Какви хедъри се използват в нормални обстоятелства при съответния сайт, може да разбереш чрез WEB Developer Tools на твоя WEB Browser.
Разлистване на стриймовете: Всяко видео в сайта е хостнато на видеохостинг с поне още един или повече бекъп хостинга, от които да може да се гледа, ако от главния вече не става. Затова, когато генерираш списъка със заглавията (на филмите или епизодите) в дадена категория, не ги добавяй като addLink, а като addDir т.е. те не са самостоятелни елементи а на практика директории с елементи в тях. При отваряне на такава директория (на филм) през Коди, за всеки от наличните видеохостинги, можеш да визуализираш запис в интерфейса на Коди, например:
Филм (2025) [VidPlay]
Филм (2025) [FMoon]
Филм (2025) [VidMe]
Тези елементи вече, ще бъдат описани в директорията с addLink. Когато потребителя кликне върху тях, вече ще го пратиш към подпрограма за отваряне на избрания конкретен стрийм. Всеки видеохостинг функционира по различен начин и както и сам предполагаш, повечето гледат да си крият стриймовете по обясними причини. Имаш следните два варианта:
- Да си направиш собствени резолф-въри за всеки от необходимите ти хостинги (може и като отделна добавка за Коди - зависимост на текущата видео добавка) и при промяна от страна на видеохостинга, да се ангажираш да ъпдейтваш и твоя код, за да продължи той да работи;
- Да използваш готов резолф-вър. Има няколко възможности, от които ти препоръчвам ResolveURL.
След като резолф-въра ти върне директния адрес на стрийма, заедно с необходимите хедъри в "опашката му" (https://domain:port/path/video.m3u8?token=a1b2c3d4e5f6g7h8i9|User-Agent=Ne6to&Origin=domain&Referer=domain&...), задаваш този адрес като URL на нов ListItem, който ще бъде отворен. Задаваш му заглавие, обложка, описание, дължина и т.н. и т.н. всичко, което можеш и прецениш за нужно. За да получиш тази информация я скрейпваш от сорс кода на страницата с регулярни изрази (може и на части!, не е нужно на веднъж, но прави само една заявка към страницата).
Продължаваме със субтитрите. Ако те се изтеглят от сайта с филмите, трябва да добавиш необходимия код тук, преди плейването на видеото. Изтегляш субтитъра (локално) или просто резолф-ваш директния му адрес. След това отваряш видеострийма със xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, ListItem) и след като е отворено видеото, изчакваш 3-20 секунди, преди да заредиш субтитрите в стартиралия плейър, например:
Ако субтитрите се намират в страницата на видеохостинга (а не на сайта, за който правиш Коди добавка), тогава или ресолф-въра или самия ти, трябва да намерите начин, как да изтеглите субтитъра!
Огледай как са написани други подобни добавки за видеопортали и ще добиеш представа за различните начини, но в общи линии:
- правиш заявки;
- четеш отговора;
- там няма подредена информация (XML/JSON - налични, само ако видеопортала има API) и затова скрейпваш данните с регулярни изрази, за да извлечеш само полезното;
- конструираш List елементи в интефейса на Коди - директории за навигация и видео елементи, за самите видеа. Добавяш им метаданни за визуална естетика;
- ресолф-ваш стрийма за видеото и го отваряш през плейър инстанция
- зареждаш външни субтитри (ако има такива) към вече отвореното видео
Код:
response = requests.get("URL адрес на категорията", headers={'User-Agent': 'Mozilla...', 'Accept': 'text/html', 'Accept-Charset': 'UTF-8', 'Accept-Language': 'bg,en-US;q=0.7,en;q=0.3', 'Accept-Encoding': 'identity', 'DNT': '1', 'Alt-Used': 'съответниядомейн', 'Connection': 'keep-alive', 'Referer': 'същия URL адрес на категорията от началото или друг адрес', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-User': '?1'})
#print(response.text)
#Разлистване
match = re.compile('<a href='(.+?)'></a><h5>(.+?)</h5>').findall(response.content.decode("utf-8"))
for link, title in match:
адреснастраницатасфилма = link
заглавиенафилма = title
Разлистване на стриймовете: Всяко видео в сайта е хостнато на видеохостинг с поне още един или повече бекъп хостинга, от които да може да се гледа, ако от главния вече не става. Затова, когато генерираш списъка със заглавията (на филмите или епизодите) в дадена категория, не ги добавяй като addLink, а като addDir т.е. те не са самостоятелни елементи а на практика директории с елементи в тях. При отваряне на такава директория (на филм) през Коди, за всеки от наличните видеохостинги, можеш да визуализираш запис в интерфейса на Коди, например:
Филм (2025) [VidPlay]
Филм (2025) [FMoon]
Филм (2025) [VidMe]
Тези елементи вече, ще бъдат описани в директорията с addLink. Когато потребителя кликне върху тях, вече ще го пратиш към подпрограма за отваряне на избрания конкретен стрийм. Всеки видеохостинг функционира по различен начин и както и сам предполагаш, повечето гледат да си крият стриймовете по обясними причини. Имаш следните два варианта:
- Да си направиш собствени резолф-въри за всеки от необходимите ти хостинги (може и като отделна добавка за Коди - зависимост на текущата видео добавка) и при промяна от страна на видеохостинга, да се ангажираш да ъпдейтваш и твоя код, за да продължи той да работи;
- Да използваш готов резолф-вър. Има няколко възможности, от които ти препоръчвам ResolveURL.
След като резолф-въра ти върне директния адрес на стрийма, заедно с необходимите хедъри в "опашката му" (https://domain:port/path/video.m3u8?token=a1b2c3d4e5f6g7h8i9|User-Agent=Ne6to&Origin=domain&Referer=domain&...), задаваш този адрес като URL на нов ListItem, който ще бъде отворен. Задаваш му заглавие, обложка, описание, дължина и т.н. и т.н. всичко, което можеш и прецениш за нужно. За да получиш тази информация я скрейпваш от сорс кода на страницата с регулярни изрази (може и на части!, не е нужно на веднъж, но прави само една заявка към страницата).
Продължаваме със субтитрите. Ако те се изтеглят от сайта с филмите, трябва да добавиш необходимия код тук, преди плейването на видеото. Изтегляш субтитъра (локално) или просто резолф-ваш директния му адрес. След това отваряш видеострийма със xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, ListItem) и след като е отворено видеото, изчакваш 3-20 секунди, преди да заредиш субтитрите в стартиралия плейър, например:
Код:
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla........')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve("резолф-натия адрес на субтитъра", "локален път, къде да го запишем")
# Ако е в архив, декомпресираме
ListItem.setSubtitles(["локалния път... до декомпресиран файл със субтитри"])
xbmc.executebuiltin('Notification(%s, %s, %d, %s)'%('ИМЕ НА ДОБАВКАТА','Зареждам субтитри!', 3000, md+'DefaultAddonSubtitles.png'))
xbmc.sleep(3000) #Изкуствено изчакване!
Огледай как са написани други подобни добавки за видеопортали и ще добиеш представа за различните начини, но в общи линии:
- правиш заявки;
- четеш отговора;
- там няма подредена информация (XML/JSON - налични, само ако видеопортала има API) и затова скрейпваш данните с регулярни изрази, за да извлечеш само полезното;
- конструираш List елементи в интефейса на Коди - директории за навигация и видео елементи, за самите видеа. Добавяш им метаданни за визуална естетика;
- ресолф-ваш стрийма за видеото и го отваряш през плейър инстанция
- зареждаш външни субтитри (ако има такива) към вече отвореното видео