I wrote a new version of the script and now it's OK but.... I'm not able to translate some special characters (they look accents).
Use the script with the translated title 'L'angelo sterminatore' and you will understand what I mean. If someone could help me, the script would be 'almost perfect'.
Ho scritto una nuova versione dello script ed ora funziona. Unico neo (mi sembra), non riesco a convertire dei caratteri speciali che compaiono nei campi visualizzati (vedi il film 'L'angelo sterminatore' e capirete cosa intendo).
Se qualcuno riuscissa a risolvere il problema, lo script sarebbe 'quasi perfetto'.
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=fUlvio53s03
Title=35mm.it
Description=Get movie info from 35mm.it
Site=http://www.35mm.it
Language=IT
Version=10.10.2009
Requires=3.5.0
Comments=|
License=
GetInfo=1
***************************************************)
program New35mm;
uses
Stringutils7552;
const
UrlBase = 'http://www.35mm.it'; //
QueryBase = UrlBase + '/search/?string=';
QueryFilm = UrlBase + '/film/scheda/top/scheda.jsp?idFilm=';
QueryCast = UrlBase + '/film/scheda/bottom/cast.jsp?idFilm=';
QueryCover = UrlBase + '/film/scheda/bottom/homevideo.jsp?idFilm=';
QueryMovie = UrlBase + '/';
QueryCmnts = UrlBase + '/film/scheda/bottom/recensioni.jsp?idFilm=';
QueryTrama = UrlBase + '/film/scheda/popup/trama.jsp?idFilm=';
QueryFinale = UrlBase + '/film/scheda/popup/finale.jsp?idFilm=';
var
MovieUrl, FilmUrl, CoverUrl: string;
MovieName, OriginalStr, TranslatedStr, PageStr: string;
UsePage, OldField, NewField: string;
EndChar, StartChar: string;
LgthUsePage, LengthRaw, StartPos, EndPos: integer;
// ---------------------------
// DELETE DOTS AT END OF STRIG
// IN: Text (string)
// OUT: RemoveDot (string)
// ---------------------------
function RemoveDot (Text: string) : string;
var
intLenght : integer;
begin
repeat
intLenght := Length(Text);
if copy(Text,intLenght -1 ,1) = '.' then
begin
delete(Text, intLenght -1 ,1);
end;
until (copy(Text,intLenght -1,1) <> '.');
result := Text;
End;
function cambiaAccenti(str1: string) :string;
begin
str1 := StringReplace(str1, 'Ã', 'a' + #39);
str1 := StringReplace(str1, #195, 'u');
str1 := StringReplace(str1, #226, 'o' + #39);
str1 := StringReplace(str1, #227, 'o' + #39);
str1 := StringReplace(str1, #228, 'o' + #39);
str1 := StringReplace(str1, #229, 'o' + #39);
result := str1;
end;
function MyTrim(Value: string):string;
var
ExitLoop: Boolean;
NewField, OldField: String;
OldLgthValue, NewLgthValue: integer;
begin
NewField := ' ';
OldField := #9;
value := StringReplace(Value, OldField, NewField);
OldField := #10;
value := StringReplace(Value, OldField, NewField);
OldField := #13;
value := StringReplace(Value, OldField, NewField);
OldField := ' ';
ExitLoop := False;
OldLgthValue := length(Value);
repeat
value := StringReplace(Value, OldField, NewField);
NewLgthValue := length(Value);
if OldLgthValue = NewLgthValue then
ExitLoop := True
else
OldLgthValue := NewLgthValue;
until ExitLoop;
Result := '';
ExitLoop := False;
repeat
case copy(Value, 1, 1) of
' ', #9, #10, #13: Value := copy(Value, 2, Length(Value)-1);
else
ExitLoop := True;
end;
until ExitLoop;
ExitLoop := False;
repeat
case copy(Value, Length(Value), 1) of
' ', #9, #10, #13: Value := copy(Value, 1, Length(Value)-1);
else
ExitLoop := True;
end;
until ExitLoop;
HTMLRemoveTags(Value);
Result := Value;
end;
// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN: none
// OUT: set Ant fields
// -----------------------
procedure AnalyzeMoviePage;
var
i, h, m: integer;
Duration, Description, Cast, TempStr, TempImg, hh, mm: string;
TempField, Prova: string;
begin
// Get packed title main page
PageStr := Getpage(FilmUrl);
// PageStr := RemoveExtraChars(FilmUrl);
// Get film image
tempImg := textBetween(PageStr, '<div id="cover">', '</div>');
tempImg := textBetween(tempImg, '<a href="', '" rel=');
tempImg := Urlbase + FullTrim(tempImg);
getPicture(TempImg);
// Translated Title field
Tempfield := textBetween(PageStr, '<li><span>Titolo:</span>', '</li>');
TempField := Mytrim(TempField);
SetField(fieldTranslatedTitle, TempField);
// Original Title field
TempField := textBetween(PageStr, '<li><span>Titolo originale:</span>', '</li>');
TempField := Mytrim(TempField);
SetField(fieldOriginalTitle, TempField);
// Country field
TempField := textBetween(PageStr, '<span>Nazione:</span>', '</li>');
TempField := MyTrim(TempField);
SetField(fieldCountry, TempField);
// Category Field
TempField := textBetween(PageStr, '<span>Genere:</span>', '</li>');
TempField := TextBetween(tempField, '">', '<');
TempField := Mytrim(TempField);
SetField(fieldCategory, TempField);
// Duration field
TempField := textBetween(PageStr, '<span>Durata:</span>','min</li>');
TempField := Mytrim(TempField);
SetField(fieldLength, tempField);
// Director Field <span>Regia:</span>
TempField := textBetween(PageStr, '<span>Regia:</span>','</li>');
TempField := TextBetween(tempField, '">', '<');
TempField := MyTrim(TempField);
SetField(fieldDirector, TempField);
// YearField
TempField := textBetween(PageStr, '<span>Anno di produzione:</span>','</li>');
TempField := MyTrim(TempField);
SetField(fieldYear, TempField);
// Producer Field
TempField := textBetween(PageStr, '<span>Distribuzione:</span>','</li>');
TempField := TextBetween(tempField, '">', '<');
SetField(fieldProducer, TempField);
// Movie URL field
SetField(fieldURL, MovieUrl);
// Description Field
TempField := textBetween(PageStr, '<div class="description">','</div>');
TempField := MyTrim(TempField);
TempField := cambiaAccenti(TempField);
SetField(fieldDescription, TempField);
// Comments Field
TempField := textBetween(PageStr, '<span>Distribuzione:</span>','</div>');
TempField := textBetween(TempField, 'title="','">');
TempField := MyTrim(TempField);
TempField := 'Distribuzione: ' + TempField;
SetField(fieldComments, TempField);
// Actors Field
StartChar := '<div id="mod_castcrew_tabs" style="position:relative;">';
EndChar := '<div class="mod_castcrew_tab" id="mod_castcrew_tab_crew"';
Usepage := Textbetween(Pagestr, StartChar, EndChar); // estraggo tutta la stringa degli attori
lengthRaw := length(Usepage);
StartChar := '<div class="box_rightcol_list_user_right">';
StartPos := Pos(StartChar, Usepage);
Delete(UsePage, 1, StartPos - 1);
EndChar := 'height="50px" />';
UsePage := Usepage + EndChar; // evito forzatamente LengthRaw < 100 per l'ultimo interprete
TempField := StartChar + TextBetween(UsePage, StartChar, EndChar) + EndChar;
LengthRaw := length(TempField);
StartChar := 'title="';
EndChar := '</h4>';
TempField := StartChar + TextBetween(UsePage, StartChar, EndChar) + EndChar;
Cast := '';
// UsePage := PageStr;
StartPos := pos(StartChar, UsePage);
repeat
StartChar := '>';
EndChar := '</a>';
TempField := TextBetween(TempField, StartChar, EndChar);
Cast := Cast + TempField + '; ';
Delete(UsePage, 1, LengthRaw);
LgthUsePage := length(UsePage);
StartChar := '<div class="box_rightcol_list_user_right">';
EndChar := 'height="50px" />';
TempField := StartChar + TextBetween(UsePage, StartChar, EndChar) + EndChar;
LengthRaw := Length(Tempfield);
StartChar := 'title="';
EndChar := '</h4>';
TempField := StartChar + TextBetween(UsePage, StartChar, EndChar) + EndChar;
until(LengthRaw < 100);
Cast := copy(Cast, 1, length(Cast) - 2); // tolgo ultimo ;
SetField(fieldActors, Cast);
end;
// ------------------------------------------------------------------
// FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
// if OneFilm flag true return Film Id else populate PickTree
// IN: OneFilm flag (bool)
// OUT: one page ID (string)
// ------------------------------------------------------------------
function PopulatePickTree(OneFilm: boolean): string;
var
TempIdFilm, TempTitle: string;
LengthFilm: integer;
begin
if OneFilm then
begin // questa routine est OK
StartPos := pos('<a class="title" href="', PageStr);
UsePage := copy(PageStr, StartPos + 23, length(PageStr) - Startpos);
EndPos := pos('" title="', UsePage);
if StartPos > 0 then
begin
startPos := 0;
TempIdFilm := copy(UsePage, StartPos, EndPos - Startpos - 1);
result := TempIdFilm;
end
end
else
begin
PickTreeClear;
StartChar := '<a class="title" href="';
EndChar := '<div class="pagination"></div>';
UsePage := StartChar + TextBetween(PageStr, StartChar, EndChar) + EndChar;
// UsePage := PageStr;
StartPos := pos(StartChar, UsePage);
repeat
// UsePage := copy(UsePage, StartPos + 23, length(UsePage) - Startpos);
StartChar := '<a class="title" href="';
EndChar := '" title="';
StartPos := pos(StartChar, UsePage);
if StartPos > 0 then
begin
TempIdFilm := TextBetween(UsePage, Startchar, EndChar);
LengthFilm := length(StartChar) + length(TempIdFilm) + length(EndChar);
Delete(UsePage, 1, LengthFilm);
LengthRaw := length(UsePage);
StartChar := '">';
EndChar := '</a>';
TempTitle := TextBetween(UsePage, Startchar, EndChar);
PickTreeAdd(TempTitle, TempIdFilm);
LengthFilm := length(StartChar) + length(TempTitle) + length(EndChar);
Delete(UsePage, 1, lengthFilm);
LengthRaw := length(UsePage);
StartChar := '<a class="title" href="';
StartPos := pos(StartChar, UsePage);
Delete(UsePage, 1, StartPos - 1);
LengthRaw := length(UsePage);
end;
until(StartPos = 0);
result := '';
end
end;
// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN: page Url (string)
// OUT: none
// ---------------------------------
procedure AnalyzeSearchPage(Url: string);
var
FilmId: string;
begin
PageStr := getpage(Url);
// PageStr := RemoveExtraChars(Url);
if pos('Nessun film trovato.', PageStr) > 0 then
ShowMessage('Title not found / Nessun film trovato.')
else if pos('Si è verificato un errore',PageStr) > 0 then
ShowMessage('Server not available, try later / Server non disponibile, prova più tardi')
else
begin
if pos('Risultato della ricerca per:', PageStr) = 0 then
MovieUrl := PopulatePickTree(true) // One title found
else
begin
PopulatePickTree(false); // More titles found..
if not PickTreeExec(MovieUrl) then // ..select one
exit;
end
FilmId := MovieUrl; // get film id from movie url
FilmUrl := MovieUrl;
CoverUrl := QueryCover + FilmId;
AnalyzeMoviePage;
end;
end;
// ----------
// MAIN:
// IN: none
// OUT: none
// ----------
begin
if CheckVersion(3,5,0) then
begin
TranslatedStr := GetField(fieldTranslatedTitle);
OriginalStr := GetField(fieldOriginalTitle);
if (TranslatedStr <> '') then
MovieName := TranslatedStr
else
MovieName := OriginalStr;
if (Input('35mm.it - ', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
begin
MovieUrl := QueryBase + UrlEncode(MovieName) + '&where=1';
AnalyzeSearchPage(MovieUrl);
end;
end
else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.