(* SCRIPT INFO: Following until 'SCRIPT BEGINS HERE...' is documentation. Please see 'USER OPTIONS' in the body of the script. --------------------------------------------- SCRIPT: Imdb Movie(awards) Script AUTHOR: Ivek23 VERSION: 0.1.1.3 DATE: 25/06/2017 --------------------------------------------- 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; smSoundtracks = 5; smPoster = 6; smFinished = 7; //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; //Credits types ctActors = 0; ctDirectors = 1; ctWriters = 2; ctComposers = 3; ctProducers = 4; //Script data SCRIPT_VERSION = '0.1.1.3'; SCRIPT_NAME = 'Imdb Movie Script(awards)'; SCRIPT_DESC = '[EN] Get Movie Information from Imdb.com(awards)'; SCRIPT_LANG = $09; //English SCRIPT_TYPE = stMovies; BASE_URL = 'http://www.imdb.com'; RATING_NAME = 'Imdb Movie Script'; SEARCH_STR = 'http://www.imdb.com/find?q=%s&s=tt'; 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 //Global variables var ELI : Integer; fullinfo : 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; function RemoveTagsEx1(AText : String) : String; var B, E : Integer; begin Result := AText; B := PosFrom('
', Result, 39); E := PosFrom('More
', Result, B); while (B > 0) AND (B < E) do begin Delete(Result, B, E - B + 39); B := Pos('', Result); E := Pos('More
', Result); end; end; function RemoveTagsEx4(AText : String) : String; var B, E : Integer; begin Result := AText; B := PosFrom('', Result, 16); E := PosFrom('
', Result); E := Pos('
', Result); end; end; procedure ParseMovie(MovieURL : String; HTML : String); var curPos, endPos, debug_pos1, urlPos, urlendPos,startPos, lastPos, nextStart, nextEnd, i, j : Integer; Category7, Category6, Category5, Category4, Category3, Category2, Category1, tmpstring1, pURL1, Event1, pName1, Name1, Cat1, Year1, HTML1, tmpstring, pURL, awEvent, pName, awName, awCat, awYear, awHTML : String; awWon, Won: Boolean; names, categories, recipients : TWideArray; Date : 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]; Date := StringReplace(Date, '01.', '1.', True, True, False); Date := StringReplace(Date, '02.', '2.', True, True, False); Date := StringReplace(Date, '03.', '3.', True, True, False); Date := StringReplace(Date, '04.', '4.', True, True, False); Date := StringReplace(Date, '05.', '5.', True, True, False); Date := StringReplace(Date, '06.', '6.', True, True, False); Date := StringReplace(Date, '07.', '7.', True, True, False); Date := StringReplace(Date, '08.', '8.', True, True, False); Date := StringReplace(Date, '09.', '9.', True, True, False); //AddCustomFieldValueByName('IUpdated', Date); // Simple //AddCustomFieldValueByName('Updated',Date+' at '+TimeToStr(CurrentDateTime)); // Verbose AddCustomFieldValueByName('Updated0',Date+' at '+TimeToStr(CurrentDateTime)+' '+#8226+' '+SCRIPT_NAME+' '+SCRIPT_VERSION); // Annoying end else LogMessage('date not found'); fullinfo := fullinfo; MovieURL := StringReplace(MovieURL, 'fullcredits', '', true, false, true); MovieURL := StringReplace(MovieURL, 'combined', '', true, false, true); MovieURL := StringReplace(MovieURL, 'taglines', '', true, false, true); MovieURL := StringReplace(MovieURL, 'releaseinfo', '', true, false, true); MovieURL := StringReplace(MovieURL, 'soundtrack', '', true, false, true); MovieURL := StringReplace(MovieURL, 'technical', '', true, false, true); MovieURL := StringReplace(MovieURL, 'externalsites', '', true, false, true); MovieURL := StringReplace(MovieURL, 'awards', '', true, false, true); AddFieldValueXML('url', MovieURL); GetFieldValueXML('url'); //MovieID := StringReplace(MovieURL, 'http://www.imdb.com/title/', '', false, false, false ); //MovieID := StringReplace(MovieID, '?ref_=fn_tt_tt_', '', true, false, true); //~Awards 0~ //If Pos('Connections', HTML) > 0 then begin //EndPos := Pos('', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, '', #13#32#32#32#9679#32, true, false, true); Category5 := StringReplace(Category5, ' ', #13#32#32#32#32#32#32#32#8226#32, true, false, true); Category5 := StringReplace(Category5, ' | For ', #13#32#32#32#32#32#32#32#32#32#32#32#32+'For ', true, false, true);
Category5 := StringReplace(Category5, ' | ', #13#32#32#32#32#32#32#32#32#32#32, true, false, true);
Category5 := StringReplace(Category5, ' |
', ' | ||
', true, false, true);
Category5 := StringReplace(Category5, ' | ||
', '', true, false, true); Category5 := StringReplace(Category5, ' For ', ''+#13#32#32#32#32#32#32#32#32#32#32, true, false, true); Category5 := StringReplace(Category5, ') | ', ')'+#13#32#32#32#32#32#32#32#32#32#32, true, false, true); Category5 := StringReplace(Category5, ' | |
', #13#32#32#32#32#32#32#32#32#32#32, true, false, true);
Category5 := StringReplace(Category5, ' ', ' ', true, false, true);
Category5 := StringReplace(Category5, ' For', ''+#13#32#32#32#32#32#32#32#32#32#32#32#32' For', true, false, true);
Category5 := StringReplace(Category5, ' |
', awHTML, endPos) + Length( 'award_category">'); endPos := PosFrom('', awHTML, curPos); awName := Trim(Copy( awHTML, curPos, endPos - curPos)); curPos := PosFrom( 'award_description">', awHTML, endPos ) + Length( 'award_description">' ); endPos := PosFrom( '<', awHTML, curPos ); awCat := Trim(Copy( awHTML, curPos, endPos - curPos)); awCat := StringReplace(awCat, ' For', '', true, false, false); //if (awCat <> '') then AddAward( awEvent, awName, awCat, '', awYear, awWon ); if Pos( ' | ', awHTML ) > 0 then
Begin
curPos := PosFrom( '', awHTML, urlPos );
while( urlPos > 0 ) do
Begin
endPos := PosFrom( '>', awHTML, urlPos ) + Length( '>' );
pName := Trim( Copy( awHTML, endPos, urlendPos - endPos ) );
pName := Copy( awHTML, endPos, urlendPos - endPos );
pName := StringReplace( pName, '"', '', true, false, false );
pName := StringReplace( pName, '>', '', true, false, false );
//AddAward( awEvent, awName, awCat, pName, awYear, awWon );
//AddAward( awEvent, awName, awCat, '', awYear, awWon );
urlPos := PosFrom( '?ref_=ttawd_awd_', awHTML, urlendPos );
urlendPos := PosFrom( '', awHTML, urlPos );
end;
end
else
Begin
AddAward( awEvent, awName, awCat, '', awYear, awWon );
end;
//AddAward( awEvent, awName, awCat, pName, awYear, awWon );
AddAward( awEvent, awName, awCat, '', awYear, awWon );
//end;
nextStart := PosFrom('', HTML, nextStart) + Length(' |