English > Feature Suggestions
Suggestion for Ivek23
Ivek23:
For unregistered users:
Rottentomatoes (a) script
v 0.1.0.5.a
Rottentomatoes (a).psf
--- Code: ---(*
SCRIPT INFO:
Following until 'SCRIPT BEGINS HERE...' is documentation.
Please see 'USER OPTIONS' in the body of the script.
---------------------------------------------
SCRIPT: Rottentomatoes (a) Script
AUTHOR: Ivek23
VERSION: 0.1.0.5.a
DATE: 04/03/2014
---------------------------------------------
TYPES AND FUNCTIONS
Additional types and functions that can be used in scripts:
Types
TWIDEARRAY : array of String
Field functions
procedure AddSearchResult(Title1, Title2, Year, URL, PreviewURL : String)
procedure AddFieldValue(AField: Integer; AValue : String)
procedure AddMoviePerson(Name, TransName, Role, URL : String; AType : Byte)
procedure AddPersonMovie(Title, OrigTitle, Role, Year, URL : String; AType : Byte)
procedure AddAward(Event, Award, Category, Recipient, Year: String; const Won : Boolean)
procedure AddAwardEx(Event, Award, Category, RecipientVal1, RecipientVal2, Year : String; const Won : Boolean);
procedure AddConnection(Title, OrigTitle, Category, URL, Year: String)
procedure AddEpisode(Title, OrigTitle, Description, URL, Year, Season, Episode : String)
String functions
function Pos(Substr : String; Str: String): Integer
function PosFrom(const SubStr, Str : String; FromIndex : Integer) : Integer
function LastPos(const SubStr, Str : String) : Integer
function PrevPos(const SubStr, Str : String; APos : Integer) : Integer
function RemoveTags(AText : String; doLineBreaks : Boolean) : String
function ExplodeString(AText : String; var Items : TWideArray; Delimiters : String) : Integer
function Copy(S: String; Index, Count: Integer): String
procedure Delete(var S: String; Index, Count: Integer)
procedure Insert(Source: String; var Dest: String; Index: Integer)
function Length(S: String): Integer
function Trim(S: String): String
function CompareText(S1, S2: String): Integer
function CompareStr(S1, S2: String): Integer
function UpperCase(S: String): String
function LowerCase(S: String): String
function AnsiString(S, OldPattern, NewPattern: String; All : Boolean; IgnoreCase : Boolean; WholeWord: Boolean): String
function StrToInt(const S: String): Integer
function IntToStr(const Value: Integer): String
function StrToFloat(const S: String): Extended
function FloatToStr(const Value: Extended): String
function CurrentDateTime : Extended
function DateToStr(Value : Extended) : String
function TimeToStr(Value : Extended) : String
function HTMLValues(const HTML : String; ABegin, AEnd, ItemBegin, ItemEnd : String; ValDelim : String; var Pos : Integer) : String
function HTMLValues2(const HTML : String; ABegin, AEnd, ItemBegin, ItemEnd : String; ValDelim : String; var Pos : Integer) : String
function TextBetween(const HTML : String; ABegin, AEnd : String; doLineBreaks : Boolean; var Pos : Integer) : String
function HTMLToText(const HTML : String) : String
procedure ShowMessage(const Msg, Head : String)
*)
//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.0.5.a';
SCRIPT_NAME = 'Rottentomatoes(a) Script';
SCRIPT_DESC = '[EN] Get Movie Information(a) 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';
CODE_PAGE = 65001; //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;
fullinfo, fullinfo1, fullinfo2 : String;
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;
Date, Title, URL, Month, TmpStr, TmpStr0, TmpStr1, TmpStr2, TmpStr3, TmpStr4, TmpStr5, TmpStr6: String;
DateParts : TWideArray;
begin
//Date ~Updated~ (choose simple or verbose version)
Date := DateToStr(CurrentDateTime);
if Date <> '' then
begin
ExplodeString(Date, DateParts, '-');
Date := DateParts[2] +'.'+ DateParts[1] +'.'+ DateParts[0];
AddCustomFieldValueByName('RTUpdated', Date + ' at ' + TimeToStr(CurrentDateTime) + ' • ' + SCRIPT_NAME + ' ' + SCRIPT_VERSION); // Annoying
end else
LogMessage('date not found');
//Get ~mfURL~ or ~RT Url~
endPos := Pos('" itemprop="url"/>', HTML);
if endPos > 0 then begin
curPos := PrevPos('"canonical" href="', HTML, endPos);
AddFieldValue(mfURL, Copy(HTML, curPos + 18, endPos - curPos - 18));
end else
AddFieldValue(mfURL, MovieURL);
//~Rating~ or ~RT Rating~
curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
if curPos > 0 then begin
EndPos := curPos;
TmpStr := TextBetween(HTML, 'Average Rating: <span>', '/10</span>', True, curPos);
// //TmpStr := StringReplace(TmpStr, ',', '', True, True, False);
if TmpStr = '0' then
TmpStr := '';
if GET_RATING then
AddFieldValue(mfRating, TmpStr);
AddCustomFieldValueByName('RT Rating', TmpStr);
if TmpStr = '' then
TmpStr := 'rating unknown';
//end;
end else
//~Rating~
curPos := PosFrom('<span class="meter popcorn numeric ">', HTML, EndPos);
if curPos > 0 then begin
// EndPos := curPos;
curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
if curPos > 0 then begin
curPos := PosFrom('Average Rating: ', HTML, curPos);
endPos := PosFrom('/5', HTML, curPos);
TmpStr1 := FloatToStr((StrToFloat(Copy(HTML, curPos + 16, endPos - curPos - 16)) * 2));
if TmpStr1 = '0' then
TmpStr1 := '';
if GET_RATING then
AddFieldValue(mfRating, TmpStr1);
AddCustomFieldValueByName('RT Rating', TmpStr1);
if TmpStr1 = '' then
TmpStr1 := 'rating unknown';
end;
EndPos := curPos;
end;
end;
procedure ParseSearchResults(HTML : String);
var
curPos, endPos : Integer;
Title, Year, URL, Preview : String;
begin
curPos := Pos('<ul id="movie_results_ul" class="results_ul" ', HTML);
if curPos < 1 then
Exit;
LogMessage('Parsing search results...');
EndPos := PosFrom('<span class="movieposter">', HTML, EndPos);
curPos := PosFrom('<img src="', HTML, EndPos);
endPos := PosFrom('" width="', HTML, curPos);
Preview := Copy(HTML, curPos+10, EndPos - curPos-10);
curPos := PosFrom('<a target="_top" href="/m/', HTML, curPos);
while (curPos > 0) AND (curPos < PosFrom('<a id="more_movies" href="#results_movies_tab">More Movies...</a>', HTML, endPos)) do begin
endPos := PosFrom('" class=', HTML, curPos);
URL := 'http://www.rottentomatoes.com/'+Trim(Copy(HTML, curPos+23, endPos - curPos-23));
curPos := PosFrom('" class="" >', HTML, curPos);
endPos := PosFrom('</a>', HTML, curPos);
Title := TextBetween(HTML, '" class="" >', '</a>', True, curPos);
curPos := PosFrom('<span class="movie_year">', HTML, curPos);
endPos := PosFrom('</span></h3>', HTML, curPos);
Year := RemoveTags(TextBetween(HTML, '<span class="movie_year">', '</span></h3>', True, curPos), false);
AddSearchResult(Title+' '+Year, '', '', URL, Preview);
EndPos := PosFrom('<span class="movieposter">', HTML, EndPos);
curPos := PosFrom('<img src="', HTML, EndPos);
endPos := PosFrom('" width="', HTML, curPos);
Preview := Copy(HTML, curPos+10, EndPos - curPos-10);
curPos := PosFrom('<a target="_top" 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.
--- End code ---
Ivek23:
For unregistered users:
Rottentomatoes (a1) script
v 0.1.0.5.a
Rottentomatoes (a1).psf
--- Code: ---(*
SCRIPT INFO:
Following until 'SCRIPT BEGINS HERE...' is documentation.
Please see 'USER OPTIONS' in the body of the script.
---------------------------------------------
SCRIPT: Rottentomatoes (a1) Script
AUTHOR: Ivek23
VERSION: 0.1.0.5.a1
DATE: 04/03/2014
---------------------------------------------
TYPES AND FUNCTIONS
Additional types and functions that can be used in scripts:
Types
TWIDEARRAY : array of String
Field functions
procedure AddSearchResult(Title1, Title2, Year, URL, PreviewURL : String)
procedure AddFieldValue(AField: Integer; AValue : String)
procedure AddMoviePerson(Name, TransName, Role, URL : String; AType : Byte)
procedure AddPersonMovie(Title, OrigTitle, Role, Year, URL : String; AType : Byte)
procedure AddAward(Event, Award, Category, Recipient, Year: String; const Won : Boolean)
procedure AddAwardEx(Event, Award, Category, RecipientVal1, RecipientVal2, Year : String; const Won : Boolean);
procedure AddConnection(Title, OrigTitle, Category, URL, Year: String)
procedure AddEpisode(Title, OrigTitle, Description, URL, Year, Season, Episode : String)
String functions
function Pos(Substr : String; Str: String): Integer
function PosFrom(const SubStr, Str : String; FromIndex : Integer) : Integer
function LastPos(const SubStr, Str : String) : Integer
function PrevPos(const SubStr, Str : String; APos : Integer) : Integer
function RemoveTags(AText : String; doLineBreaks : Boolean) : String
function ExplodeString(AText : String; var Items : TWideArray; Delimiters : String) : Integer
function Copy(S: String; Index, Count: Integer): String
procedure Delete(var S: String; Index, Count: Integer)
procedure Insert(Source: String; var Dest: String; Index: Integer)
function Length(S: String): Integer
function Trim(S: String): String
function CompareText(S1, S2: String): Integer
function CompareStr(S1, S2: String): Integer
function UpperCase(S: String): String
function LowerCase(S: String): String
function AnsiString(S, OldPattern, NewPattern: String; All : Boolean; IgnoreCase : Boolean; WholeWord: Boolean): String
function StrToInt(const S: String): Integer
function IntToStr(const Value: Integer): String
function StrToFloat(const S: String): Extended
function FloatToStr(const Value: Extended): String
function CurrentDateTime : Extended
function DateToStr(Value : Extended) : String
function TimeToStr(Value : Extended) : String
function HTMLValues(const HTML : String; ABegin, AEnd, ItemBegin, ItemEnd : String; ValDelim : String; var Pos : Integer) : String
function HTMLValues2(const HTML : String; ABegin, AEnd, ItemBegin, ItemEnd : String; ValDelim : String; var Pos : Integer) : String
function TextBetween(const HTML : String; ABegin, AEnd : String; doLineBreaks : Boolean; var Pos : Integer) : String
function HTMLToText(const HTML : String) : String
procedure ShowMessage(const Msg, Head : String)
*)
//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.0.5.a1';
SCRIPT_NAME = 'Rottentomatoes(a1) Script';
SCRIPT_DESC = '[EN] Get Movie Information(a1) 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';
CODE_PAGE = 65001; //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;
fullinfo, fullinfo1, fullinfo2 : String;
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;
Date, Title, URL, Month, TmpStr, TmpStr0, TmpStr1, TmpStr2, TmpStr3, TmpStr4, TmpStr5, TmpStr6: String;
DateParts : TWideArray;
begin
//Date ~Updated~ (choose simple or verbose version)
Date := DateToStr(CurrentDateTime);
if Date <> '' then
begin
ExplodeString(Date, DateParts, '-');
Date := DateParts[2] +'.'+ DateParts[1] +'.'+ DateParts[0];
AddCustomFieldValueByName('RTUpdated', Date + ' at ' + TimeToStr(CurrentDateTime) + ' • ' + SCRIPT_NAME + ' ' + SCRIPT_VERSION); // Annoying
end else
LogMessage('date not found');
//Get ~mfURL~ or ~RT Url~
endPos := Pos('" itemprop="url"/>', HTML);
if endPos > 0 then begin
curPos := PrevPos('"canonical" href="', HTML, endPos);
AddFieldValue(mfURL, Copy(HTML, curPos + 18, endPos - curPos - 18));
end else
AddFieldValue(mfURL, MovieURL);
//~Rating~ or ~RT Rating~
//curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
//if curPos > 0 then begin
// EndPos := curPos;
// TmpStr := TextBetween(HTML, 'Average Rating: <span>', '/10</span>', True, curPos);
// //TmpStr := StringReplace(TmpStr, ',', '', True, True, False);
// if TmpStr = '0' then
// TmpStr := '';
// AddCustomFieldValueByName('RT Rating', TmpStr);
//if TmpStr = '' then
// TmpStr := 'rating unknown';
//end;
//~Rating~
//If Pos('audience', HTML) > 0 then begin
//If Pos('<span class="meter popcorn numeric ">', HTML) > 0 then begin
curPos := PosFrom('<span class="meter popcorn numeric ">', HTML, EndPos);
if curPos > 0 then begin
EndPos := curPos;
curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
if curPos > 0 then begin
curPos := PosFrom('Average Rating: ', HTML, curPos);
endPos := PosFrom('/5', HTML, curPos);
TmpStr3 := StringReplace(FloatToStr((StrToFloat(Copy(HTML, curPos + 16, endPos - curPos - 16)) * 2)), '/5', '', True, True, False);
if TmpStr3 = '0' then
TmpStr3 := '';
if GET_RATING then
AddFieldValue(mfRating, TmpStr3);
AddCustomFieldValueByName('RT Rating', TmpStr3);
if TmpStr3 = '' then
TmpStr3 := 'rating unknown';
// end;
end;
end else
//~Rating~
//If Pos('audience', HTML) > 0 then begin
//If Pos('<span class="meter spilled numeric ">', HTML) > 0 then begin
curPos := PosFrom('<span class="meter spilled numeric ">', HTML, EndPos);
if curPos > 0 then begin
EndPos := curPos;
curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
if curPos > 0 then begin
curPos := PosFrom('Average Rating: ', HTML, curPos);
endPos := PosFrom('/5', HTML, curPos);
TmpStr4 := StringReplace(FloatToStr((StrToFloat(Copy(HTML, curPos + 16, endPos - curPos - 16)) * 2)), '/5', '', True, True, False);
if TmpStr4 = '0' then
TmpStr4 := '';
if GET_RATING then
AddFieldValue(mfRating, TmpStr4);
AddCustomFieldValueByName('RT Rating', TmpStr4);
if TmpStr4 = '' then
TmpStr4 := 'rating unknown';
// end;
end;
end;
end;
procedure ParseSearchResults(HTML : String);
var
curPos, endPos : Integer;
Title, Year, URL, Preview : String;
begin
curPos := Pos('<ul id="movie_results_ul" class="results_ul" ', HTML);
if curPos < 1 then
Exit;
LogMessage('Parsing search results...');
EndPos := PosFrom('<span class="movieposter">', HTML, EndPos);
curPos := PosFrom('<img src="', HTML, EndPos);
endPos := PosFrom('" width="', HTML, curPos);
Preview := Copy(HTML, curPos+10, EndPos - curPos-10);
curPos := PosFrom('<a target="_top" href="/m/', HTML, curPos);
while (curPos > 0) AND (curPos < PosFrom('<a id="more_movies" href="#results_movies_tab">More Movies...</a>', HTML, endPos)) do begin
endPos := PosFrom('" class=', HTML, curPos);
URL := 'http://www.rottentomatoes.com/'+Trim(Copy(HTML, curPos+23, endPos - curPos-23));
curPos := PosFrom('" class="" >', HTML, curPos);
endPos := PosFrom('</a>', HTML, curPos);
Title := TextBetween(HTML, '" class="" >', '</a>', True, curPos);
curPos := PosFrom('<span class="movie_year">', HTML, curPos);
endPos := PosFrom('</span></h3>', HTML, curPos);
Year := RemoveTags(TextBetween(HTML, '<span class="movie_year">', '</span></h3>', True, curPos), false);
AddSearchResult(Title+' '+Year, '', '', URL, Preview);
EndPos := PosFrom('<span class="movieposter">', HTML, EndPos);
curPos := PosFrom('<img src="', HTML, EndPos);
endPos := PosFrom('" width="', HTML, curPos);
Preview := Copy(HTML, curPos+10, EndPos - curPos-10);
curPos := PosFrom('<a target="_top" 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.
--- End code ---
Ivek23:
--- Quote from: Ivek23 on February 03, 2013, 06:04:13 pm ---Preparing Imdb Movie Script and Imdb Movie(1) Script with additional information, which data are Imdb plugin is not transferred.
I wonder what additional information is added to the script, so you can write your suggestions here for additional information, which should be added to the script.
Then I'll see how and what I can do and which of the proposals the can be added to the script.
--- End quote ---
Solutions, comprehensive information and more scripts now in Imdb Movie Script for Additional Information topic described.
Ivek23:
I fixed it procedure ParseSearchResults to re-presentation of search results.
Rottentomatoes script
v 0.1.0.6
The source code for the search results on Rottentomatoes web pages there have been some changes, which is now very important influence in modifying and correcting the Rottentomatoes script.
This problem is removed, no more present.
--- Quote from: Ivek23 on November 28, 2012, 07:44:07 pm ---There is a small cosmetic problem, namely to the first five results (one until five hits - depending on how many are on the All Search Results page) these results again repeat with all the other results in Movies Search Results page
--- End quote ---
Now this is no longer a cosmetic fault.
Rottentomatoes(1) script is no longer necessary because now it's all in one script.
Rottentomatoes script is attached.
Ivek23:
For unregistered users:
Rottentomatoes script
v 0.1.0.6
Rottentomatoes.psf
--- Code: ---(*
SCRIPT INFO:
---------------------------------------------
SCRIPT: Rottentomatoes Script
AUTHOR: Ivek23
VERSION: 0.1.0.6
DATE: 27/07/2014
---------------------------------------------
*)
//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.0.6';
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';
CODE_PAGE = 65001; //Use 0 for Autodetect
//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 : String;
begin
//Get ~mfURL~ or ~RT Url~
endPos := Pos('" itemprop="url"/>', HTML);
if endPos > 0 then begin
curPos := PrevPos('"canonical" href="', HTML, endPos);
AddFieldValue(mfURL, Copy(HTML, curPos + 18, endPos - curPos - 18));
end else
AddFieldValue(mfURL, MovieURL);
//~Rating~ or ~RT Rating~
curPos := PosFrom('<p class="critic_stats">', HTML, EndPos);
if curPos > 0 then begin
EndPos := curPos;
TmpStr := TextBetween(HTML, 'Average Rating: <span>', '/10</span>', True, curPos);
if TmpStr = '0' then
TmpStr := '';
AddFieldValue(mfRating, TmpStr);
AddCustomFieldValueByName('RT Rating', TmpStr);
if TmpStr = '' then
TmpStr := 'rating unknown';
end;
end;
procedure ParseSearchResults(HTML : String);
var
curPos, endPos : Integer;
Title, Year, URL, Preview : String;
begin
// curPos := Pos('<ul id="movie_results_ul" class="results_ul" ', HTML);
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 target="_top" data-pageheader="" href="/m/', HTML, curPos);
//while (curPos > 0) AND (curPos < PosFrom('<a id="more_movies" href="#results_movies_tab">More Movies...</a>', HTML, endPos)) do begin
while curPos > 0 do begin
endPos := PosFrom('" class=', HTML, curPos);
URL := 'http://www.rottentomatoes.com'+Trim(Copy(HTML, curPos+42, endPos - curPos-42));
curPos := PosFrom('" class="" >', HTML, curPos);
endPos := PosFrom('</a>', HTML, curPos);
Title := TextBetween(HTML, '" class="" >', '</a>', True, curPos);
curPos := PosFrom('</a>', HTML, curPos);
endPos := PosFrom('</span></h3>', HTML, curPos);
Year := TextBetween(HTML, '</a>', '</span></h3>', True, curPos);
curPos := PosFrom('<img src="', HTML, curPos)+10;
endPos := PosFrom('" width=', HTML, curPos);
Preview := Trim(Copy(HTML, curPos, endPos - curPos));
AddSearchResult(Title+' '+Year, '', '', URL, '');
curPos := PosFrom('<a target="_top" data-pageheader="" 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.
--- End code ---
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version