(*	
SCRIPT INFO:

---------------------------------------------

SCRIPT:		Rottentomatoes Script 
AUTHOR:			Ivek23
VERSION:		0.1.1.7
DATE:			31/01/2016

---------------------------------------------
*)

//SCRIPT BEGINS HERE...

//Some useful constants

const

//Script types
	stMovies		= 0;
	stPeople		= 1;
	stPoster		= 2;
	
//Script modes
	smSearch		= 0;
	smNormal		= 1;
	smCast			= 2;
	smReview		= 3;
	//smCredits		= 4;
	//smDVDReleases	= 5;
	//smBiography		= 6;
	//smGenreindex	= 7;
	//smAwards		= 8;
	//smMiscellaneous	= 9;
	smPoster		= 10;
	smFinished		= 11;
	
//Parse results
	prError			= 0;
	prFinished		= 1;
	prList			= 2;
	prListImage		= 3;
	prDownload		= 4;
	
//Prefix modes
	pmNone			= 0;
	pmEnd			= 1;
	pmBegin			= 2;
	pmRemove		= 3;
	
//Download methods
	dmGET			= 0;
	dmPOST			= 1;
	
//Movie fields
	mfURL			= 0;
	mfTitle			= 1;
	mfOrigTitle		= 2;
	mfAka			= 3;
	mfYear			= 4;
	mfGenre			= 5;
	mfCategory		= 6;
	mfCountry		= 7;
	mfStudio		= 8;
	mfMPAA			= 9;
	mfRating		= 10;	
	mfTags			= 11;
	mfTagline		= 12;
	mfDescription	= 13;
	mfDuration		= 14;
	mfFeatures		= 15;
	
//People fields
    pfURL        	= 0;
	pfName       	= 1;
	pfTransName  	= 2;
	pfAltNames   	= 3;
	pfBirthday   	= 4;
	pfBirthplace 	= 5;
	pfGenre      	= 6;
	pfBio        	= 7;
	pfDeathDate  	= 8;  
	//pfComment    	= 9;
	//pfBookmark   	= 10;
	//pfPid        	= 11; 
	//pfCareer     	= 12; 
	
//Credits types
	ctActors		= 0;
	ctDirectors		= 1;
	ctWriters		= 2;
	ctComposers		= 3;
	ctProducers		= 4;
	
//Script data
	SCRIPT_VERSION	= '0.1.1.7';
	SCRIPT_NAME		= 'Rottentomatoes Script';
	SCRIPT_DESC		= '[EN] Get Movie Information about from Rottentomatoes.com';
	SCRIPT_LANG		= $09; //English
	SCRIPT_TYPE		= stMovies;
	
	BASE_URL		= 'http://www.rottentomatoes.com';
	RATING_NAME		= 'Rottentomatoes';
	//SEARCH_STR		= 'http://www.rottentomatoes.com/search/?search=%s&sitesearch=rt';
	SEARCH_STR		= 'http://www.rottentomatoes.com/search/?search=%s';
	CODE_PAGE		= 28591;	//Use 0 for Autodetect
	//CODE_PAGE		= 65001;	//Use 0 for Autodetect
	//CODE_PAGE		= 0;	//Use 0 for Autodetect
	
//User Options
//	GET_THEMES	= True;	//Set to False to ensure ~mfCategory~ not added even if 'Overwrite fields' setting allows
//	GET_POSTER  = False; //Set to False or True
	GET_RATING	= True;	//Set to False to ensure ~mfRating~ not set even if 'Overwrite setting' fields setting allows

//Global variables
var
ELI : Integer;
Mode : Byte;
ExtraLinks : array [smCast..smPoster] of String;

//Functions
function GetScriptVersion : String;
begin
	Result := SCRIPT_VERSION;
end;

function GetScriptName : String;
begin
	Result :=  SCRIPT_NAME;
end;

function GetScriptDesc : String;
begin
	Result := SCRIPT_DESC;
end;

function GetRatingName : String;
begin
	Result := RATING_NAME;
end;

function GetScriptLang: Cardinal;
begin
	Result := SCRIPT_LANG;
end;

function GetCodePage : Cardinal;
begin
	Result := CODE_PAGE;
end;

function GetBaseURL : AnsiString;
begin
	Result := BASE_URL;
end;

function GetDownloadURL : AnsiString;
begin
	if (Mode = smSearch) then
		Result := SEARCH_STR
	else
		Result := ExtraLinks[Mode];
end;

function GetDownloadMethod : Byte;
begin
	Result := dmGET;
end;

function GetPrefixMode : Byte;
begin
	Result := pmBegin;
end;

function GetScriptType : Byte;
begin
	Result := SCRIPT_TYPE;
end;

function GetCurrentMode : Byte;
begin
	Result := Mode;
end;

procedure ParseMovie(MovieURL : String; HTML : String);
var
	curPos, endPos : Integer;
	TmpStr, TmpStr1, TmpStr2 : String;
begin

//Get ~mfURL~ or ~RT Url~
endPos := Pos('" rel="canonical" itemprop="url"/>', HTML);
if endPos > 0 then begin
	curPos := PrevPos('</title> <link href="', HTML, endPos);
	AddFieldValue(mfURL, Copy(HTML, curPos + 21, endPos - curPos - 21));	
end else
AddFieldValue(mfURL, MovieURL);


//  ~TOMATOMETER~

//  ~Rating for All Critics~
//~Average Rating~ or ~RT Rating~ for All Critics
curPos := PosFrom('<div id="all-critics-numbers" class="tab-pane active"', HTML, EndPos);
//curPos := PosFrom('<<meta itemprop="name" content="All Critic Tomatometer"/>', HTML, EndPos);
if curPos > 0 then begin
	EndPos := curPos;
	TmpStr :=  TextBetween(HTML, '<span class="subtle superPageFontColor">Average Rating: </span>', '/10 </div>', True, curPos);
 if TmpStr = '0' then
	TmpStr := '';
if GET_RATING then
	AddFieldValue(mfRating, TmpStr);
	AddCustomFieldValueByName('RT Rating', TmpStr);
 if TmpStr = '' then
	TmpStr := 'rating unknown';
end;

//  ~Rating for Top Critics~
//~Average Rating~ or ~RT Top Rating~ for Top Critics
curPos := PosFrom('<div id="top-critics-numbers" class="tab-pane', HTML, EndPos);
if curPos > 0 then begin
//	EndPos := curPos;
	TmpStr1 :=  TextBetween(HTML, '<span class="subtle superPageFontColor">Average Rating: </span>', '/10 </div>', True, curPos);
 if TmpStr1 = '0' then
	TmpStr1 := '';
    AddCustomFieldValueByName('RT Top Rating', TmpStr1);
 if TmpStr1 = '' then
	TmpStr1 := 'rating unknown';
 	EndPos := curPos;
end;
 
 
//  ~AUDIENCE SCORE~  

//~Audience: Average Rating~ or ~RT Audience Rating~ for Audience Score
//curPos := PosFrom('<div class="audience-info">', HTML, EndPos);
curPos := Pos('<div class="audience-score meter">', HTML);
if curPos > 0 then begin
//	EndPos := curPos;
	TmpStr2 :=  FloatToStr(StrToFloat(TextBetween(HTML, '<div> <span class="subtle superPageFontColor">Average Rating:</span>', '/5 </div>', True, curPos)) * 2);
 if TmpStr2 = '0' then
	TmpStr2 := '';
    AddCustomFieldValueByName('RT Audience Rating', TmpStr2);
 if TmpStr2 = '' then
	TmpStr2 := 'rating unknown';
 	EndPos := curPos;
end;
 
end;


procedure ParseSearchResults(HTML : String);
var
	curPos, endPos : Integer;
	Title, Year, URL, Preview : String;
begin
	curPos := Pos('<div id="results_movies_tab" class="ui-tabs-hide">', HTML);
	if curPos < 1 then
		Exit;

LogMessage('Parsing search results...');

	curPos  := PosFrom('<img src="', HTML, curPos)+10;
	endPos  := PosFrom('" width=', HTML, curPos);
	Preview := Trim(Copy(HTML, curPos, endPos - curPos));
	
curPos := PosFrom('<a class="unstyled articleLink" href="/m/', HTML, curPos);
while curPos > 0 do begin
	endPos	:= PosFrom('">', HTML, curPos);
	URL		:= 'http://www.rottentomatoes.com'+Trim(Copy(HTML, curPos+38, endPos - curPos-38));

	curPos	:= PosFrom('">', HTML, curPos);
	endPos	:= PosFrom('</a>', HTML, curPos);
	Title	:= TextBetween(HTML, '">', '</a>', True, curPos);  
	
	curPos	:= PosFrom('<span class="movie_year">', HTML, curPos);
	endPos	:= PosFrom('</span> </div>', HTML, curPos);
	Year	:= TextBetween(HTML, '<span class="movie_year">', '</span> </div>', True, curPos);
	
	AddSearchResult(Title+' '+Year, '', '', URL, '');
	
	curPos := PosFrom('<a class="unstyled articleLink" href="/m/', HTML, curPos);
  end;
end;

function NextMode(curMode : Integer) : Integer;
var
	I : Integer;
begin
Result := smFinished;
if curMode < Low(ExtraLinks) - 1 then
	curMode := Low(ExtraLinks) - 1;

for I := curMode + 1 to High(ExtraLinks) do
	if ExtraLinks[I] <> '' then begin
		Result := I;
		Break;
	end;
end;

function ParsePage(HTML : String; URL : AnsiString) : Cardinal;
begin
HTML := HTMLToText(HTML);
HTML := StringReplace (HTML, 'http://rottentomatoes.com', 'http://www.rottentomatoes.com', True, True, False);

if Pos('Search Results - Rotten Tomatoes', HTML) > 0 then begin
	ParseSearchResults(HTML);
	Result := prList;
	Exit;

end else
 if Pos(' - Rotten Tomatoes</title>', HTML) > 0 then
    ParseMovie(URL, HTML);

Mode := NextMode(Mode);
if Mode <> smFinished then
	Result := prDownload
else
	Result := prFinished;
end;

begin
Mode := smSearch;
for ELI := Low(ExtraLinks) to High(ExtraLinks) do
	ExtraLinks[ELI] := '';
end.