<?xml version="1.0" encoding="utf-8" ?>
<ScriptableScraper>
  <details>
    <!-- These details are for display purposes only. -->
    <name>filmkatalogus.hu</name>
    <author>Duka Istvan (dukus)</author>
    <description>This script pulls data from www.filmkatalogus.hu.</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>422197</id>
    <version major="1" minor="1" point="0"/>
    <published month="12" day="3" year="2010"/>
    
    <!--
    These fields are used for categorization purposes. Seperate multiple 
    types with a pipe | character.
    -->
    <type>MovieDetailsFetcher</type>
    <language>hu</language>

   </details>
  
  
  <action name="search">
    
    <set name="offset" value="0" />
    
    <!-- Regular Expressions -->

    <!-- Exact title -->
    <set name="rx_details_page_block">
      <![CDATA[
      <H1>.+?(\d{4}).+Teljes st.blista
      ]]>
    </set>

    <!-- Search result page -->
    <set name="rx_search_results">
      <![CDATA[
      <TABLE ALIGN=CENTER CLASS='tabla' WIDTH='100%'>(.+?)<DIV CLASS='hiba'>
      ]]>
    </set>

    <!-- Search result titles -->
    <set name="rx_search_results_block">
      <![CDATA[
      <A HREF='(/.+?)' TITLE='(.+?)'>.+?</A> \((\d{4})
      ]]>
    </set>

    <!-- Retrieve other results using Title -->
    <retrieve name="search_page" url="http://www.filmkatalogus.hu/kereses?keres0=1&amp;gyorskeres=0&amp;szo0=${search.title:safe(ISO-8859-2)}" />
 
    <!-- if we got a details page, this is used. if not, regex does not match so we dont process the loop-->
    <parse name="details_page_block" input="${search_page}" regex="${rx_details_page_block}"/>
    <loop name="details_page_verified" on="details_page_block">
      <add name="counter" value1="${count}" value2="${offset}" />
      <parse name="title_title" input="${details_page_verified}" regex="&lt;H1&gt;(.+?)&lt;/H1&gt;"/>
      <set name="movie[${counter}].title" value="${title_title[0][0]:htmldecode}"/>
	  <parse name="title_year" input="${details_page_verified}" regex="&lt;H2&gt;.+?(\d{4})"/>
      <set name="movie[${counter}].year" value="${title_year[0][0]:htmldecode}"/>
      <set name="movie[${counter}].site_id" value="12345"/>
      <set name="movie[${counter}].details_url" value="http://www.filmkatalogus.hu/kereses?szo0=${search.title:safe}&amp;keres0=1&amp;gyorskeres=0"/>

      <set name="movie[0].popularity" value="100"/>
    </loop>

	
    <!-- 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}"/>
    <loop name="search_results_verified" on="search_results_block">

      <parse name="movie_details" input="${search_results_verified}" regex="${rx_search_results_block}" />
      <loop name='curr_details' on='movie_details'>
        <add name="counter" value1="${count}" value2="${offset}" />
        <set name="movie[${counter}].title" value="${curr_details[1]:htmldecode}"/>
        <set name="movie[${counter}].year" value="${curr_details[2]:htmldecode}"/>
		<set name="movie[${counter}].site_id" value="12345"/>
        <set name="movie[${counter}].details_url" value="http://www.filmkatalogus.hu${curr_details[0]}"/>
        <subtract name="movie[${counter}].popularity" value1="100" value2="${counter}"/>
      </loop>

    </loop>
  </action>


 <action name="get_details">
    
    
    <set name="rx_plot">
      <![CDATA[
      <p class="plotpar">\s*(.+?)<i>.*?</i>.*?</p>
      ]]>
    </set>

    <set name="rx_plot2">
      <![CDATA[
      <DIV ALIGN=JUSTIFY>(.+?)</DIV>
      ]]>
    </set>
    
	<set name="rx_details_page_block">
      <![CDATA[
      <title>.+?\(\d{4}[\/IVX]*\).*?</title>.+</body>
      ]]>
    </set>
    <retrieve name="details_page" url="${movie.details_url}"/>
<!--     <set name="movie.imdb_id" value="${movie.site_id}"/> -->

    <!-- Title and Year -->
    <parse name="title_year" input="${details_page}" regex="&lt;H1&gt;(.+?)&lt;/H1&gt;.+?(\d{4})"/>
    <set name="movie.title" value="${title_year[0][0]:htmldecode}"/>
    <set name="movie.year" value="${title_year[0][1]:htmldecode}"/>

    <!-- Original tile-->
    <parse name="title_year" input="${details_page}" regex="&lt;H2&gt;\((.+?), (\d{4}).&lt;/H2&gt;"/>
	<if test="${title_year[0][0]:htmldecode}!=">
        <set name="movie.alternate_titles" value="${title_year[0][0]:htmldecode}"/>
	</if>

	<if test="${title_year[0][0]:htmldecode}=">
        <set name="movie.alternate_titles" value="${movie.title}"/>
	</if>

    <!-- Directors -->
    <parse name="directors_block" input="${details_page}" regex='Rendezte:.*?&lt;/table&gt;'/>
    <parse name="directors" input="${directors_block}" regex='&lt;A HREF=.+?&apos;&gt;(.+?)&lt;/A&gt;'/>
    <set name='movie.directors' value=''/>
    <loop name='currDirector' on='directors'>
      <set name="movie.directors" value="${movie.directors}|${currDirector[0]:htmldecode}"/>
    </loop>

    <!-- Writers -->
    <parse name="writers_block" input="${details_page}" regex='&lt;div class="info"&gt;\s+&lt;h5&gt;Writer[s]?(?: &lt;a href="[^"]+"&gt;\([^)]+\)&lt;/a&gt;)?:&lt;/h5&gt;.+?&lt;/div&gt;'/>
    <parse name='writers' input="${writers_block}" regex='&lt;a href="/name/nm\d+/"&gt;([^&lt;]+)&lt;/a&gt;'/>
    <set name='movie.writers' value=''/>
    <loop name='currWriter' on='writers'>
      <set name='movie.writers' value='${movie.writers}|${currWriter[0]:htmldecode}'/>
    </loop>
    

    <!-- Actors -->
    <parse name="actors_block" input="${details_page}" regex='Szerepl.k:(.+?)&lt;/TABLE&gt;'/>
    <parse name='actors' input='"${actors_block}' regex='&lt;A HREF=.+?&apos;&gt;(.+?)&lt;/A&gt;\n&lt;DIV ALIGN=RIGHT&gt;(.+?)&lt;/DIV&gt;'/>
    <set name='movie.actors' value=''/>
    <loop name='currActor' on='actors'>
      <set name='movie.actors' value="${movie.actors}|${currActor[0]:htmldecode} mint ${currActor[1]:htmldecode}"/>
    </loop>

    <!-- Genres -->
    <parse name="genres_block" input="${details_page}" regex='&lt;B&gt;St.lus:&lt;/B&gt;(.+?)&lt;BR&gt;'/>
	<set name='genres_block_clean' value='${genres_block[0][0]}'/>
    <parse name='genres' input='${genres_block_clean}' regex='([^,]+)'/>
    <set name='movie.genres' value=''/>
    <loop name='currGenre' on='genres'>
      <set name='movie.genres' value='${movie.genres}|${currGenre[0]}'/>
    </loop>


    <!-- Runtime -->
    <parse name="runtime" input="${details_page}" regex='&lt;B&gt;Hossz:&lt;/B&gt;.*?(\d+) perc'/>
    <set name='movie.runtime' value='${runtime[0][0]:htmldecode}'/>

    <!-- Tagline -->
    <parse name="tagline" input="${details_page}" regex='&lt;h5&gt;Tagline:&lt;/h5&gt;\s+([^\n\r]+?)(?:\s+)?&lt;'/>
    <set name='movie.tagline' value='${tagline[0][0]:htmldecode}'/>
    
   
    <!-- Popularity -->
    <parse name="votes" input="${details_page}" regex='Ez a film a +?(.+?). helyen'/>
    <set name='movie.popularity' value='${votes[0][0]:htmldecode}'/>

    <!-- Language -->
    <parse name="language" input="${details_page}" regex='&lt;B&gt;Nemzet:&lt;/B&gt;(.+?)&lt;BR&gt;'/>
    <set name='movie.language' value='${language[0][0]:htmldecode}'/>
    
	<!-- IMDB id -->
    <retrieve name="imdb_find" url="http://www.google.com/search?hl=it&amp;hs=a8f&amp;q=site%3Awww.imdb.com+${movie.alternate_titles:safe}+(${movie.year:safe})" />
    <parse name="imdb_parser" input="${imdb_find}" regex='&lt;h3.class=.r.&gt;&lt;a.href=&quot;[^&quot;]+imdb\.com/title/(tt\d+)/&quot;[^&gt;]*&gt;(.+?)(?=&lt;/a&gt;)' />
    <set name="movie.imdb_id" value="${imdb_parser[0][0]}"/>   
	
    <!-- Plot Summary -->
    <parse name="summary2" input="${details_page}" regex="${rx_plot2}"/>
    <set name="summary_clean" value="${summary2[0][0]:striptags}" />
    <set name="movie.summary" value="${summary_clean:htmldecode}" />

	      <!-- Retrieve other details from IMDb -->
      <if test="${movie.imdb_id}!=">
	  
	
        <retrieve name="imdb_details_page" url="http://www.imdb.com/title/${movie.imdb_id}"/>

        <!-- IMDb ID -->
        <parse name="imdb" input="${imdb_details_page}" regex='&lt;link rel="canonical" href="http://www.imdb.com/title/(tt[\d]{7})/" /&gt;' />
        <set name="movie.imdb_id" value="${imdb[0][0]}" />

      <!-- Directors -->
      <parse name="directors_block" input="${imdb_details_page}" regex='&lt;h5&gt;Director[s]?:&lt;/h5&gt;.*?&lt;/div&gt;'/>
      <parse name="directors" input="${directors_block}" regex='&lt;a href="/name/nm\d{7}/"[^&gt;]*&gt;([^&lt;]+)&lt;/a&gt;'/>
      <set name='movie.directors' value=''/>
      <loop name='currDirector' on='directors'>
        <set name="movie.directors" value="${movie.directors}|${currDirector[0]:htmldecode}"/>
      </loop>

      <!-- Writers -->
      <parse name="writers_block" input="${imdb_details_page}" regex='&lt;div class="info"&gt;\s+&lt;h5&gt;Writer[s]?(?: &lt;a href="[^"]+"&gt;\([^)]+\)&lt;/a&gt;)?:&lt;/h5&gt;.+?&lt;/div&gt;'/>
      <parse name='writers' input="${writers_block}" regex='&lt;a href="/name/nm\d+/"[^&gt;]*&gt;([^&lt;]+)&lt;/a&gt;'/>
      <set name='movie.writers' value=''/>
      <loop name='currWriter' on='writers'>
        <set name='movie.writers' value='${movie.writers}|${currWriter[0]:htmldecode}'/>
      </loop>

        <!-- Certification -->
        <parse name="certification" input="${imdb_details_page}" regex='&gt;\s+USA:((?:G)|(?:PG)|(?:PG-13)|(?:R)|(?:X)|(?:NC-17))&lt;/a&gt;'/>
        <set name='movie.certification' value='${certification[0][0]:htmldecode}'/>

        <!-- Runtime -->
        <parse name="runtime" input="${imdb_details_page}" regex='&lt;h5&gt;Runtime:&lt;/h5&gt;.*?(\d+) min\s+'/>
        <set name='movie.runtime' value='${runtime[0][0]:htmldecode}'/>

      <!-- Score -->
      <parse name="score" input="${imdb_details_page}" regex='&lt;span class=&quot;rating-rating&quot;&gt;(\d+.\d+)'/>
      <set name='movie.score' value='${score[0][0]:htmldecode}'/>

		<!-- Popularity -->
		<parse name="votes" input="${imdb_details_page}" regex='&quot;ratings&quot; class=&quot;tn15more&quot;&gt;([^\s]+) votes&lt;/a&gt;'/>
		<set name='movie.popularity' value='${votes[0][0]:htmldecode}'/>
		
      </if>
	
  </action>
</ScriptableScraper>
