• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Zdravím hosta! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Vlastní EPG - WebGrab+Plus
#1
Pokud nejste spokojeni s nejistou službou serverů, které poskytují EPG ve formátu xmltv, nebo v jejich nabídce postrádáte nějaké programy, máte možnost si vlastní EPG, tedy ve formátu xmltv, sestavit sami. Na první pohled se to zdá složité, ale pokud se do toho pustíte, brzy zjistíte, že je to vlastně hračka. Co je pro to třeba:

Zprovoznit si aplikaci WebGrab+Plus (WG++) [Only registered and activated users can see links Click here to register]. V tomto bodě samozřejmě záleží, jaký systém používáte. WG++ je původně psané pro Windows a využívá technologii .NET. Lze ho ale úspěšně instalovat a provozovat i pod Linux. V tomto případě ovšem s pomocí aplikace Mono, které umožňuje původně Windows .NET aplikace spouštět i na něm.

Já osobně mám zkušenosti s provozem ve Windows 10, kde jsem se vyučil a pak s převedením do LibreELEC.

Windows

Instaluje se a provozuje jako samostatná aplikace ve Windows. Vazba na Kodi a její addon, které xmltv využívají, se pak provede prostřednictvím odkazu na příslušný soubor xmltv, který WG++ vytvoří.

LibreELEC

Existuje addon, který je ale, jako jemu podobné (např. Tvheadend backend), pouze jakousi prázdnou obálkou, které slouží k instalaci autonomní aplikace a k zadání uživatelských parametrů. I tady je samozřejmě nutné nakonec na příslušný soubor xmltv, který WG++ vytvoří, vložit v odpovídajícím místě odkaz.

Zdoje primárních dat

Tím mám na mysli televizní programy, ze kterých je xmltv aplikací vytvářeno. V rámci instalace nabízí WG++ pro velké množství států řadu zdrojů, vesměs tedy odkazů na webové stránky. Mezi státy najdeme i Českou republiku a Slovensko, takže vybírat je z čeho. Já osobně používám pouze jeden zdroj, a to web sms.cz, resp. [Only registered and activated users can see links Click here to register]. Na něm jsem, až asi na čtyři internetová rádia, našel zatím vše, co potřebuji.

Instalace a parametrizace

Jak už jsme napsal, s WG++ jsme se seznamoval pod Windows 10. Instalace je bez problémů, parametrizace pro daný zdroj dat a jeho nastavení, výběr grabovaných programů, je na web-u aplikace dobře popsaná. Tím se nehodlám zdržovat. Jen je nutná jedna poznámka. Součástí instalace jsou konfigurační soubory, v některých případech jsou ale některá data v nich zastaralá. Weby s Tv a radio programy se vyvíjí, mění se názvy kanálů, takže se občas stane, že vám WG++ požadovaný program nenačte. V takovém případě je třeba zkontrolovat, jaký je aktuální název kanálu a zda se náhodou od toho v konfiguračním souboru neliší.

Provoz a využití
  • Ve Windows si musíte organizaci periodického spouštění zajistit sami s pomocí systémových služeb.
  • V případě LibreELEC si parametry spuštění nastavíte v parametrech addon. WG++ v LibreELEC se spouští po startu systému (s definovanu prodlevou v sekundách) a pak jednou v určený datum a čas (s možností zadání *).
  • Pokud provozujete LibreELEC na stroji, který je trvale zapnutý, zvolíte čas běhu WG++ podle vlastního uvážení. Je-li např. zdrojem dat pro Tvheadend, je vhodné tento čas volit podla času akltualizace EPG interního zdroje
  • Pokud provozujete LibreELEC na stroji, který vypínáte, pak je třeba samozřejmě časování zvolit tak, aby běh WG++ byl naplánováýn na dobu, kdy je stroj spolehlivě zapnutý 
  • WG++ vytvoří xmltv soubor, na který si samozřejmě v příslušném addon (např. IPTV  Simple Client) nebo aplikaci (Tvheadend) musíte vytvořit odkaz. 
V případě Linuxových instalací (a tedy i LibreELEC) je třeba si uvědomit, že WG++ je .NET aplikace, a že pro její běh se používá úloha Mono, která není příliš přátelská k systémovým zdrojům. Já provozuji LibreELEC kde běží WG++ na čtyř jádru Intel (2,4 GHZ max.), takže s výkonem nemám problém. Nedokážu v této chvíli posoudit, jak to bude například vypadat na RPi. Chystám se to otestovat, takže brzy snad podám zprávu.

Shrnutí

Výhody:
  • Nejste závislí na nějakém třetí straně, která xmltv sestavuje. Samozřejmě, pokud existuje stabilní server, problém by to být neměl, ale za dobu, co se této problematice věnuji, jsem už zažil takových web-ů několik a všechny postupně skončily.
  • Ne vždy jsou na takových webech všechny programy. U wepg.cz bylo například minimum rádií a když jsme admina žádal o jejich přidání, odpověď byla negativní. Chápu to, není možná mít na serveru úplně všechno. S WG++ si vyberete přesně to, co potřebujete. Samozřejmě, pokud to najdete na webech s programy. Pokud to na nich nenajdete, tak takový zdroj pravděpodobně neexistuje.
  • Můžete si programy pojmenovat jak je libo. On to asi nikdo nedělá, ale někdy se to může hodit. Jsou addony, které vyžadují aby jméno v xmltv bylo shodné se jménem přijímaného programu, takže se někdy musíte přizpůsobit jménu, které někdo v xmltv zadal, i když není úplně správné.
Nevýhody
  • Je to o trochu víc práce. Přeci jen instalace a parametrizace zabere víc času než zadání jednoho odkazu.
  • Náročnost na systémové zdroje - zejména u HW, který běží na hranici svých možností, to může být významné. I když je samozřejmě možné běh WG++ naplánovat na čas, kdy to nevadí.
  • WG++ v základní konfiguraci se spouští vždy po startu systému. Pokud tedy svůj stroj vypínáte, spustí se vám denně i několikrát. To není nutné. Dá se tomu samozřejmě odpomoci jednoduchým zásahem do spouštěcího scriptu WG++. Tedy pokud vám pak bude stačit jen jeho periodické spouštění.
  • Nevím, jak jsou na tom weby, které poskytují primární obsah programů. Je možné, že masovější využívání WG++ by je mohlo zatížit více, než je zdrávo. To nedokážu v dané chvíli posoudit.
  • [Edit 2017-07-05] Informace o žánrech vysílaných pořadů se nepřenášejí dál, i když ve výsledném xmltv souboru jsou (ověřeno v Tvheadend). Patrně to bude souviset s jazykem žánru. To mi zbývá ještě prozkoumat.
Závěr

Používání WG++ není úplně pro každého. Nejde o jednoduchou úlohu, kterou nainstalujete a spustíte nebo o tom, že zadáte adresu webu. Chce to přeci jen o fous více zkušeností. Ale vzhledem k tomu, že dokumentace WG++ existuje, dá se to zvládnout celkem v pohodě. A mimochodem, pokud jste doposud využívali nějaké xmltv dostupné na webu, vězte, že je velmi pravděpodobné, že jeho autoři k jeho sestavování využívají právě WG++.
Klient/TV Server: 1x Asrock Beebox - LE 8.0.2 + Tvheadend Backend 4.2 + 4x DVB-T + 500 GB HDD + Harmonny One
Klient: 1x RPi 2 - LE 8.0.2, 2x W10 - Kodfi 17.3, 1x Android Mobile - TVH, Yatse
NAS: Asustor 8 TB HDD
 
Citovat
#2
Ďakujem za vysvetlenie ,a návod
 
Citovat
#3
Sranda teprve je ty grabovací definice upravovat, člověk se nejdřív musí ten jejich jazyk naučit... :-D Ale program je to pěknej.

Drobný problém ale ještě je na linuxu, kdy Mono neumí nejnovější technologie používané v HTTPS, takže na některé weby se to na linuxu bohužel stalo nepoužitelným - vůbec se to na stránku nepřipojí. (hlavně horizon, který má dle mého názoru kvalitnější podklady než sms.cz)
 
Citovat
#4
@mobilemanic Bojuju s kategoriemi. Ve výsledném xmltv, které vygeneruje WG++, evidentně jsou, ale do Tvheadend se nepřenesou. Studoval jsem to, a problém je v tom, že kategorie pořadů musí být v xmltv zásadně vždy jen v angličtině. Ručně jsem tedy pár záznamů zeditovat, a skutečně. Začalo to fungovat. Asi není problém napsat script, který to po vygenerování projede a texty vymění, dokonce jsem i na fóru Tvheadend takové scripty našel, ale myslím, že by to mělo jít nadefinovat i v *.ini souboru.

Já jsem zatím zkusil vložit tento příkaz:

Kód:
category.modify {replace|horor|Science fiction / Fantasy / Horror}

ale bez úspěchu. Napadne tě něco?

Edit: Tak vyřešeno. Příkaz je v pořádku, jen bylo třeba pustit generaci s parametrem "f" (full), normálně totiž pouštím generaci s default parametrem "i". Takže teď zbývá vytvořit "překladové příkazy" pro všechny možné varianty kategorií.
Klient/TV Server: 1x Asrock Beebox - LE 8.0.2 + Tvheadend Backend 4.2 + 4x DVB-T + 500 GB HDD + Harmonny One
Klient: 1x RPi 2 - LE 8.0.2, 2x W10 - Kodfi 17.3, 1x Android Mobile - TVH, Yatse
NAS: Asustor 8 TB HDD
 
Citovat
#5
Pokračoval jsme v řešení přenosu kategorií do Tvheadend a Kodi. Vytvořil jsem soubor category.ini (je přiložen v zip), který obsahuje všechny kategorie, které zná Tvheadend (anglické názvy jsou vytažené ze zdrojových souborů) a pro ty kategorie, které jsem potřeboval, jsem nahradil symbolické označení kategorií českým textem. Tyto řádky je možné vložit do příslušných *.ini souborů WG++ a po grabování bude zaručeno, že se kategorie přejmenují do správného anglického tvaru a rozpoznají a přenesou i do Tvheadend a do Kodi. Poprvé, co se zedituje *.ini soubor, a po každé změně v kategoriích, je třeba spustit grabování s parametrem "f" (<update>f</update>). Pokud se to neprovede a proběhne jenom inkrementální grabování, tak se nové kategorie objeví pouze u nově přidaných pořadů.

Pozn. Po této úpravě se doba grabování opět prodlouží. Vhodné si tedy vyzkoušet, jak dlouho typicky trvá a podle toho si nastavit další kroky. Pokud máte LibreELEC a používáte tedy addon WebGrab+Plus (repozitář LibreELEC Add-ons), tak grabování spustíte "ručně" z příkazové řádky zadáním:

/storage/.kodi/addons/service.webgrabplus/bin/webgrabplus.run

Obsah mého tv.sms.cz.m.ini souboru po přidání příkazů pro překlad názvů kategorií (category.modify...):
Kód:
**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: tv.sms.cz.m
* @MinSWversion: V1.1.1/55.1
* @Revision 4 - [09/11/2015] Francis De Paemeleere
* - disable the .channels.xml generation
* @Revision 3 - [03/11/2015] Jan van Straaten
* - fix of start time, timezone
* @Revision 2 - [22/11/2013] Peter Fuzek
*   - less unnecessary updates
* @Revision 1 - [19/11/2013] Peter Fuzek
*   - replaced show icons with higher resolution pictures
* @Revision 0 - [24/08/2013] Peter Fuzek / Francis De Paemeleere
*   - creation
* @Remarks:
* @header_end
**------------------------------------------------------------------------------------------------
site {url=m.tv.sms.cz|timezone=Europe/Prague|maxdays=16|cultureinfo=cs-CZ|charset=windows-1250|titlematchfactor=50|episodesystem=xmltv_ns}
url_index{url|http://m.tv.sms.cz/index.php?den=|urldate|&stanice=|channel|&cas=0}
urldate.format {datestring|yyyy-MM-dd}
index_showsplit.scrub {multi|id='obsah'|<div class='porad'||id='preddal'}

index_start.scrub {regex(pattern="HH.mm")||>(\d{2}\.\d{2})<||}
index_title.scrub {single(include=2)|<a class='nazev'|>|<|</a>}
index_urlshow {url||<a class='nazev'|href='|'><div style|}
index_urlchannellogo.scrub {single|<div class='logo_out'|src='|'|</div>}

scope.range{(indexshowdetails)|end}
index_title.modify {remove(type=regex)|"(\([0-9]*?\))$"} * remove any episode info from the title
index_title.modify {remove(type=regex)|"(\([0-9]*?/[0-9]*?\))$"} * remove any episode info from the title
index_title.modify {cleanup}
index_title.modify {remove(type=regex)|" (X{0,3})(IX\|IV\|V?I{0,3})$"} *remove roman numerals
index_title.modify {cleanup}
end_scope

title.scrub {single|<div class="nadpis_detail">|||</div>}
title.scrub {single|<div class='nadpis_detail'>|||</div>}
episode.scrub {single|díl: |||)}
description.scrub {multi|class="popis|<div class="nadpis_scroll">|<div>|<div class='program'>}
director.scrub {multi(separator=",")|<strong>Režie:</strong>||</div>|</div>}
actor.scrub {multi(separator=",")|<strong>Hrají:</strong>||</div>|</div>}
category.scrub {multi(separator="/")|<strong>Žánr:</strong>||<|<}
productiondate.scrub {single|<strong>Year:</strong>||<|<}
showicon.scrub {single|<div class="detail_foto_in">|src="|"|</div>|}
showicon.modify {replace|/100/|/600/}

scope.range{(showdetails)|end}
title.modify {cleanup(tags="<"">")}
title.modify {cleanup}

* temp_1 = season
* temp_2 = episode
* temp_3 = number of seasons
* temp_4 = number of episodes
episode.modify {cleanup(tags="<"">")}
temp_1.modify {substring(type=regex)|'episode' "\(([0-9]*?)\. série.*?\)$"}
temp_2.modify {substring(type=regex)|'episode' "\(.*?([0-9]*?)\. díl\)$"}
temp_2.modify {substring(="" type=regex)|'title' "\(([0-9]*?)\)$"}
temp_2.modify {substring(="" type=regex)|'title' "\(([0-9]*?)/[0-9]*?\)$"}
temp_4.modify {substring(="" type=regex)|'title' "\([0-9]*?/([0-9]*?)\)$"}
temp_1.modify {calculate(not="" format=F0)|1 -}
temp_2.modify {calculate(not="" format=F0)|1 -}
subtitle.modify {substring(type=regex)|'episode' "^(.*)\(.*?\)$"}
episode.modify {clear}
episode.modify {addend('temp_1' not="")|'temp_1'}
episode.modify {addend('temp_3' not="")|/'temp_3'}
episode.modify {addend|.}
episode.modify {addend('temp_2' not="")|'temp_2'}
episode.modify {addend('temp_4' not="")|/'temp_4'}
episode.modify {addend|.}
episode.modify {clear(="..")}
title.modify {remove(type=regex)|"(díl\: .*?)$"} * remove any episode info from the title
title.modify {remove(type=regex)|"^(Seriál: )"}
title.modify {remove(type=regex)|"(\([0-9]*?\))$"} * remove any episode info from the title
title.modify {remove(type=regex)|"(\([0-9]*?/[0-9]*?\))$"} * remove any episode info from the title
title.modify {cleanup}

description.modify {substring(type=regex)|"^(?:.*?</div>(.*?</div>))"} * only get the info, not the description titles
description.modify {replace|">...</span>|">}
description.modify {cleanup(tags="<"">")}

actor.modify {remove| a další}

category.modify {replace|drama|Movie / Drama}
category.modify {replace|krimi|Detective / Thriller}
category.modify {replace|thriller|Detective / Thriller}
category.modify {replace|dobrodružný|Adventure / Western / War}
category.modify {replace|akční|Adventure / Western / War}
category.modify {replace|sci-fi|Sciencefiction / Fantasy / Horror}
category.modify {replace|fantasy|Sciencefiction / Fantasy / Horror}
category.modify {replace|horor|Sciencefiction / Fantasy / Horror}
category.modify {replace|mytseriozní|Sciencefiction / Fantasy / Horror}
category.modify {replace|komedie|Comedy}
category.modify {replace|romantický|Romance}
category.modify {replace|historický|Serious / Classical / Religious / Historicalmovie / Drama}
category.modify {replace|rodinný|Film / Cinema}
category.modify {replace|dokument|Documentary}
category.modify {replace|sport|Sports}
category.modify {replace|animovaný|Cartoons / Puppets}
category.modify {replace|hudební|Music / Ballet / Dance}
category.modify {replace|fitnes a zdraví|Fitnessandhealth}
category.modify {replace|vaření|Cooking}
category.modify {replace|reklama|Advertisement / Shopping}
category.modify {replace|nakupování|Advertisement / Shopping}
category.modify {replace|zahradničení|Gardening}
end_scope


***  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
***      #####  CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
***
*** @auto_xml_channel_start
*url_index{url|http://m.tv.sms.cz/?cas=0&zmen_stanice=true}
*index_site_id.scrub {multi(includeblock="title=")|<div class='stanice'|value='|'|}
*index_site_channel.scrub {multi(includeblock="title=")|<div class='stanice'|class='nazev'>|<|}
*scope.range {(channellist)|end}
*index_site_id.modify {cleanup(removeduplicates=equal,100 link="index_site_channel")}
*end_scope
*** @auto_xml_channel_end


Přiložené soubory
.zip   category.zip (Velikost: 1,51 KB / Stažení: 10)
Klient/TV Server: 1x Asrock Beebox - LE 8.0.2 + Tvheadend Backend 4.2 + 4x DVB-T + 500 GB HDD + Harmonny One
Klient: 1x RPi 2 - LE 8.0.2, 2x W10 - Kodfi 17.3, 1x Android Mobile - TVH, Yatse
NAS: Asustor 8 TB HDD
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)