**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: tvspielfilm.de
* @MinSWversion: V5.3.0.2
* @Revision 6 - [30/12/2024] Blackbear199
* - starrating fix
* @Revision 5 - [28/11/2024] Blackbear199
* - subpage stop string fix,required V5.3.0.2+
* @Revision 4 - [28/11/2024] Blackbear199
* - site changes
* @Revision 3 - [27/03/2022] Blackbear199
* - channel xml,showsplit fix
* @Revision 2 - [19/07/2018] Blackbear199
* - small updates
* @Revision 1 - [11/11/2016] ppip
* - change index start time
* - improved scraping of title
* - channel file creation added
* - set timezone to UTC
* @Revision 0 - [11/10/2016] ppip
* - creation
* @Remarks:
* @header_end
**------------------------------------------------------------------------------------------------
site {url=tvspielfilm.de|timezone=Europe/Berlin|maxdays=14|cultureinfo=de-DE|charset=UTF-8|titlematchfactor=90|allowlastdayoverflow|nopageoverlaps}
site {ratingsystem=FSK|episodesystem=onscreen}
*
url_index {url|https://www.tvspielfilm.de/tv-programm/sendungen/?page=|subpage|&order=time&date=|urldate|&cat%5B%5D=SP&cat%5B%5D=SE&cat%5B%5D=RE&cat%5B%5D=U&cat%5B%5D=KIN&cat%5B%5D=SPO&time=day&channel=|channel|}
url_index.headers {customheader=Accept_Encoding=gzip,deflate,br}
*
urldate.format {datestring|yyyy-MM-dd}
subpage.format {number||1|404 (Not Found)}
*
index_urlchannellogo {url|||
}
*
scope.range {(splitindex)|end}
index_showsplit.scrub {multi|||
|}
index_showsplit.modify {replace(type=regex)|"\!\?\?\!"|-}
index_showsplit.modify {cleanup(style=jsondecode)}
*index_showsplit.modify {(debug)}
end_scope
*
index_urlshow.scrub {regex||[^<]*|||}
*index_stop.scrub {single(separator=" - " include=last)|
||| | }
index_title.scrub {regex||[^<]*]*>[^<]*([^<]*)||}
index_category.scrub {regex||(?:.*?)(?:(.*?)(?:.*?)) | ||}
index_rating.scrub {single||||}
*
index_category.modify {cleanup(tags="""")}
index_category.modify {cleanup(tags="<"">")}
*
title.scrub {single|||}
titleoriginal.scrub {single|Originaltitel:|||}
subtitle.scrub {single||||}}
description.scrub {multi(separator=" " exclude="Moderation:""Kommentator:""Gäste:")|class="broadcast-detail__description">|| |}
director.scrub {single(separator=", ")|Regie:|||}
producer.scrub {single(separator=", "" / ")|Produzent:|||}
composer.scrub {single(separator=", ")|Musik:|||}
writer.scrub {single(separator=", ")|Drehbuch:|||}
actor.scrub {regex||.*?||}
presenter.scrub {multi(separator=" " include="Moderation:""Kommentator:""Gäste:")|class="broadcast-detail__description">|| |}
episode.scrub {single(pattern="Staffel 'S1', Folge 'E1'/'Et1' P'P1'""Staffel 'S1', Folge 'E1' P'P1'""Staffel 'S1', Folge 'E1'/'Et1'""Staffel 'S1', Folge 'E1'""Staffel 'S1'""Folge 'E1'""P'P1'" include="Staffel""Folge" exclude="Specials")|}
rating.scrub {multi|class="broadcast-detail__rating">|class="rating-dots__label">|">|}
starrating.scrub {regex||([1-9](?:,\d)?) ||}
productiondate.scrub {single|Jahr:|||}
country.scrub {single|Land:|||}
showicon.scrub {single|}
*
scope.range {(showdetails)|end}
titleoriginal.modify {clear('title')}
titleoriginal.modify {addend(not "")|(lang=en)}
temp_1.modify {substring(type=regex)|'subtitle' "\s\((\d+)\)\s*$"}
subtitle.modify {remove(type=regex)|"\s\(\d+\)$"}
description.modify {cleanup(tags="<"">")}
description.modify {remove(type=regex)|"^\d+\. Staffel, Episode \d+: "}
director.modify {cleanup(tags="<"">")}
producer.modify {cleanup(tags="<"">")}
composer.modify {cleanup(tags="<"">")}
writer.modify {cleanup(tags="<"">")}
presenter.modify {remove(type=regex)|"(?:Moderation\|Kommentator\|Gäste):"}
presenter.modify {cleanup(tags="<"">")}
presenter.modify {replace|, |\|}
episode.modify {replace|\|| }
episode.modify {remove(type=regex)|"\s*Folge\s*\(\)"}
episode.modify {remove(type=regex)|"(\s*\(\d+\))\|(\s*\(\d+\+\d+\))\|\s*\d+(\+\d+)/\d+"}
episode.modify {addend('temp_1' not "")| P'temp_1'}
*
loop {(each "temp_9" in 'actor')|end}
temp_8.modify {substring(type=regex)|'temp_9' "(.*?)<\/dt>"}
temp_7.modify {substring(type=regex)|'temp_9' "(.*?)<\/dd>"}
temp_7.modify {cleanup(tags="<"">")}
temp_7.modify {addend('temp_8' not "")|(role='temp_8')}
temp_6.modify {addend('temp_7' not "")|'temp_7'####}
end_loop
actor.modify {substring(type=regex)|'temp_6' "(.*?)####"}
*
rating.modify {replace(type=regex)|"<\/span>.*?data-rating=\""|:}
rating.modify {addend(not "")|/3}
loop {('starrating' not "")|end}
starrating.modify {replace|,|.}
starrating.modify {calculate(not "" format=F0)|2 /}
starrating.modify {set("1")|⭐}
starrating.modify {set("2")|⭐⭐}
starrating.modify {set("3")|⭐⭐⭐}
starrating.modify {set("4")|⭐⭐⭐⭐}
starrating.modify {set("5")|⭐⭐⭐⭐⭐}
temp_1.modify {calculate(format=F0 type=char)|'starrating' #}
starrating.modify {addend('temp_1' "4")|☆}
starrating.modify {addend('temp_1' "3")|☆☆}
starrating.modify {addend('temp_1' "2")|☆☆☆}
starrating.modify {addend('temp_1' "1")|☆☆☆☆}
starrating.modify {addend(not "")|(system=Imdb)}
end_if
country.modify {replace|, |/}
end_scope
*** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
**
** @auto_xml_channel_start
*url_index {url|https://www.tvspielfilm.de/tv-programm/tv-sender/}
*subpage.format {list|}
*index_site_id.scrub {multi|}
*index_site_channel.scrub {multi| |