Filmaffinity reparado
Posted: 2006-07-04 13:20:21
Por alguna razón no me funcionaba correctamente el script que viene con el programa, tampoco el script nuevo que descargué de la página de ant movie catalog... Al buscar en fiilmaffinity encontraba resultados, pero no usando las mismas palabras para la busqueda en el script. Bien, no se mucho de programación, pero al unir parte de los códigos de ambos scripts logré que funcionara correctamente. Mis agradecimientos a los programadores originales. El código es el siguiente:
Code: Select all
program FilmAffinity;
const
BaseURL1 = 'http://www.filmaffinity.com';
var
MovieName: string;
MovieURL: 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;
//------------------------------------------------------------------------------------
function TextBetween(var S: string; StartTag: string; EndTag: string): string;
var
InitialPos: Integer;
begin
InitialPos := Pos(StartTag, S);
if InitialPos = 0 then
result := ''
else
begin
Delete(S, 1, InitialPos + Length(StartTag) - 1);
InitialPos := Pos(EndTag, S);
if InitialPos = 0 then
result := S
else
begin
result := copy(S, 1, InitialPos - 1);
Delete(S, 1, InitialPos + 1);
end;
end;
end;
//------------------------------------------------------------------------------------
function DeleteTags(var S: string): string;
var
n,len, tag: Integer;
c: char;
t: String;
begin
tag := 0;
t := '';
len := length(s);
for n :=1 to len do
begin
c := Copy(s,n,1);
// quitamos los tabuladores
if c = #9 then
c := ' ';
if(tag=1) then
begin
if(c='>') then tag := 0;
continue;
end
else
begin
if(c='<') then
begin
tag := 1;
continue;
end;
t := t + c;
end;
end
s := t;
result := t;
end;
//------------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line,Line2: string;
Count: Integer;
MovieTitle, MovieAddress: string;
begin
Count := 0;
Page := TStringList.Create;
Page.Text := GetPage(Address);
PickTreeClear;
// Veamos si solo hay un solo resultado
LineNr := FindLine('<b>TITULO ORIGINAL</b>', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
MovieTitle := TextBetween (Line, '<td ><b>', '</b></td>');
HTMLDecode(MovieTitle);
PickTreeAdd(MovieTitle, Address);
if PickTreeExec(Address) then
AnalyzeMoviePage(Address);
Page.Free;
exit;
end;
// Veamos cuantos resultados se han encontrado
LineNr := FindLine('resultados.</b></td></tr>', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Count := StrToInt(TextBetween (Line, '<b>', ' resultados.</b>'), 0);
end;
// Si no hemos encontrado ningún resultado, abandonamos
if Count = 0 then
begin
ShowMessage('No se ha encontrado ningún registro');
Page.Free;
exit;
end;
LineNr := 0;
while TRUE do
begin
LineNr := FindLine('<b><a href="', Page, LineNr + 1);
if LineNr = -1 then
begin
LineNr := FindLine('<b>siguientes >></b>', Page,0);
if LineNr = -1 then
break;
Line := Page.GetString(LineNr);
Address := TextBetween (Line, '<a href="', '">');
Page.Text := GetPage(Address);
LineNr := 0;
continue;
end;
Line := Page.GetString(LineNr);
Line2 := Line;
MovieAddress := TextBetween (Line, '<b><a href="', '">');
MovieTitle := TextBetween (Line2, '.html">', '</td>');
HTMLDecode(MovieTitle);
DeleteTags(MovieTitle);
if (MovieAddress<>' ') AND (MovieTitle <>'') then
PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
end;
if PickTreeExec(Address) then
AnalyzeMoviePage(Address);
Page.Free;
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Address: string);
var
Page: TStringList;
LineNr, aux: Integer;
LineAux: string;
Line: string;
iL: Integer;
Item: string;
Comments: string;
Actors: string;
Directors: string;
begin
Comments := '';
Actors := '';
// URL
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := GetPage(Address);
// Translated Title
LineNr := FindLine('<div style="margin-bottom: 4; padding:1; text-align: left; border-bottom: 1px solid #990000;"><span style="color:#990000; font-size:16; font-weight: bold;">', Page, 0);
Line := Page.GetString(LineNr);
Item := TextBetween (Line, ' border="0"> ', '</span>');
HTMLDecode(Item);
SetField(fieldTranslatedTitle, Trim (Item));
// Original Title
LineNr := FindLine('TITULO ORIGINAL', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td ><b>', '</b></td>');
HTMLDecode(Item);
SetField(fieldOriginalTitle, Trim (Item));
end;
// Picture
LineNr := FindLine('http://www.filmaffinity.com/imgs/movies/full/', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<img src="', '"></td></tr>');
GetPicture (Item);
end;
// Year
LineNr := FindLine('AÑO', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 3);
Item := TextBetween (Line, '<td >', '</td>');
HTMLDecode(Item);
SetField(fieldYear, Trim (Item));
end;
// Length
LineNr := FindLine('DURACIÓN', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', ' min.</td>');
HTMLDecode(Item);
SetField(fieldLength, Trim (Item));
end;
// Country
LineNr := FindLine('PAÍS', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, 'alt="', '" border');
HTMLDecode(Item);
SetField(fieldCountry, Trim (Item));
end;
// Director
LineNr := FindLine('DIRECTOR', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Directors := '';
while Pos ('stype=director', Line) > 0 do
begin
Item := TextBetween (Line, '">', '</a>');
HTMLDecode(Item);
if Directors = '' then
Directors := Item
else
Directors := Directors + ', ' + Item;
end;
SetField(fieldDirector, Trim (Directors));
end;
// Script writer
LineNr := FindLine('GUIÓN', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Guión: ' + Item + #13#10;
end;
// Composer
LineNr := FindLine('MUSICA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Música: ' + Item + #13#10;
end;
// Photography
LineNr := FindLine('FOTOGRAFÍA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Fotografía: ' + Item + #13#10;
end;
// Actors
LineNr := FindLine('REPARTO', Page, 0);
if LineNr <> -1 then
begin
Line := '';
while TRUE do
begin
LineNR := LineNR + 1;
Line := Line + Page.GetString(LineNr);
if Pos ('</td>', Line)>0 then
break;
end;
Actors := TextBetween (Line, '">', '</a>') + #13#10;
while Pos ('stype=cast', Line) > 0 do
Actors := Actors + TextBetween (Line, '"> ', '</a>') + #13#10;
HTMLDecode(Actors);
SetField(fieldActors, Actors);
end;
// Productor
LineNr := FindLine('PRODUCTORA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
HTMLDecode(Item);
SetField(fieldProducer, Trim (Item));
end;
// Critic
LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
if LineNr <> -1 then
begin
iL := 6;
Line := Page.GetString(LineNr + iL);
LineAux := Page.GetString(LineNr + iL+1);
while LineAux<>'</tr>' do
begin
Line := Line+LineAux;
iL := iL+1;
LineAux := Page.GetString(LineNr + iL+1);
end;
HTMLDecode(Line);
Line := StringReplace(Line, '<br />', #13#10);
Item := TextBetween (Line, '<td valign="top">','</td>');
Item := StringReplace (Item, 'á','á');
Item := StringReplace (Item, 'é','é');
Item := StringReplace (Item, 'í','í');
Item := StringReplace (Item, 'ó','ó');
Item := StringReplace (Item, 'ú','ú');
Item := StringReplace (Item, 'Á','Á');
Item := StringReplace (Item, 'É','É');
Item := StringReplace (Item, 'Í','Í');
Item := StringReplace (Item, 'Ó','Ó');
Item := StringReplace (Item, 'Ú','Ú');
Item := StringReplace (Item, '"','');
Item := StringReplace (Item, 'ñ','ñ');
Item := StringReplace (Item, '¿','¿');
SetField(fieldDescription, Trim(Item));
end;
// Category
// Category
LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 6);
Item := TextBetween (Line, ' / ', ' / ');
if Length(Item)> 100 then
begin
Line := Page.GetString(LineNr + 6);
Item := TextBetween (Line, '<td valign="top">', ' /');
end;
HTMLDecode(Item);
SetField(fieldCategory, Trim (Item));
end;
//LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
// if LineNr <> -1 then
// begin
// Line := Page.GetString(LineNr + 6);
// Item := TextBetween (Line, ' / ', ' / ');
// if Length(Item)> 100 then
// begin
// Line := Page.GetString(LineNr + 6);
// Item := TextBetween (Line, '<td >', ' /');
// end;
// HTMLDecode(Item);
// SetField(fieldCategory, Trim (Item));
// end;
// Official Webpage
LineNr := FindLine('WEB OFICIAL', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
end;
// Rating
LineNr := FindLine('<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', '</td>');
HTMLDecode(Item);
SetField(fieldRating, Item);
end;
HTMLDecode(Comments);
SetField(fieldComments, Comments);
end;
//------------------------------------------------------------------------------------
begin
if (CheckVersion(3,5,0)=FALSe) then
begin
ShowMessage('Se requiere Ant Movie Catalog versión 3.5 o superior');
exit;
end;
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
Input('FilmAffinity', 'Pelicula:', MovieName);
AnalyzePage('http://www.filmaffinity.com/es/search.php?stext=' + UrlEncode(MovieName) + '&stype=title');
end.