Parece q el script no recoge los comentarios de la pelicula
Podias mirarlo
Gracias
fallo en fillaffinity
Bueno, yo he modificado un poco el script original y ya funciona como antes. Ha quedado asi:
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, iL, aux: Integer;
Line,LineAux: string;
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
LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, ' / ', ' / ');
if Length(Item)> 100 then
begin
Line := Page.GetString(LineNr + 1);
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.
category
minor change to get the category also
un pequeño cambio para coger la categoria
un pequeño cambio para coger la categoria
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, iL, aux: Integer;
Line,LineAux: string;
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
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 + 1);
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.