GigiX
New member
Dopo aver letto il 3ad sul myHTPC ho deciso di installarlo sulla mia macchina. Dopo aver girato per un po di forum ho trovato questo programma freeware per catalogare i propri dvd, ed in più permette l'esportazione che sarà poi utilizzata per creare le schede movie per myHTPC. Il bello di questo programma è che ha degli script che permettono di cercare i film on-line, in siti come filmup.com o 35mm.it, e di inserirli direttamente nel database. Per una successiva esportazione ho però dovuto modificare lo script filmup(it) in quanto il formato non rispecchiava quello di myHTPC, ed in più c'era il campo Attori protagonisti che non veniva letto. Questo è il testo completo dello script:
// GETINFO SCRIPTING
// FilmUP (IT) import
(**************************************************
* Movie importation script for: *
* FilmUP (IT), http://www.filmup.com *
* *
* MODIF. DA: PIVELLO (originale di L. Francisco) *
* MODIF. DA: ZANDAL (originale di L. Francisco) *
* Sistemato puntamento a COMMENTS *
* *
* MODIF. DA: GigiX *
* Campo Attori protagonisti *
* ed esportazione corretta per myHTPC *
* *
* For use with Ant Movie Catalog 3.4.1 *
* www.ant.be.tf/moviecatalog *
* *
* The source code of the script can be used in *
* another program only if full credits to *
* script author and a link to Ant Movie Catalog *
* website are given in the About box or in *
* the documentation of the program *
***************************************************)
program FilmUP;
var
MovieName: string;
TheMovieAddress: string;
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
result := i;
Break;
end;
end;
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: integer;
BeginPos: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
LineNr := FindLine('<title>FilmUP - Cerca: ', Page, 0);
if LineNr = -1 then
begin
SetField(fieldURL, Address);
AnalyzeMoviePage(Page);
end
else
begin
PickTreeClear;
AddMoviesTitles(Page);
if TheMovieAddress='' then
begin
if PickTreeExec(Address) then AnalyzePage(Address);
end
else
begin
SetField(fieldURL, TheMovieAddress);
Page.Text := GetPage(TheMovieAddress);
AnalyzeMoviePage(Page);
end;
end;
Page.Free;
end;
procedure AnalyzeMoviePage(Page: TStringList);
var
Line: string;
NomeHtml: string;
LineNr,PrevLineNr: Integer;
BeginPos, EndPos: Integer;
Field: integer;
Attori: integer;
begin
LineNr := FindLine('<font face="arial, helvetica" size="3"><b>', Page, 0);
if LineNr > -1 then
begin
//Translated Title
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
SetField(fieldTranslatedTitle, Line);
Attori := 0;
repeat
//Look for next info
repeat
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
until Line<>'';
//Look for type of line
if Line = 'Titolo originale: ' then
Field := fieldOriginalTitle
else if Line = 'Regia: ' then
Field := fieldDirector
else if Line = 'Produzione: ' then
Field := fieldProducer
else if Line = 'Nazione: ' then
Field := fieldCountry
else if Line = 'Genere: ' then
Field := fieldCategory
else if Line = 'Anno: ' then
Field := fieldYear
else if Line = 'Durata: ' then
Field := fieldLength //Special case: get number only
//Alcune pagine hanno un campo in più, Attori protagonisti
else if Line = 'Attori protagonisti: ' then
begin
Field := fieldActors;
Attori := 1;
end
else if (Line = 'Cast: ') and (Attori = 0) then
Field := fieldActors
else if Line = 'Trama:' then
Field := fieldDescription
else
Field := 0;
// I have to add this test, for sometimes the description
// is on the same line as the tag 'Trama'
if (copy(Line,1,6)='Trama:') and (length(Line)>6) then
begin
Field := fieldDescription;
Delete(Line,1,6);
HTMLDecode(Line);
end
else
begin
//Get values
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
HTMLDecode(Line);
//Special case: Length
if Field = fieldLength then Line := copy(Line,1,length(Line)-1);
//MODIFICATO da GigiX
if Field = fieldDirector then
begin
Line := StringReplace(Line, ', ', '" , "');
Line := StringReplace(Line, '.', '');
Line := '"' + Line + '"';
end
if Field = fieldActors then
begin
Line := StringReplace(Line, ', ', '" , "');
Line := StringReplace(Line, '.', '');
Line := '"' + Line + '"';
end
end;
if Field<>0 then SetField(Field,Line);
until Field=fieldDescription;
end;
PrevLineNr := LineNr;
//Comments
LineNr := FindLine('">Recensione</a>', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
if Pos('DVD', Line) <> 0 then Delete(Line,1,pos('DVD',Line));
if Pos('Scheda', Line) <> 0 then Delete(Line,1,pos('Scheda',Line));
Delete(Line,1,pos('<a href="',Line)+8);
NomeHtml :=Copy(Line,1,pos('"',Line)-1);
if (copy(NomeHtml,1,1)<>'/') then
begin
NomeHtml := '/' + NomeHtml;
end;
GetComments('http://www.filmup.com'+NomeHtml);
PrevLineNr := LineNr;
end;
//Rating
LineNr := FindLine('">Opinioni</a>', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('Recensione',Line));
Delete(Line,1,pos('<a href="',Line)+8)
// ----------------------
// MODIFICATO DA PIVELLO: dava errore perchè il path ora è esteso.
// ----------------------
// Line := GetLineFromOtherPage('http://www.filmup.com/'+Copy(Line,1,pos('"',Line)-1),'</b> - <img src="/img/star/');
Line := GetLineFromOtherPage(Copy(Line,1,pos('"',Line)-1),'</b> - <img src="/img/star/');
if Line <> '' then
begin
Line := Copy(Line,1,pos('</b> - <img src="/img/star/',Line)-1);
if pos('.',Line)>0 then Line := Copy(Line,1,pos('.',Line)-1);
SetField(fieldRating,Line);
end;
PrevLineNr := LineNr;
end;
//Picture
LineNr := FindLine('<a href="posters/locp/', Page, PrevLineNr);
if LineNr = -1 then
begin
LineNr := FindLine('<img src="locand/', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('<img src="locand/', Line)+9);
GetPicture('http://www.filmup.com/'+Copy(Line,1,pos('"',Line)-1), False);
end;
end
else
begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('<a href="posters/locp/',Line)+8);
Line := GetLineFromOtherPage('http://www.filmup.com/'+Copy(Line,1,pos('"',Line)-1),'<img src="../loc/500/');
if Line <> '' then
begin
Delete(Line,1,pos('<img src="../',Line)+12);
GetPicture('http://www.filmup.com/posters/'+Copy(Line,1,pos('"',Line)-1), False);
end;
end;
DisplayResults;
end;
function GetLineFromOtherPage(address: string; hint: string): string;
var
Page: TStringList;
LineNr: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
LineNr := FindLine(hint, Page, 0);
if LineNr > -1 then result := Page.GetString(LineNr);
Page.Free;
end;
procedure GetComments(address: string);
var
Page: TStringList;
BeginLine: integer;
EndLine: integer;
i: integer;
Line, Comments: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
BeginLine := FindLine('RECENSIONI', Page, 0);
BeginLine := FindLine('<font face="arial,helvetica" size="2"><b>', Page, BeginLine);
EndLine := FindLine('<a href="opinioni.htm">Scrivi la tua recensione!</a></font><br><br>', Page, BeginLine);
for i:= BeginLine+1 to EndLine-1 do
begin
Line := Page.GetString(i);
Line := StringReplace(Line, '<br>', #13#10);
Line := StringReplace(Line, #13#10#32, #13#10);
HTMLRemoveTags(Line);
HTMLDecode(Line);
Comments := Comments + Line;
end;
SetField(fieldComments, Comments);
Page.Free;
end;
procedure AddMoviesTitles(Page: TStringList);
var
LineNr: Integer;
Line: string;
MovieTitle, MovieAddress: string;
BeginPos, EndPos: Integer;
begin
LineNr := 0;
LineNr := FindLine('FilmUP - Scheda:',Page,LineNr);
while LineNr > -1 do
begin
Line := Page.GetString(LineNr);
BeginPos := pos('<a href="',Line)+9;
EndPos := pos('" TARGET="_blank"><b>FilmUP - Scheda: ',Line);
MovieAddress := copy(Line,BeginPos,EndPos-BeginPos);
Delete(Line,1,EndPos);
BeginPos := pos('Scheda: ',Line)+8;
EndPos := pos('</a>',Line);
MovieTitle := copy(Line,BeginPos,EndPos-BeginPos);
HTMLRemoveTags(MovieTitle);
HTMLDecode(Movietitle);
LineNr := FindLine('FilmUP - Scheda:',Page,LineNr+1);
PickTreeAdd(MovieTitle, MovieAddress);
if TheMovieAddress='*' then
TheMovieAddress := MovieAddress
else
TheMovieAddress := '';
end;
LineNr := FindLine('Successivo',Page,LineNr);
Line := Page.GetString(LineNr);
BeginPos := pos('HREF',Line);
if BeginPos>0 then
begin
Delete(Line,1,BeginPos + 5);
EndPos := pos('"',Line);
MovieAddress := copy(Line,1,EndPos-1);
PickTreeMoreLink('http://www.filmup.com'+MovieAddress);
end;
if TheMovieAddress='*' then TheMovieAddress := '';
end;
// -----------------------------
// Questo è il main dello script
// -----------------------------
begin
if CheckVersion(3,4,1) then
begin
TheMovieAddress := '*';
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
if Input('FilmUP Import', 'Digita il titolo del film:', MovieName) then
begin
AnalyzePage('http://www.filmup.com/cgi-bin/search.cgi?q='+UrlEncode(MovieName)+'&ul=%25%2Fsc_%25');
end;
end
else
ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.4.1)');
end.