<ScriptableScraper>
	<details>
	<!-- These details are for display purposes only. -->
	<name>filmtipset.se</name>
	<author>vuego</author>
	<description>This script pulls data from www.filmtipset.se and score + certification + language + tagline + keywords + release date from themoviedb.org.</description>

	<!-- 
	These fields uniquely identify the script. The ID should never 
	change and should be unique (no other script should use this ID). With
	new versions of the script the version numbers should change. EVEN FOR 
	MINOR CHANGES, you should change the version number if you are going to
	disribute it to anyone but internal testers. The point number 
	is for minor bug fix releases. Use it.
	-->
	<id>874987</id>
	<version major="2" minor="0" point="0"/>
	<published month="3" day="28" year="2026"/>

	<!--
	1.7.0 Fixed Release Date, Language, Studios, Plot Keywords, Score, Matching movies on search results page 3 and 4
	These fields are used for categorization purposes. Seperate multiple 
	types with a pipe | character.
	1.8.0 Fixed search and taglines, IMDb 8 number id, Will use Swedish release date if available or else the first release date
	1.9.0 Fixed Writers, Actors, Genre, Summary, tagline, Studios, plot keywords and certification
	1.10.0 Changed IMDb source to mobile site
	2.0.0 Replace IMDb with Themoviedb
	Note fix needed for next release: Studios
	-->
	<type>MovieDetailsFetcher</type>
	<language>sv</language>

	</details>

	<action name="search">
	    <set name="offset" value="0" />

		<!-- Regular Expressions -->
		<set name="rx_search_results_block">
			<![CDATA[
			</th></tr><tr><td><a href=".*?"><strong>(.*?)<h3>Sk.despelare/crew</h3>
			]]>
		</set>
		<set name="rx_search_results">
		<![CDATA[
		https:\/\/www.filmtipset.se\/film\/(.*?)"><strong>([^<]+)<\/strong><\/a><\/td><td>(\d+)<\/td>.*?<td style="text-align:center;">
		]]>
		</set>
		<set name="rx_imdb">
			<![CDATA[
			tt0{0,2}(\d{7,8})"
			]]>
		</set>
		<set name="rx_alternate_title_block">
			<![CDATA[
			Originaltitel<\/td>[\w\W]+<td>.*?<\/td>[\w\W]+<td class="label">Regissör
			]]>
		</set>
		<set name="rx_alternate_title">
			<![CDATA[
			<td>([^<]+)<\/td>
			]]>
		</set>
		<set name="rx_popularity">
			<![CDATA[
			Betygsantal<\/td>[\w\W]+<td>(\d+)<\/td>
			]]>
		</set>
		<set name="rx_nextpage">
			<![CDATA[
			style="float:right;">N.sta sida &raquo;</a>
			]]>
		</set>
		
		<!-- Rearrange title articles -->
		<parse name="title" input="${search.title}" regex="(.+?)(?:, (The|A))?$"/>
		<if test="${title[0][1]}!=">
			<set name="title[0][1]" value="${title[0][1]} "/>
		</if>
		<set name="search.title" value="${title[0][1]}${title[0][0]}"/>

		<!-- Let the user put ; in the filename since : isn't allowed -->
		<replace name="search.title" input="${search.title}" pattern=";" with=":" />

		<!-- Perform search using Title -->
		<retrieve name="search_page" url="http://www.filmtipset.se/hitta?q=${search.title}" />

		<parse name="search_next_page" input="${search_page}" regex='${rx_nextpage}' />
		<if test="${rx_nextpage}!=">
			<retrieve name="search_page2" url="http://www.filmtipset.se/hitta?q=${search.title}&amp;p=1" />

			<parse name="search_next_page" input="${search_page2}" regex='${rx_nextpage}' />
			<if test="${rx_nextpage}!=">
				<retrieve name="search_page3" url="http://www.filmtipset.se/hitta?q=${search.title}&amp;p=2" />

				<parse name="search_next_page" input="${search_page3}" regex='${rx_nextpage}' />
				<if test="${rx_nextpage}!=">
					<retrieve name="search_page4" url="http://www.filmtipset.se/hitta?q=${search.title}&amp;p=3" />

					<parse name="search_next_page" input="${search_page4}" regex='${rx_nextpage}' />
					<if test="${rx_nextpage}!=">
						<retrieve name="search_page5" url="http://www.filmtipset.se/hitta?q=${search.title}&amp;p=4" />
					</if>
				</if>
			</if>
		</if>

		<!-- if we got a search result page, this is used. if not, regex does not match so we dont process the outer loop. -->
		<parse name="search_results_block" input="${search_page}" regex='${rx_search_results_block}' />
		<if test="${search_results_block}!=">

			<loop name="search_results_verified" on="search_results_block">
				<parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results}" />
				<loop name='curr_details' on='movie_details' limit="25">
					<add name="counter" value1="${count}" value2="${offset}" />
					<set name="movie[${counter}].title" value="${curr_details[1]}" />
					<set name="movie[${counter}].year" value="${curr_details[2]}" />
					<set name="movie[${counter}].site_id" value="${curr_details[0]:htmldecode}" />
					<set name="movie[${counter}].details_url" value="http://www.filmtipset.se/film/${curr_details[0]:htmldecode}"/>

					<retrieve name="details_page" url="${movie[${counter}].details_url}" />
					<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
					<set name='movie[${counter}].imdb_id' value='tt${imdb[0][0]}'/>

					<parse name="alternate_title_block" input="${details_page}" regex='${rx_alternate_title_block}'/>
					<parse name='alternate_title' input='${alternate_title_block}' regex='${rx_alternate_title}'/>
					<set name='movie[${counter}].alternate_titles' value=''/>
					<loop name="currAlternate_title" on="alternate_title">
						<set name='movie[${counter}].alternate_titles' value='${movie[${counter}].alternate_titles}|${currAlternate_title[0]}'/>
					</loop>

					<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
					<set name='movie[${counter}].popularity' value='${popularity[0][0]}'/>
				</loop>
			</loop>
		  
		</if>

		<parse name="search_results_block" input="${search_page2}" regex='${rx_search_results_block}' />
		<if test="${search_results_block}!=">

			<loop name="search_results_verified" on="search_results_block">
				<parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results}" />
				<set name="offset" value="25"/>
				<loop name='curr_details' on='movie_details' limit="25">
					<add name="counter" value1="${count}" value2="${offset}" />
					<set name="movie[${counter}].title" value="${curr_details[1]}" />
					<set name="movie[${counter}].year" value="${curr_details[2]}" />
					<set name="movie[${counter}].site_id" value="${curr_details[0]:htmldecode}" />
					<set name="movie[${counter}].details_url" value="http://www.filmtipset.se/film/${curr_details[0]:htmldecode}"/>

					<retrieve name="details_page" url="${movie[${counter}].details_url}" />
					<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
					<set name='movie[${counter}].imdb_id' value='tt${imdb[0][0]}'/>

					<parse name="alternate_title_block" input="${details_page}" regex='${rx_alternate_title_block}'/>
					<parse name='alternate_title' input='${alternate_title_block}' regex='${rx_alternate_title}'/>
					<set name='movie[${counter}].alternate_titles' value=''/>
					<loop name="currAlternate_title" on="alternate_title">
						<set name='movie[${counter}].alternate_titles' value='${movie[${counter}].alternate_titles}|${currAlternate_title[0]}'/>
					</loop>

					<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
					<set name='movie[${counter}].popularity' value='${popularity[0][0]}'/>
				</loop>
			</loop>
		  
		</if>

		<parse name="search_results_block" input="${search_page3}" regex='${rx_search_results_block}' />
		<if test="${search_results_block}!=">

			<loop name="search_results_verified" on="search_results_block">
				<parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results}" />
				<set name="offset" value="50"/>
				<loop name='curr_details' on='movie_details' limit="25">
					<add name="counter" value1="${count}" value2="${offset}" />
					<set name="movie[${counter}].title" value="${curr_details[1]}" />
					<set name="movie[${counter}].year" value="${curr_details[2]}" />
					<set name="movie[${counter}].site_id" value="${curr_details[0]:htmldecode}" />
					<set name="movie[${counter}].details_url" value="http://www.filmtipset.se/film/${curr_details[0]:htmldecode}"/>

					<retrieve name="details_page" url="${movie[${counter}].details_url}" />
					<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
					<set name='movie[${counter}].imdb_id' value='tt${imdb[0][0]}'/>

					<parse name="alternate_title_block" input="${details_page}" regex='${rx_alternate_title_block}'/>
					<parse name='alternate_title' input='${alternate_title_block}' regex='${rx_alternate_title}'/>
					<set name='movie[${counter}].alternate_titles' value=''/>
					<loop name="currAlternate_title" on="alternate_title">
						<set name='movie[${counter}].alternate_titles' value='${movie[${counter}].alternate_titles}|${currAlternate_title[0]}'/>
					</loop>

					<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
					<set name='movie[${counter}].popularity' value='${popularity[0][0]}'/>
				</loop>
			</loop>
		  
		</if>

		<parse name="search_results_block" input="${search_page4}" regex='${rx_search_results_block}' />
		<if test="${search_results_block}!=">

			<loop name="search_results_verified" on="search_results_block">
				<parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results}" />
				<set name="offset" value="75"/>
				<loop name='curr_details' on='movie_details' limit="25">
					<add name="counter" value1="${count}" value2="${offset}" />
					<set name="movie[${counter}].title" value="${curr_details[1]}" />
					<set name="movie[${counter}].year" value="${curr_details[2]}" />
					<set name="movie[${counter}].site_id" value="${curr_details[0]:htmldecode}" />
					<set name="movie[${counter}].details_url" value="http://www.filmtipset.se/film/${curr_details[0]:htmldecode}"/>

					<retrieve name="details_page" url="${movie[${counter}].details_url}" />
					<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
					<set name='movie[${counter}].imdb_id' value='tt${imdb[0][0]}'/>

					<parse name="alternate_title_block" input="${details_page}" regex='${rx_alternate_title_block}'/>
					<parse name='alternate_title' input='${alternate_title_block}' regex='${rx_alternate_title}'/>
					<set name='movie[${counter}].alternate_titles' value=''/>
					<loop name="currAlternate_title" on="alternate_title">
						<set name='movie[${counter}].alternate_titles' value='${movie[${counter}].alternate_titles}|${currAlternate_title[0]}'/>
					</loop>

					<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
					<set name='movie[${counter}].popularity' value='${popularity[0][0]}'/>
				</loop>
			</loop>
		  
		</if>

		<parse name="search_results_block" input="${search_page5}" regex='${rx_search_results_block}' />
		<if test="${search_results_block}!=">

			<loop name="search_results_verified" on="search_results_block">
				<parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results}" />
				<set name="offset" value="100"/>
				<loop name='curr_details' on='movie_details' limit="25">
					<add name="counter" value1="${count}" value2="${offset}" />
					<set name="movie[${counter}].title" value="${curr_details[1]}" />
					<set name="movie[${counter}].year" value="${curr_details[2]}" />
					<set name="movie[${counter}].site_id" value="${curr_details[0]:htmldecode}" />
					<set name="movie[${counter}].details_url" value="http://www.filmtipset.se/film/${curr_details[0]:htmldecode}"/>

					<retrieve name="details_page" url="${movie[${counter}].details_url}" />
					<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
					<set name='movie[${counter}].imdb_id' value='tt${imdb[0][0]}'/>

					<parse name="alternate_title_block" input="${details_page}" regex='${rx_alternate_title_block}'/>
					<parse name='alternate_title' input='${alternate_title_block}' regex='${rx_alternate_title}'/>
					<set name='movie[${counter}].alternate_titles' value=''/>
					<loop name="currAlternate_title" on="alternate_title">
						<set name='movie[${counter}].alternate_titles' value='${movie[${counter}].alternate_titles}|${currAlternate_title[0]}'/>
					</loop>

					<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
					<set name='movie[${counter}].popularity' value='${popularity[0][0]}'/>
				</loop>
			</loop>
		  
		</if>
	</action>

	<action name="get_details">
		<!-- if we have a site id we can continue -->
			<!-- use TMDBScore value to enable TMDB score instead of filmtipset's grade -->
			<set name="TMDBScore" value="true" />

			<retrieve name="details_page" url="${movie.details_url}"/>

			<set name="rx_directors_block">
				<![CDATA[
				<td class="label">Regissör[\w|\W]*?Manus<\/td>
				]]>
			</set>
			<set name="rx_directors_writers_genres_actors">
				<![CDATA[
				<a href=".+?">(.+?)<\/a>
				]]>
			</set>
			<set name="rx_writers_block">
				<![CDATA[
				<td class="label">Manus[\w|\W]*?<\/tr>
				]]>
			</set>
			<set name="rx_genre_block">
				<![CDATA[
				<a href="\/genre\/.*?">[\w|\W]*?<\/span>
				]]>
			</set>
			<set name="rx_actors_block">
				<![CDATA[
				<td class="label" valign="top">Skådespelare[\w|\W]*?<\/tr>
				]]>
			</set>
			<set name="rx_runtime">
				<![CDATA[
				 <i class="fa fa-clock-o"><\/i> (\d+)min<\/span>
				]]>
			</set>

			<set name="rx_score">
				<![CDATA[
				<span class="score">(.+?)<\/span><br\/>av 5<\/span>
				]]>
			</set>
			<set name="rx_popularity">
				<![CDATA[
				Betygsantal<br\/><strong>(\d+) st<\/strong>
				]]>
			</set>
			<set name="rx_plot">
				<![CDATA[
				<p class="moviedescription">([\w|\W]*?)<\/p>
				]]>
			</set>
			<set name="rx_imdb">
				<![CDATA[
				tt0{0,2}(\d{7,8})"
				]]>
			</set>
			<set name="rx_certification">
				<![CDATA[
				<span class="certification">([\w|\W]*?)</span>
				]]>
			</set>

			<set name="rx_tagline">
				<![CDATA[
				<h3 class="tagline" dir="auto">([\w|\W]*?)</h3>
				]]>
			</set>
			<set name="rx_tmdb_score">
				<![CDATA[
				data-percent="(\d+)"
				]]>
			</set>
			<set name="rx_tmdb_url">
				<![CDATA[
				<link rel="canonical" href="(.*?)">
				]]>
			</set>
			<set name="rx_tmdb_popularity">
				<![CDATA[
				<h3>(.*?).betygs
				]]>
			</set>
			<set name="rx_language">
				<![CDATA[
				Originalspråk.</bdi></strong>([\w|\W]*?)</p>
				]]>
			</set>
			<set name="rx_studios_block">
				<![CDATA[
				Production compan.+?<\/a><\/li><\/ul>
				]]>
			</set>
			<set name="rx_studios">
				<![CDATA[
				>([\w ]+)<\/a>
				]]>
			</set>
			<set name="rx_release_date">
				<![CDATA[
				<span class="release">\n\s+(\d+-\d+-\d+)\s+\(
				]]>
			</set>
			<set name="rx_release_date_releaseinfo">
				<![CDATA[
				Sweden[\r\n]</a></td>[\r\n]<td class="release-date-item__date" align="right">(\d+ \w+ \d+)<
				]]>
			</set>
			<set name="rx_release_date_releaseinfo_first">
				<![CDATA[
				class="ipc-metadata-list-item__list-content-item" aria-disabled="false">(\w+ \d+, \d+)<\/span>
				]]>
			</set>

			<set name="rx_plotkeywords">
				<![CDATA[
				keyword\/.*?">(.*?)<\/a>
				]]>
			</set>

			<!-- Directors -->
			<parse name="directors_block" input="${details_page}" regex='${rx_directors_block}'/>
			<parse name='directors' input='${directors_block}' regex='${rx_directors_writers_genres_actors}'/>
			<set name='movie.directors' value=''/>
			<loop name='currDirector' on='directors'>
				<set name='movie.directors' value='${movie.directors}|${currDirector[0]}'/>
			</loop>

			<!-- Writers -->
			<parse name="writers_block" input="${details_page}" regex='${rx_writers_block}'/>
			<parse name='writers' input='${writers_block}' regex='${rx_directors_writers_genres_actors}'/>
			<set name='movie.writers' value=''/>
			<loop name='currWriter' on='writers'>
				<set name='movie.writers' value='${movie.writers}|${currWriter[0]}'/>
			</loop>

			<!-- Genres -->
			<parse name="genres_block" input="${details_page}" regex='${rx_genre_block}'/>
			<parse name='genres' input='${genres_block[0]}' regex='${rx_directors_writers_genres_actors}'/>
			<set name='movie.genres' value=''/>
			<loop name='currGenre' on='genres'>
				<set name='movie.genres' value='${movie.genres}|${currGenre[0]:htmldecode}'/>
			</loop>

			<!-- Actors -->
			<parse name="actors_block" input="${details_page}" regex='${rx_actors_block}'/>
			<parse name='actors' input='${actors_block}' regex='${rx_directors_writers_genres_actors}'/>
			<set name='movie.actors' value=''/>
			<loop name='currActor' on='actors'>
				<set name='movie.actors' value='${movie.actors}|${currActor[0]}'/>
			</loop>

			<!-- Runtime -->
			<parse name="runtime" input="${details_page}" regex='${rx_runtime}'/>
			<set name='movie.runtime' value='${runtime[0][0]}'/>

			<!-- Score -->
			<parse name="score_block" input="${details_page}" regex='${rx_score}'/>
			<multiply name='scoretot' value1='${score_block[0][0]}' value2='2' />
			<set name='movie.score' value='${scoretot}'/>

			<!-- Popularity -->
			<parse name="popularity" input="${details_page}" regex='${rx_popularity}'/>
			<set name='movie.popularity' value='${popularity[0][0]}'/>

			<!-- Plot Summary -->
			<parse name="summary" input="${details_page}" regex="${rx_plot}"/>
			<replace name="summary_clean" input="${summary[0][0]}" pattern="\s+" with=" " />
			<set name="movie.summary" value="${summary_clean:striptags}" />

			<!-- IMDb ID -->
			<parse name="imdb" input="${details_page}" regex='${rx_imdb}'/>
			<set name='movie.imdb_id' value='tt${imdb[0][0]}'/>

			<!-- Certification -->
			<retrieve name="tmdb_page" url="https://www.themoviedb.org/redirect?external_source=imdb_id&amp;external_id=${movie.imdb_id}"/>
			<parse name="certification" input="${tmdb_page}" regex='${rx_certification}'/>
			<replace name="certification" input="${certification[0][0]}" pattern="%2B" with="+" />
			<set name='movie.certification' value='${certification}'/>

			<!-- Language -->
			<parse name="language" input="${tmdb_page}" regex='${rx_language}' />
			<set name='movie.language' value='${language[0][0]}'/>

			<!-- Tagline -->
			<parse name="tagline" input="${tmdb_page}" regex='${rx_tagline}'/>
			<set name='movie.tagline' value='${tagline[0][0]:htmldecode}'/>

			<!-- Score and Popularity -->
			<if test="${TMDBScore}=true">
				<parse name="tmdb_score" input="${tmdb_page}" regex="${rx_tmdb_score}" />
				<set name="movie.score" value="${tmdb_score[0][0]}" />
				<parse name="tmdb_url" input="${tmdb_page}" regex="${rx_tmdb_url}" />
				<set name="tmdb_urlsuffix" value="/remote/rating/details?translate=false&amp;language=sv-SE&amp;mobile=false" />
				<set name="tmdb_url" value="${tmdb_url[0][0]}${tmdb_urlsuffix}" />
				<retrieve name="tmdb_detailspage" url="${tmdb_url}"/>
				<parse name="tmdb_popularity" input="${tmdb_detailspage}" regex="${rx_tmdb_popularity}" />
				<replace name="tmdb_popularity" input="${tmdb_popularity[0][0]}" pattern=" " with="" />
				<set name="movie.popularity" value="${tmdb_popularity}" />
			</if>

			<!-- Studios 
			<parse name="studios_block" input="${imdb_page}" regex="${rx_studios_block}" />
			<parse name="studios" input="${studios_block}" regex="${rx_studios}" />
			<set name="movie.studios" value="|" />
			<loop name="currStudio" on="studios" limit="10">
				<set name="movie.studios" value="${movie.studios}${currStudio[0]:htmldecode}|" />
			</loop> -->

			<!-- Release Date -->
			<parse name="release_date" input="${tmdb_page}" regex="${rx_release_date}" />
			<set name="movie.release_date" value="${release_date[0][0]}" />

			<!-- Plot Keywords -->
			<parse name="plotkeywords" input="${tmdb_page}" regex="${rx_plotkeywords}" />
			<set name="movie.plotkeywords" value="|" />
			<loop name="currKeyword" on="plotkeywords" limit="100">
				<set name="movie.plotkeywords" value="${movie.plotkeywords}${currKeyword[0]:htmldecode}|" />
			</loop>

	</action>

</ScriptableScraper>
