04.6.2018, 18:38
(Tento příspěvek byl naposledy změněn: 06.6.2018, 9:51 uživatelem JiRo.
Důvod úpravy: Typos
)
V několika minulých příspěvcích jsme diskutovali o nárůstu času grabování při zvyšujícím se počtu kanálů a @mobilemanic doporučil použít metodu xmltv2xmltv, tedy načítání již existujícího zdroje xmltv přes WG++. Já jsem se na to chystal už delší dobu, zmínka o tom je zde (Solved) Merge xmltv with EPG URL, ale teprve pěkně rozběhlá diskuse v tomto vlákně mě přesvědčila se tomu věnovat. Po přečtení návodu, který je uložen v přiloženém zip, jsem zjistil, že to řešení zas tak složité, jak jsem si po zběžném přečtení původně myslel, není.
[attachment=3936]
Má to smysl?
Tu otázku jsem si položil několikrát. Pokud existuje služba zdroje xmltv, má vůbec smysl pužívat WG++? Odpověď je jasná. Ano. Za posledních několik let jsem byl svědkem vzniku a zase zániku několika takových služeb. Mít vlastní zdroj se tedy rozhodně vyplatí. Vyplatí se také proto, že ne vždy u takové služby najdete to, co potřebujete. A v neposlední řadě, velmi často je třeba se potýkat s tím, že ne vždy identifikace kanálů v xmltv odpovídá té, která by se hodila vám.
Jak to funguje
Na první pohled složitý popis v podstatě směřuje ke dvěma cílům.
Postup:
1. Přejmenujte merge-xmltv.ini, např. na 22century.cz.ini. Takto vypadá soubor 22century.cz.ini před zahájením editace:
2. Otevřete vhodným editorem a postupně zeditujte následující řádky:
řádek: site {url=merge-xmltv|timezone=UTC+00:00|maxdays=31.1|cultureinfo=en-GB|charset=UTF-8|titlematchfactor=90|keepindexpage}
na: site {url=22century.cz|timezone=UTC+01:00|maxdays=31.1|cultureinfo=cs-CZ|charset=UTF-8|titlematchfactor=90|keepindexpage}
řádek: *subpage.format {list|D:\guide-1.xml|D:\guide-2.xml}
na (nezapomeňte odstranit *): subpage.format {list|http://22century.cz/program.xml}
řádek: url_index{url|file://|subpage|}
na: url_index{url||subpage|}
3. Odstraňte hvězdičku u všech řádků mezi řádky ** @auto_xml_channel_start a ** @auto_xml_channel_end - tento postup způsobí, že se vypíší všechny kanály, které má daný zdroj (v našem případě tedy 22century.cz) k dispozici.
4. Soubor uložte do umístění, kde máte i ostatní ini soubory. Já zásadně používám podadresář seitini.user, ve kterém mám i další ini soubory, které při grabování používám a nějak je upravuji. Takto vypadá soubor 22century.cz.ini po skončení editace:
5. Nyní vložte do vašeho konfiguračního souboru WG++, tedy WebGrab++.config.xml, řádek:
<channel update="f" site="22century.cz" site_id="" xmltv_id="dummy">dummy</channel>
Doporučuji ostatní kanály zakomentovat nebo je dočasně ze souboru odstranit. Zbytečně byste čekali, až se nagrabují.
6. Spusťte WG++. Kromě standardního souboru výstupu, který teď ale není zajímavý a důležitý, se vytvoří soubor 22century.cz.channels.xml, který bude obsahovat seznam všech dostupných kanálů daného zdroje.
[attachment=3937]
7. Vraťte se zpět k vaší původní verzi konfiguračního souboru, případně z něj odstraňte řádek <channel update="f" site="22century.cz" site_id="" xmltv_id="dummy">dummy</channel>, není už tam nutný (ale nevadí tam). Nyní můžete do konfiguračního souboru vkládat vybrané řádky kanálů z 22century.cz.channels.xml.
8. Na závěr doporučuji zpátky zakomentovat řádky v 22century.cz.ini (odkomentované v bodu 3). Pokud to neuděláte, nestane se nic hrozného, jen se při každém grabování bude znova vytvářet seznam dostupných kanálů zdroje.
[attachment=3943]
Závěr
[attachment=3936]
Má to smysl?
Tu otázku jsem si položil několikrát. Pokud existuje služba zdroje xmltv, má vůbec smysl pužívat WG++? Odpověď je jasná. Ano. Za posledních několik let jsem byl svědkem vzniku a zase zániku několika takových služeb. Mít vlastní zdroj se tedy rozhodně vyplatí. Vyplatí se také proto, že ne vždy u takové služby najdete to, co potřebujete. A v neposlední řadě, velmi často je třeba se potýkat s tím, že ne vždy identifikace kanálů v xmltv odpovídá té, která by se hodila vám.
Jak to funguje
Na první pohled složitý popis v podstatě směřuje ke dvěma cílům.
- Získání kompletního přehledu kanálů, který daný zdroj poskytuje.
- Vytvoření standardního ini souboru pro daný zdroj, který umožní kanály tohoto zdroje zadávat do standardního konfiguračního souboru jako jakékoliv jiné.
Postup:
1. Přejmenujte merge-xmltv.ini, např. na 22century.cz.ini. Takto vypadá soubor 22century.cz.ini před zahájením editace:
Kód:
**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: merge-xmltv
* @MinSWversion: 1.1.1/56.02
* @Revision 3 - [21/01/2016] Francis De Paemeleere
* - add show icon
* @Revision 2 - [21/10/2015] Francis De Paemeleere
* - speedup for large files
* @Revision 1 - [17/10/2015] Jan van Straaten
* - allows multiple xmltv input file to merge
* @Revision 0 - [09/05/2014] Jan van Straaten
* - creation
* @Remarks:
* @header_end
**------------------------------------------------------------------------------------------------
*** edit - timezone=UTC+00:00 - to the timezone for which the xmltv data is created
*** edit (optional) - cultureinfo=en-GB - to the cultureinfo of the country for which the xmltv data is created
site {url=merge-xmltv|timezone=UTC+00:00|maxdays=31.1|cultureinfo=en-GB|charset=UTF-8|titlematchfactor=90|keepindexpage}
*
*** eventually enable and adapt ratingsystem and episodesystem to your requiements
*site {ratingsystem=GB|episodesystem=onscreen}
*
*** edit - path_of_the_xmltv_file2merge.xml - to your requirements
*** more than one file2merge or just one:
*subpage.format {list|path_of_the_1st_xmltv_file2merge.xml|path_of_the_2nd_xmltv_file2merge.xml|etc}
*** example
*subpage.format {list|D:\guide-1.xml|D:\guide-2.xml}
url_index{url|file://|subpage|}
scope.range {(datelogo)|end}
index_variable_element.modify {addstart|'config_site_id'}
end_scope
index_showsplit.scrub {regex||<programme [^>]*channel=\"'index_variable_element'\"[^>]*>.*?</programme>||}
index_start.scrub {single|start="||"|>}
index_stop.scrub {single|stop="||"|>}
index_title.scrub {single|<title|>|</title>|</title>}
index_subtitle.scrub {single|<sub-title|>|</sub-title>|</sub-title>}
index_description.scrub {single|<desc|>|</desc>|</desc>}
index_actor.scrub {multi|<actor>||</actor>|</actor>}
index_director.scrub {multi|<director>||</director>|</director>}
index_writer.scrub {multi|<writer>||</writer>|</writer>}
index_producer.scrub {multi|<producer>||</producer>|</producer>}
index_presenter.scrub {multi|<presenter>||</presenter>|</presenter>}
index_productiondate.scrub {single|<year>||</year>|</year>}
index_category.scrub {multi|<category|>|</category>|</category>}
index_starrating.scrub {single|<star-rating>|<value>|</value></star-rating>}
index_episode.scrub {single|<episode-num>||</episode-num>|</episode-num>}
index_showicon.scrub {regex||<icon src=\"([^\"]*)||}
scope.range {(indexshowdetails)|end}
* extraxt times
*start="20120922004200" stop="20120922021200"
index_start.modify {substring(type=char)|8 4}
index_temp_1.modify {substring(type=char)|'index_start' 0 2} * the hours
index_start.modify {substring(type=char)|2 2} * the minutes
index_start.modify {addstart|'index_temp_1':}
index_stop.modify {substring(type=char)|8 4}
index_temp_1.modify {substring(type=char)|'index_stop' 0 2} * the hours
index_stop.modify {substring(type=char)|2 2} * the minutes
index_stop.modify {addstart|'index_temp_1':}
index_description.modify {cleanup}
end_scope
** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
** @auto_xml_channel_start
*index_site_id.scrub {regex||<channel [^>]*id="[^\"]*"[^>]*>.*?</channel>||}
*scope.range {(channellist)|end}
*index_site_channel.modify {addstart|'index_site_id'}
*index_site_id.modify {substring(type=regex)|<channel [^>]*id="([^\"]*)"[^>]*>}
*index_site_channel.modify {substring(type=regex)|<display-name [^>]*>(.*?)</display-name>}
*index_site_id.modify {cleanup(removeduplicates=equal link="index_site_channel")}
*end_scope
** @auto_xml_channel_end
2. Otevřete vhodným editorem a postupně zeditujte následující řádky:
řádek: site {url=merge-xmltv|timezone=UTC+00:00|maxdays=31.1|cultureinfo=en-GB|charset=UTF-8|titlematchfactor=90|keepindexpage}
na: site {url=22century.cz|timezone=UTC+01:00|maxdays=31.1|cultureinfo=cs-CZ|charset=UTF-8|titlematchfactor=90|keepindexpage}
řádek: *subpage.format {list|D:\guide-1.xml|D:\guide-2.xml}
na (nezapomeňte odstranit *): subpage.format {list|http://22century.cz/program.xml}
řádek: url_index{url|file://|subpage|}
na: url_index{url||subpage|}
3. Odstraňte hvězdičku u všech řádků mezi řádky ** @auto_xml_channel_start a ** @auto_xml_channel_end - tento postup způsobí, že se vypíší všechny kanály, které má daný zdroj (v našem případě tedy 22century.cz) k dispozici.
4. Soubor uložte do umístění, kde máte i ostatní ini soubory. Já zásadně používám podadresář seitini.user, ve kterém mám i další ini soubory, které při grabování používám a nějak je upravuji. Takto vypadá soubor 22century.cz.ini po skončení editace:
Kód:
**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: 22century.cz
* @MinSWversion: 1.1.1/56.02
* @Revision 3 - [21/01/2016] Francis De Paemeleere
* - add show icon
* @Revision 2 - [21/10/2015] Francis De Paemeleere
* - speedup for large files
* @Revision 1 - [17/10/2015] Jan van Straaten
* - allows multiple xmltv input file to merge
* @Revision 0 - [09/05/2014] Jan van Straaten
* - creation
* @Remarks:
* @header_end
**------------------------------------------------------------------------------------------------
*** edit - timezone=UTC+00:00 - to the timezone for which the xmltv data is created
*** edit (optional) - cultureinfo=en-GB - to the cultureinfo of the country for which the xmltv data is created
site {url=22century.cz|timezone=UTC+01:00|maxdays=31.1|cultureinfo=cs-CZ|charset=UTF-8|titlematchfactor=90|keepindexpage}
*
*** eventually enable and adapt ratingsystem and episodesystem to your requiements
*site {ratingsystem=GB|episodesystem=onscreen}
*
*** edit - path_of_the_xmltv_file2merge.xml - to your requirements
*** more than one file2merge or just one:
*subpage.format {list|path_of_the_1st_xmltv_file2merge.xml|path_of_the_2nd_xmltv_file2merge.xml|etc}
*** example
subpage.format {list|http://22century.cz/program.xml}
url_index{url||subpage|}
scope.range {(datelogo)|end}
index_variable_element.modify {addstart|'config_site_id'}
end_scope
index_showsplit.scrub {regex||<programme [^>]*channel=\"'index_variable_element'\"[^>]*>.*?</programme>||}
index_start.scrub {single|start="||"|>}
index_stop.scrub {single|stop="||"|>}
index_title.scrub {single|<title|>|</title>|</title>}
index_subtitle.scrub {single|<sub-title|>|</sub-title>|</sub-title>}
index_description.scrub {single|<desc|>|</desc>|</desc>}
index_actor.scrub {multi|<actor>||</actor>|</actor>}
index_director.scrub {multi|<director>||</director>|</director>}
index_writer.scrub {multi|<writer>||</writer>|</writer>}
index_producer.scrub {multi|<producer>||</producer>|</producer>}
index_presenter.scrub {multi|<presenter>||</presenter>|</presenter>}
index_productiondate.scrub {single|<year>||</year>|</year>}
index_category.scrub {multi|<category|>|</category>|</category>}
index_starrating.scrub {single|<star-rating>|<value>|</value></star-rating>}
index_episode.scrub {single|<episode-num>||</episode-num>|</episode-num>}
index_showicon.scrub {regex||<icon src=\"([^\"]*)||}
scope.range {(indexshowdetails)|end}
* extraxt times
*start="20120922004200" stop="20120922021200"
index_start.modify {substring(type=char)|8 4}
index_temp_1.modify {substring(type=char)|'index_start' 0 2} * the hours
index_start.modify {substring(type=char)|2 2} * the minutes
index_start.modify {addstart|'index_temp_1':}
index_stop.modify {substring(type=char)|8 4}
index_temp_1.modify {substring(type=char)|'index_stop' 0 2} * the hours
index_stop.modify {substring(type=char)|2 2} * the minutes
index_stop.modify {addstart|'index_temp_1':}
index_description.modify {cleanup}
end_scope
** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
** @auto_xml_channel_start
index_site_id.scrub {regex||<channel [^>]*id="[^\"]*"[^>]*>.*?</channel>||}
scope.range {(channellist)|end}
index_site_channel.modify {addstart|'index_site_id'}
index_site_id.modify {substring(type=regex)|<channel [^>]*id="([^\"]*)"[^>]*>}
index_site_channel.modify {substring(type=regex)|<display-name [^>]*>(.*?)</display-name>}
index_site_id.modify {cleanup(removeduplicates=equal link="index_site_channel")}
end_scope
** @auto_xml_channel_end
5. Nyní vložte do vašeho konfiguračního souboru WG++, tedy WebGrab++.config.xml, řádek:
<channel update="f" site="22century.cz" site_id="" xmltv_id="dummy">dummy</channel>
Doporučuji ostatní kanály zakomentovat nebo je dočasně ze souboru odstranit. Zbytečně byste čekali, až se nagrabují.
6. Spusťte WG++. Kromě standardního souboru výstupu, který teď ale není zajímavý a důležitý, se vytvoří soubor 22century.cz.channels.xml, který bude obsahovat seznam všech dostupných kanálů daného zdroje.
[attachment=3937]
7. Vraťte se zpět k vaší původní verzi konfiguračního souboru, případně z něj odstraňte řádek <channel update="f" site="22century.cz" site_id="" xmltv_id="dummy">dummy</channel>, není už tam nutný (ale nevadí tam). Nyní můžete do konfiguračního souboru vkládat vybrané řádky kanálů z 22century.cz.channels.xml.
8. Na závěr doporučuji zpátky zakomentovat řádky v 22century.cz.ini (odkomentované v bodu 3). Pokud to neuděláte, nestane se nic hrozného, jen se při každém grabování bude znova vytvářet seznam dostupných kanálů zdroje.
[attachment=3943]
Závěr
- Grabování ze zdroje xmltv je nesrovnateleně rychlejší než z webových stránek programů
- Můžete s výhodou kombinovat data ze zdroje xmltv a zbytek si nagrabovat z webových stránek
- Při definici jednotlivých kanálů můžete celkem jednoduše provést jejich přejmenování, to při přímém přístupu k datům zdroje xmltv možné není a také to přináší občas komplikace
- Můžete celkem jednoduše a rychle přepínat mezi zdroji v případě, že dojde k nějakému výpadku. Stačí si své staré webové zdroje zakomentovat a v případě potřeby k nim rychle získat přístup
- Pokud byste si chtěli přidat kanály i z jiného zdroje xmltv, můžete si shodným postupem vytvořit další ini soubor, případně vložit tento zdroj do existujícího ini souboru pro 22century.cz.ini. Pro druhý případ stačí pozorně si přečíst komentáře v ini souboru. Já ale preferuji první variantu. Člověk v tom pak má pořádek.