**------------------------------------------------------------------------------------------------ * @header_start * WebGrab+Plus ini for grabbing EPG data from TvGuide websites * @Site: tv.yandex.ru * @MinSWversion: V1.57 * @Revision 7 - [18/02/2019] EgiszZ * - ini fixes based on new web site design (title) * @Revision 6 - [14/10/2018] FlyGoneCrazy * - ini fixes based on new web site design * @Revision 5 - [08/11/2017] Blackbear199 * - added UA and TR to channels.xml creation * @Revision 4 - [30/10/2017] Blackbear199 * - site changes * @Revision 3 - [05/04/2017] Blackbear199 * - site changes * @Revision 2 - [28/07/2016] Blackbear199 * - title match fix * @Revision 1 - [25/07/2016] Blackbear199 * - added subtitle * - added country * - added urlchannellogo * - added showicon * - rewrote season/episode to version 56.25+ format. * - set desired output,onscreen(S5 E9/10) or xmltv_ns(4.8/9.) on site{...} line.default onscreen. * @Revision 0 - [02/03/2016] Blackbear199 * - creation * @Remarks: your_remarks * @header_end **------------------------------------------------------------------------------------------------ *site {loadcookie=cookie_file.txt} site {url=tv.yandex.ru|timezone=Europe/Moscow|maxdays=6|cultureinfo=ru-RU|charset=UTF-8|titlematchfactor=90} site {ratingsystem=RU|episodesystem=onscreen} * url_index{url|https://tv.yandex.ru/##region##/channels/##channel##?date=|urldate|&period=all-day} url_index.headers {customheader=Accept-Encoding=gzip,deflate} urldate.format {datestring|yyyy-MM-dd} * scope.range{(urlindex)|end} global_temp_1.modify {substring(type=regex)|'config_site_id' "^(\d+)##"} global_temp_2.modify {substring(type=regex)|'config_site_id' "##(\d+)$"} url_index.modify {replace|##region##|'global_temp_1'} url_index.modify {replace|##channel##|'global_temp_2'} end_scope * index_urlchannellogo {url(scope=datelogo)|https:||/>} * index_showsplit.scrub {multi|"events":[{||}]}|}]}} index_showsplit.modify {replace|\},\{|\|} * index_urlshow {url|https://tv.yandex.ru|"url":"||",|",} index_urlshow.headers {customheader=Accept-Encoding=gzip,deflate} * index_temp_1.scrub {regex||"start":"\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2}([-+]\d{2}:\d{2})"||} index_start.scrub {regex||"start":"(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2})[-+]\d{2}:\d{2}"||} index_stop.scrub {regex||"finish":"(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2})[-+]\d{2}:\d{2}"||} *index_title.scrub {(debug)single||||} index_title.scrub {regex||"finish":"[^"]*"(?:,"liveId":\d*,"yacFamilyId":\d*)?,"title":"(.*?)","||} index_title.scrub {regex||"finish":"[^"]*"(?:,"yacFamilyId":\d*)?,"title":"(.*?)","||} *index_title.scrub {single|,"title":"||"|"} *index_title.scrub {(debug)single|

||

|} index_subtitle.scrub {single|"episodeTitle":"||","|","} * scope.range{(indexshowdetails)|end} index_start.modify {calculate(format=date,unix)} index_stop.modify {calculate(format=date,unix)} index_temp_2.modify {substring(type=char)|'index_temp_1' 0 1} index_temp_1.modify {remove(type=char)|0 1} index_temp_1.modify {calculate(format=F0)|3600 *} index_start.modify {calculate('index_temp_2' "-" format=F0)|'index_start' 'index_temp_1' +} index_start.modify {calculate('index_temp_2' "+" format=F0)|'index_start' 'index_temp_1' -} index_stop.modify {calculate('index_temp_2' "-" format=F0)|'index_stop' 'index_temp_1' +} index_stop.modify {calculate('index_temp_2' "+" format=F0)|'index_stop' 'index_temp_1' -} index_title.modify {cleanup(style=jsondecode)} index_title.modify {replace(type=regex)|(.*)(","title":")|} index_subtitle.modify {clear('index_title')} index_subtitle.modify {substring(type=regex)|"\s-\s\"(.*?)\""} * index_episode.modify {substring(type=regex pattern="Сезон 'S1'. 'E1'/'Et1'""Сезон 'S1'. 'E1'""'E1'/'Et1'""'E1'")|'index_title' "\s((?:Сезон\s\d+\.\s)?(?:\d+-я\s[и-]\s)?\d+-я\sсери[ия])"} *index_episode.modify {replace|-я и |/} *index_episode.modify {replace|-я - |/} *index_episode.modify {remove(type=regex)|-я сери[ия]} index_title.modify {remove(type=regex)|\.*\s(?:Сезон \d+\.\s)?(?:\d+-я\s[и-]\s)?\d+-я\sсери[ия](?:\s-*\s*\".*?\")?} * *index_subtitle.modify {substring(type=regex)|"\s-\s\"(.*?)\""} index_category.scrub {single|"type":{|"name":"|"|}} end_scope * title.modify {addstart|'index_title'} *index_title and details title often different title.modify {replace(type=regex)|(.*)(","title":")|} *description.scrub {(debug)||||} description.scrub {single||" />} *description.scrub {(debug)regex||"description":"(.+?)","countries"||} *description.modify {replace(type=regex)|(","(.*))|} description.modify {cleanup} *director.scrub {multi|Режиссёр|||} director.scrub {multi|Режиссёр|||} *director.scrub {(debug)regex||Режиссёр(.+?)||} *actor.scrub {(debug)multi||||} *actor.scrub {multi|В ролях|||} actor.scrub {regex||\{"id":\d+,"name":"(.+?)","role":"actor","||} actor.modify {replace(type=regex)|(.*)(,"name":")|} *actor.scrub {(debug)multi|"name":"||","role":"actor","|","role":"actor","} *actor.modify {(debug)regex||"name":"(.+?)","role":"actor","||} *presenter.scrub {multi|Ведущие|||} presenter.scrub {multi|Ведущий|itemProp="presenter">||} rating.scrub {single||||} rating.modify {cleanup(tags="<"">")} *rating.scrub {single|class="program-statistics__value">|||} *starrating.scrub {single|Рейтинг КиноПоиска|">||} starrating.scrub {single|class="program-statistics__value">|||} productiondate.scrub {single|Страна и год|class="program-details__text">||} productiondate.modify {replace(type=regex)|(.*)(, )|} country.scrub {single|Страна и год|class="program-details__text">||} country.modify {replace(type=regex)|(, \d{4})|} showicon.scrub {single|
|')">} showicon.modify {addstart(not "")|https:} * ** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file) ** ** @auto_xml_channel_start *url_index{url|https://tv.yandex.ru/ajax?params=%5B%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22regional%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22regional%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%2C%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22local%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22local%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%2C%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22satelite%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22satelite%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%5D&sk=42a26daf72c9b3c34a81c144d6a754f0&userRegion=|subpage|&resource=null&ncrd=} *subpage.format {list|187|213|983} *index_site_id.scrub {|} *index_temp_9.scrub {regex||^.*$||} *index_temp_9.modify {replace|]\}"\}]|\|} *index_temp_9.modify {remove(type=element)|-1 1} *scope.range{(channellist)|end} *index_temp_4.modify {set|187\|213\|983} *index_temp_3.modify {set|0} *loop{(each "index_temp_8" in 'index_temp_9')|end} *index_temp_7.modify {substring(type=element)|'index_temp_4' 'index_temp_3' 1} *index_temp_6.modify {substring(type=regex)|'index_temp_8' ":(\d+)\}} *index_temp_5.modify {substring(type=regex)|'index_temp_8' "\\\"title\\\":\\\"(.+?)\\\","} *index_temp_6.modify {addstart|'index_temp_7'##} *index_temp_5.modify {addstart('index_temp_7' "187")|UA-} *index_temp_5.modify {addstart('index_temp_7' "213")|RU-} *index_temp_5.modify {addstart('index_temp_7' "983")|TR-} *index_temp_6.modify {replace|\||#_#} *index_temp_5.modify {replace|\||#_#} *index_site_id.modify {addend|'index_temp_6'#_#} *index_site_channel.modify {addend|'index_temp_5'#_#} *index_temp_3.modify {calculate(format=F0)|1 +} *end_loop *index_site_id.modify {replace|#_#|\|} *index_site_channel.modify {replace|#_#|\|} *index_site_id.modify {remove(type=element)|-1 1} *index_site_channel.modify {remove(type=element)|-1 1} *index_site_id.modify {cleanup(removeduplicates=equal,100 link="index_site_channel")} *end_scope ** @auto_xml_channel_end