//SCRIPT INFO================================================================================================== BlockOpen
(*Following until 'SCRIPT CONSTANTS...' is documentation.
Please see 'USER OPTIONS' in the body of the script.
---------------------------------------------
AUTHORS: Pra15 & Ivek32 & VVV
---------------------------------------------
CHANGE LOG :
v 0.1.0.0 initial release
---------------------------------------------
FIELD USE:
This is a script designed to be easy to understand and to adapt. For this reason may be missing some fields and
the programming may not be smart. It's a only "One Pass" Script and get data in WEB SECUENTIAL ORDER.
The Personal Video DataBase field names in comments are enclosed in "~" so they are easier to find in the script.
The WEB_SPECIFIC commentary points out the specific text for Web fields.
Use Log PVdB debug Window for looking search errors.
Important note:
This scripts don't use the GET PVdB function for download page (this allows use HTTPS pages).
For do that it use a specific program "PVdBDownPage" AutoHotKey script.
You can get it from the authors page: http://vvveasy.altervista.org/personal-video-database/
NEEDED EXTERNAL FILES IN SCRIPTS FOLDER: • %Path%\PVdBDownPage.exe
FOOTNOTES:
1.Control the use of standard fields using the "Overwrite Fields" plugin preferences in the main program PVD:
Preferences > Plugins > 'Script Name' > Overwrite fields to control how these items are to be updated.
2.Hits for adapt the Script.
2.1. Search WEB_SPECIFIC comentary for adapt the specific Web text of fields.
2.2. Script execution:
0) Get results of "Obligatory callback Functions"
1) GetDownloadURL (Obligatory callback Functions) = This function should return URL that should be downloaded by
the main application and then passed to the script’s ParsePage function as text.
It may have several modes selon the Script mode (Global Var Mode = smSearch, smNormal, smFinished).
2) ParsePage (Obligatory callback Functions) = This function receives the text of the download web page passed
to the main application in the GetDownloadURL function.
It has several modes selon the Script mode (Global Var Mode = smSearch, smNormal, smFinished).
KNOWN ISSUES:
1. For compiling cuestions functions must be defined in the script before use (not in order of execution).
2. For the search texts for locating the fields in Web page Null '' value it's not valid. You must replaces all
escaped HTML characters (like <>&") with normal characters (like <, >,$, ").
3. It's a only "One Pass" Script: It DOES NOT makes several calls to the main program to scrape information from various pages of
the movie in the same site. It only do that for searching mode in a movie list results.
4. If desired, you needs Custom Field ~FilmAffinity_Votes~ for storing the number of votes and ~Set~ for "GRUPOS".
5. Get Web "AKA" and "GRUPOS" not implemented
SCRIPT STRUCTURE:
1.Script data and user options constants
2.Some useful generic constants
3.Global variables
4.Obligatory PVD callback Functions
GetScriptVersion, GetScriptName, GetScriptDesc, GetBaseURL, GetScriptLang, GetScriptType,
GetCurrentMode, GetDownloadURL.
(Note: ParsePage is at the end of the file for compiling cuestions).
5.Optional PVD callback Functions
GetRatingName ,GetCodePage, GetDownloadMethod, GetPrefixMode;
6.User Functions an procedures (with their constans)
7.Obligatory PVD callback function ParsePage (at the end of the file for compiling cuestions)
*)
//SCRIPT INFO================================================================================================== BlockClose
//SCRIPT CONSTANTS============================================================================================= BlockOpen
Const
//Script types---------------------------------------------------------------------------------------------------------
stMovies = 0;
stPeople = 1;
stPoster = 2;
stScreenShots = 3;
stCover = 4;
//Script Obligatory Infos----------------------------------------------------------------------------------------------
SCRIPT_NAME = 'Iafd People No Photo[HTTPS]';//The script of cinema fan community
SCRIPT_DESC = 'Iafd download People info [EN]';
SCRIPT_VERSION = '0.1.0.0';
SCRIPT_TYPE = stPeople;
SCRIPT_LANG = $0c; //Spanish //$0a es-Spanish $0c fr-French $09 en-English
RATING_NAME = 'Iafd'; //PVD has ~orname~,~orating~ for this value.May be in user ~rating~
CODE_PAGE = 0; //28591=ISO 8859-1 Latin 1; Western European (ISO). Use: 65001=Unicode (UTF-8) | 0=for Autodetect
//Script Options-------------------------------------------------------------------------------------------------------
//Retreive Data Config
//Process Data Config
SET_AS_USER_RATING = False ; //Set Iafd rating as PVD user rating..
//Process Behaviour Config
BYPASS_SILENT = True ; //Ensure critical ShowMessage alerts bypassing Silent PVdB preferences
POSTER_IN_SEARCH = False ; //Download and show movie posters in the list of the SearchResult
CHECK_WEBSITE = False ; //Add to SearchResult List the true HTTPS links 'Just to check the website' with the browser
SEARCH_ENGINE = False ; //If there isn't provider search results, try with Bing search engine
INTERNET_TEST_ITERATIONS = 6; //Attempts before to alert user that not internet connection detected. Increase if the provider has low speed.
//User Options---------------------------------------------------------------------------------------------------------
//Script data----------------------------------------------------------------------------------------------------------
BASE_URL = 'http://www.iafd.com'; //The traditional BASE_URL used to get movie ID if the movie is stored for instance 'http://www.filmaffinity.com /en/film809297.html'.
BASE_URL_TRUE = 'https://www.iafd.com'; //True actual link to movie ID 'httpS://www.filmaffinity.com /en/film809297.html'.
BASE_URL_SEARCH_PROV = 'https://www.iafd.com/result.asp?searchtype=comprehensive&searchstring='; //'https://www.iafd.com/results.asp?'; //Search string for '%s' title and '%y' year. WEB_SPECIFIC.
BASE_URL_PRE = 'http://www.iafd.com'; //For Bing search compatibility
BASE_URL_PRE_TRUE = 'https://www.iafd.com'; //For Bing search compatibility
BASE_URL_SUF = '.html'; //For Bing search compatibility
BASE_URL_SEARCH_ENGI = 'http://www.bing.com/Search?q=%s%20+(%y)+site%3A%p'; // Search string: '%s' title , '%y' year and '%p' web information provider.
//Download HTTPS needed parameters
BASE_URL_ROUNDABOUT = 'ROUNDABOUT'; //Used for cheat GET PVdB funtion and rondabout the "https" fail.
BASE_DOWNLOAD_FILE_NO_BOM = 'Tmp\downpage-UTF8_NO_BOM.htm'; //File to store curl page download in UTF8 without BOM and then it's not necesary use GET PVdB funtion to download.
CHEAT_PREFIX_URL = 'http://httpbin.org/response-headers?key='; //Working http URL used for cheat GET PVdB funtion when it returns for SearchList choice.
DUMMY_HTML_FILE = 'portable.bat'; //Any existing PVdV file (little) not used. If adapted, it may external file 'C:\Windows\notepad.exe'
//Script movie modes.--------------------------------------------------------------------------------------------------
smSearch = 0; //Entry mode and search list mode (AddSearchResult)
smNormal = 1; //This scripts download with external program (not with GetDownloadURL) so it only make one pass to ParsePage for retrieve all info, credits, poster, etc. other field modes aren't necesary.
//Movie PVdB fields in http://www.videodb.info/help/hlp_scripting.html#fields:
//Certification (AddValueField): ~mpaa~
//Credits (AddMoviePerson): ~Directors~,~Writers~,~Composers~,~Photographers~,~Actors~,~Producer~.Same that smCast.
//Votes (AddValueField): ~rating~,~imdbrating~,~orname~,~orating~ and related custom PVdB fields ~IMDB_Votes~,~TOP_250~,~FilmAffinity_Votes~.
//Poster (AddValueImageURL): ~poster~,~screenshots~,~froncover~,~cdcover~
//Review (AddValueField): ~comment~,~tags~
//Awards (AddAwards).
smSearchList = 8; //Used in ParsePage for demands download the https link returned by user in the window of (AddSearchResult)
smFinished = 9; //For set script finish.
//Parse results (return of ParsePage)----------------------------------------------------------------------------------
prError = 0; //An error acquired while processing data
prFinished = 1; //Script has finished gathering data
prList = 2; //A list of search results is available. Use with (AddSearchResult)
prListImage = 3; //A list of image search results is available. Use with?
prDownload = 4; //Another URL needs to be downloaded
//Download methods-----------------------------------------------------------------------------------------------------
dmGET = 0;
dmPOST = 1;
//Credits types--------------------------------------------------------------------------------------------------------
ctActors = 0;
ctDirectors = 1;
ctWriters = 2;
ctComposers = 3;
ctProducers = 4;
//Image types-----------------------------------------------------------------------------------------------------------
itPoster = 0;
itScreenShot = 1;
itFrontCover = 2;
itDiscImage = 3;
itPhoto = 4;
//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;
//SCRIPT CONSTANTS============================================================================================= BlockClose
//OPTIONS
GET_THEMES = True; //Set to False if you do not want Themes in Category field
GET_REVIEW = True;
GET_CREDITS = True;
GET_FULL_FILMOGRAPHY = False; //Add All movies in Biography field
GET_DOUBLONS = True; //Info double in comments and in field
GET_GENRE = True; //Apply IAFD in Genre
WRITE_BIO = True; //True if Fullinfo write in ~biography~ tab, False if Fullinfo write in ~comment~ Tab
WRITE_DATE = True; //Add the date of the donwload in the comment
//Global variables
var
Mode : Byte;
PhotoURL, DownloadURL, StoredURL : String;
tabI: array[1..28] of string;
TabFilm, TabYear, TabDist, TabNote, TabAKA, TabtypFilm : Array of String; //////////Ajout TabAKA
//OBLIGATORY CALLBACK FUNCTIONS=================================================================================BlockOpen
Function GetScriptVersion:String; //BlockOpen
begin Result:=SCRIPT_VERSION;
end; //BlockClose
Function GetScriptName:String; //BlockOpen
begin Result:=SCRIPT_NAME;
end; //BlockClose
Function GetScriptDesc:String; //BlockOpen
begin Result:=SCRIPT_DESC;
end; //BlockClose
Function GetBaseURL:AnsiString; //BlockOpen
begin Result := BASE_URL_ROUNDABOUT; //Used for cheat GET PVdB funtion and rondabout the "https" fail.
end; //BlockClose
Function GetScriptLang:Cardinal; //BlockOpen
begin Result:=SCRIPT_LANG;
end; //BlockClose
Function GetScriptType:Byte; //BlockOpen
begin Result:=SCRIPT_TYPE;
end; //BlockClose
Function GetCurrentMode:Byte; //BlockOpen
begin Result:=Mode;
end; //BlockClose
Function GetRatingName:String; //BlockOpen
Begin Result:=RATING_NAME;
End; //BlockClose
Function GetCodePage:Cardinal; //BlockOpen
begin Result:=CODE_PAGE;
End; //BlockClose
Function RealURL(URLs:AnsiString):String; //BlockOpen
// Function to return only the URl of iafd (http) if there's several Urls in url field.
//exemple : 'https://www.iafd.com/aaa http://www.egaf.com/bbb' return 'http://www.iafd.com/aaa'
Var
Site:String;
i,j:Integer;
TabURL : TwideArray;
Begin
LogMessage('Function RealURL Start :');
i:= 0;
j:=0;
ExplodeString(URLs,TabURL,' ');
If High(TabURL) > 0 then Begin
LogMessage('Plusieurs valeurs!');
For i:= 0 to High(TabURL) do begin
Site:= trim(Copy(tabURL[i],5,1));
LogMessage('Site :'+ Site)
If Site='s' then begin
j:=13;
end else begin
j:=12;
end;
Site := trim(Copy(TabURL[i],j,4))
LogMessage('Site : '+Site)
If Site='iafd' then begin
result:= TabURL[i];
LogMessage(TabURL[i]);
exit;
end else begin
result := '';
end;
end;
end;
End;
Function GetDownloadURL:AnsiString; //BlockOpen
Var
curPos:Integer;
ScriptPath,MovieID:String;
begin
LogMessage('Function GetDownloadURL BEGIN======================|');
LogMessage('Global Var-Mode (GDU)|'+IntToStr(Mode)+'|');
LogMessage('Global Var-DownloadURL (GDU)|'+DownloadURL+'|');
//Comprobation of needed external files.
ScriptPath:=GetAppPath+'Scripts\';
if Not(FileExists(ScriptPath+'PVdBDownPage.exe')) then begin
ShowMessage ('Este script necesita archivos externos para funcionar:'+Chr(13)+'• PVdBDownPage.exe'+Chr(13)+'Lea el texto del script para más información',SCRIPT_NAME);
Mode:=smFinished;
Result:=''; //If error returns empty string
exit;
end;
(*If PhotoURL <> '' then begin
//Standarize the URL
//PhotoURL:=LowerCase(StoredURL);
//PhotoURL:=StringReplace(StoredURL,'https','http',True,True,False);
LogMessage('Photo URL est: '+PhotoURL);
Result := PhotoURL;
Exit;
end;*)
if (Mode=smSearch) then begin
//Get stored URL if exist.
StoredURL:=GetFieldValueXML('url');
LogMessage('Stored URL is:'+StoredURL+'||');
StoredURL := RealURL(StoredURL);
//Standarize the URL
StoredURL:=LowerCase(StoredURL);
StoredURL:=StringReplace(StoredURL,'https','http',True,True,False);
LogMessage('Stored URL is: '+StoredURL);
//Get FilmAffinity ID if exist.
curPos:=Pos(BASE_URL,StoredURL);
if 0',HTML,curPos);
CurPos := PosFrom('>',HTML,curPos)+1;
EndPos := PosFrom(' ',HTML,curPos);
Result := HTMLToText(Trim(Copy(HTML,curPos,(EndPos-curPos))));
end
else
Result := '';
LogMessage(StartString + ':' + Result);
end;
function pTab (strBefore:String; ValueTab:String; strAfter:string; ifPrt:Integer; nbSpace:Integer; TypS:string) : String;
//Manage displaying of a data
Var
x : integer;
strSpace : string;
Begin
strSpace := '';
If TypS = '' then TypS := ' ';
If nbSpace > 0 then begin
For x := 1 to nbSpace do
strSpace := strSpace + TypS;
end;
If ValueTab <> '' then result:= strBefore+ValueTab+strAfter;
If ValueTab = '' then
begin
Case ifPrt of
1 : Result:= strBefore+strSpace+strAfter;
2 : Result:= strBefore+strSpace;
3 : Result:= strSpace+strAfter;
4 : Result:= '';
5 : Result := strSpace;
end;
end;
end;
function ftLine(enTete : String; TxtSep : String; TabTxtLine : TwideArray) : String;
//Manage displaying of a line:
// enTete : Fisrt string put at start of a line : ex: entete Data1 Data2 ....
// TxtSep : String repeat between each data (if TxtSep = '/' give Data1/Data2 etc...
// Value of the different data of the line put in a tab (ex: [height,weight]
Var
i, LastVal : integer;
strLine : string;
ifExist : Boolean;
Begin
strLine := '';
ifExist := False;
For i:= 1 to High(TabtxtLine) do begin
If TabtxtLine[i] <> '' then begin
ifExist := True;
LastVal := i;
end;
end;
For i:= 0 to High(TabtxtLine) do begin
If TabtxtLine[i] <> '' then begin
If LastVal <> i then begin
If ifExist = True then begin
strLine := strLine + TabtxtLine[i] + TxtSep;
end else begin
strLine := strLine + TabtxtLine[i];
end;
end else begin
strLine := strLine + TabtxtLine[i];
end;
end;
end;
If strLine <> '' then begin
Result := enTete + strLine + #13#10;
end else begin
Result := '';
end;
End;
function Format_Num (numMax: Integer; ActualNum:Integer) : String;
Var
lmax, lnow : integer;
strValue : String;
Begin
lmax := length(inttostr(numMax));
lnow := length(inttostr(ActualNum));
strValue := inttostr(ActualNum);
while lnow < lmax do begin
strValue := '0'+strValue;
lnow := lnow+1;
end;
Result := strValue;
End;
(*//---------------------- Parse Photo -----------------
Procedure ParsePhoto(PhotoURL : String);
begin
LogMessage('PARSING PHOTO...' + PhotoURL);
PhotoURL:=HTMLToText (PhotoURL);
AddImageURL(4,PhotoURL);
end;*)
Procedure ParsePeople(HTML : String);
var
curPos, EndPos, AkaPos, EndAkaPos, I, nbMov, J: Integer; //////Ajout AkaPos and EndAkaPos
Nome, Nomealt,Nomealt0,Nomealt1,Nomealt2,Nomealt3,Nomealt4,
Datanascita1, Datanascita, Giorno, Mese, Anno, NumM, nbMovStr, typFilm: String;
details,fullinfo, DateCourant : String;
URLPP, Name, Distrib, Year, Notes, Titles: String;
debug_pos1: Integer;
DateParts:Twidearray;
begin
////Date of the download info :
If WRITE_DATE = True then DateCourant := DateToStr(CurrentDateTime);
//LogMessage('Write XXXXXXXX :'+ Write);
if DateCourant <> '' then
begin
ExplodeString(DateCourant, DateParts, '-');
DateCourant := DateParts[2] + '-' + DateParts[1] + '-' + DateParts[0];
DateCourant := 'Last Visit : ' + DateCourant + #13#10;
end;
/////////////////////////////////////
LogMessage('PARSING PEOPLE...');
fullinfo:= '';
fullinfo := DateCourant + #13#10;
tabI[24] := 'Biographical data courtesy of the IAFD'+ #13#10 + ' ~~ Internet Adult Film Database ~~ ' + #13#10 + #13#10;
curpos := 0;
// Ajout genre IAFD
if GET_GENRE then AddFieldValue(pfGenre,'IAFD');
//Nom :
curPos := Pos('',HTML);
EndPos := PosFrom('
',HTML,curPos);
Nome := Trim(Copy(HTML,curPos+4,EndPos-curPos-4));
tabI [1] := Nome;
AddFieldValue(pfName, Nome );
LogMessage('Name: '+Nome);
//Nome alternativo
curPos := Pos('AKA
Birthday
',HTML,curPos)+34; if curPos > 0 then begin curPos := PosFrom('">',HTML,curPos)+2; EndPos := PosFrom(' ',HTML,curPos); Mese := Copy(HTML,curPos,EndPos-curPos); // Mois en lettre If Mese = '',HTML,curPos)+2; EndPos := PosFrom(' ',HTML,curPos); Mese := Copy(HTML,curPos,EndPos-curPos); end; curPos := EndPos; EndPos := PosFrom(',',HTML,curPos); Giorno := Copy(HTML,curPos,EndPos-curPos); //Jour Giorno:= StringReplace(Giorno,'01','1',true,true,true); Giorno:= StringReplace(Giorno,'02','2',true,true,true); Giorno:= StringReplace(Giorno,'03','3',true,true,true); Giorno:= StringReplace(Giorno,'04','4',true,true,true); Giorno:= StringReplace(Giorno,'05','5',true,true,true); Giorno:= StringReplace(Giorno,'06','6',true,true,true); Giorno:= StringReplace(Giorno,'07','7',true,true,true); Giorno:= StringReplace(Giorno,'08','8',true,true,true); Giorno:= StringReplace(Giorno,'09','9',true,true,true); LogMessage(Giorno); curPos := EndPos + 1; EndPos := PosFrom('',HTML,curPos); Anno := Copy(HTML,curPos, EndPos-curPos); //Année LogMessage(Anno); Mese := StringReplace(Mese,'January','1',true,true,true); Mese := StringReplace(Mese,'February','2',true,true,true); Mese := StringReplace(Mese,'March','3',true,true,true); Mese := StringReplace(Mese,'April','4',true,true,true); Mese := StringReplace(Mese,'May','5',true,true,true); Mese := StringReplace(Mese,'June','6',true,true,true); Mese := StringReplace(Mese,'July','7',true,true,true); Mese := StringReplace(Mese,'August','8',true,true,true); Mese := StringReplace(Mese,'September','9',true,true,true); Mese := StringReplace(Mese,'October','10',true,true,true); Mese := StringReplace(Mese,'November','11',true,true,true); Mese := StringReplace(Mese,'December','12',true,true,true); Datanascita:=(Giorno + '.' + Mese + '.' + Anno); if Length(Datanascita) < 20 then begin tabI [4] := Mese; tabI [5] := Giorno; tabI [6] := Anno; tabI [7] := Datanascita; AddFieldValue(pfBirthday, Datanascita); end; end; //Astrology (copy from nome) curPos := Pos('>Astrology0 then begin curPos := PosFrom('class="biodata">', HTML, curPos)+16; logmessage('CCCC: '+ copy(HTML,curPos,2)); if copy(HTML,curPos,2) = '',HTML,curPos); curPos := PrevPos('">',HTML,endPos)+2; NomeAlt := Trim(copy(HTML,curPos,endPos-curPos)); end else begin endPos := PosFrom('
',HTML,curPos); curPos := PrevPos('">',HTML,endPos)+2; NomeAlt := Trim(copy(HTML,curPos,endPos-curPos)); end; if (Length(Nomealt) < 20) AND (NomeAlt <> 'No data')then begin LogMessage('Astrology: '+Nomealt); tabI [8]:= NomeAlt; end; end; //Lieu de naissance //CurPos := PosFrom('Astrology', HTML, endPos); //Nomealt := (GetIAFDValue(HTML,'Birthplace')); CurPos := PosFrom('>Birthplace', HTML, EndPos); NomeAlt := TextBetween(HTML,'">','',true,CurPos); if Nomealt <> '' then begin AddFieldValue(pfBirthplace, StringReplace(Nomealt,'No data','',true,true,true)); //Aggiungi il paese di nascita LogMessage('Birtplace found: ' + Nomealt); Nomealt:= StringReplace(Nomealt,'No data','-',true,true,true); tabI [9] := NomeAlt; end else LogMessage('Paese di nascita: NESSUNO'); //Date of death curPos := PosFrom ('>Date of Death',HTML,curPos); if curPos > 0 then begin CurPos := CurPos+18; LogMessage('Date of death: start...'); curPos := PosFrom('">',HTML,curPos)+2; EndPos := PosFrom(' ',HTML,curPos+1); Mese := Trim(Copy(HTML,curPos,EndPos-curPos));// Month tabI[26] := Mese; LogMessage(Mese); curPos := EndPos; EndPos := PosFrom(',',HTML,curPos); Giorno := Copy(HTML,curPos+1,EndPos-curPos-1);//Copia mese tabI[27] := Giorno LogMessage(Giorno); curPos := EndPos; EndPos := PosFrom(' ',HTML,curPos); Anno := Copy(HTML,curPos+2,4);//Copia anno tabI[25] := Anno; LogMessage(Anno); Mese := StringReplace(Mese,'January','1',true,true,true); Mese := StringReplace(Mese,'February','2',true,true,true); Mese := StringReplace(Mese,'March','3',true,true,true); Mese := StringReplace(Mese,'April','4',true,true,true); Mese := StringReplace(Mese,'May','5',true,true,true); Mese := StringReplace(Mese,'June','6',true,true,true); Mese := StringReplace(Mese,'July','7',true,true,true); Mese := StringReplace(Mese,'August','8',true,true,true); Mese := StringReplace(Mese,'Septembre','9',true,true,true); Mese := StringReplace(Mese,'September','9',true,true,true); Mese := StringReplace(Mese,'October','10',true,true,true); Mese := StringReplace(Mese,'November','11',true,true,true); Mese := StringReplace(Mese,'December','12',true,true,true); Giorno:= StringReplace(Giorno,'01','1',true,true,true); Giorno:= StringReplace(Giorno,'02','2',true,true,true); Giorno:= StringReplace(Giorno,'03','3',true,true,true); Giorno:= StringReplace(Giorno,'04','4',true,true,true); Giorno:= StringReplace(Giorno,'05','5',true,true,true); Giorno:= StringReplace(Giorno,'06','6',true,true,true); Giorno:= StringReplace(Giorno,'07','7',true,true,true); Giorno:= StringReplace(Giorno,'08','8',true,true,true); Giorno:= StringReplace(Giorno,'09','9',true,true,true); Datanascita:=(Giorno+'.'+Mese+'.'+Anno); LogMessage('Day of death: '+Datanascita); AddFieldValue(pfDeathDate, Datanascita);//aggiungi la data di nascita end else LogMessage('Day of death: none'); //Years active (copy from nome) // Years Active','
',true,curPos); if Nomealt <> '' then begin LogMessage('Ethnicity:' + Nomealt); Nomealt := StringReplace(Nomealt, 'No data', '', true,true,true); tabI [14] := Nomealt; end; //Nationality/Heritage (copy from nome) //Nomealt := (GetIAFDValue(HTML,'Nationality/Heritage')); curPos := Pos('>Nationality',HTML); NomeAlt := textBetween(HTML,'">','',true,curPos); if Nomealt <> '' then begin LogMessage('Nationality/Heritage:' + Nomealt); Nomealt := StringReplace(Nomealt, 'No data', '', true,true,true); tabI [15] := Nomealt; end; //Hair Colors (copy from nome) //Nomealt := (GetIAFDValue(HTML,'Hair Color')); curPos := Pos('>Hair Color',HTML); NomeAlt := textBetween(HTML,'">','',true,curPos); if Nomealt <> '' then begin LogMessage('Hair Colors:' + Nomealt); Nomealt := StringReplace(Nomealt, 'No data', '', true,true,true); tabI [16] := NomeAlt; end; //Height (copy from nome) //Nomealt := (GetIAFDValue(HTML,'Height')); curPos := Pos('>Height',HTML)+13; endPos := PosFrom(''') AND (curPos < EndPos) then begin LogMessage('Height:' + Nomealt); Nomealt := StringReplace(Nomealt, 'No data', '', true,true,true); tabI [18] := Nomealt; end; //Weight (copy from nome) //Nomealt := (GetIAFDValue(HTML,'Weight')); curPos := Pos('>Weight
',HTML)+13; endPos := PosFrom('','
',true,curPos); if (Nomealt <> '') AND (curPos < EndPos) then begin LogMessage('Weight:' + Nomealt); Nomealt := StringReplace(Nomealt, 'No data', '', true,true,true); //if Nomealt <> '' then begin //curpos := Pos('Weight