FilmAffinity (ES): New version

If you made a script you can offer it to the others here, or ask help to improve it. You can also report here bugs & problems with existing scripts.
Post Reply
aviloria
Posts: 24
Joined: 2006-11-08 11:52:28

FilmAffinity (ES): New version

Post by aviloria »

Hola a todos,

Aquí os dejo la última versión (24/02/2010) del script para FilmAffinity (ES).
Se han incorporado los cambios para adaptarse a las modificaciones de la página, y ya se pueden obtener correctamente los campos Género, Sinopsis y Críticas y la Imagen de la carátula.

Un saludo


---------------------------------------------------------

Hi all,

This is the latest version of the FilmAffinity (ES) script (02/24/2010).
Changes have been made to adapt the script to the latest site modifications. Now you can get right values for the fields Category, Synopsis and Critics, and the Cover image.

Enjoy it!


Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=aviloria  (aviloria@yahoo.com) modded by: rodpedja (rodpedja@gmail.com), kreti (bisoft@hotmail.com), MrK, gilistico
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=2.47
Requires=3.5.0
Comments=Updated: Script option for batch running (default disabled), and now it gets the category.
License=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.|
GetInfo=1

[Options]
DontAsk=0|0|1=Método rápido: No te pregunta el titulo al principio, ni te pide confirmar si sólo hay un resultado|0=Método lento: Confirmas la información manualmente

***************************************************)

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>TÍTULO 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(GetOption('DontAsk') = 0) then
          if PickTreeExec(Address) then AnalyzeMoviePage(Address);
       if(GetOption('DontAsk') = 1) 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: Integer;
   Line: 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('TÍTULO 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://pics.filmaffinity.com/', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr);
      Item := TextBetween(Line, '<a class="lightbox" href="', '"');
      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 + 3);
      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 + 3);
      Item := TextBetween(Line, 'title="', '" 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('MÚSICA', 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;

   // Category
   LineNr := FindLine('GÉNERO', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 2);
      Item := DeleteTags(Line);
      HTMLDecode(Item);
      SetField(fieldCategory, Trim(Item));
   end;

   // Synopsis
   LineNr := FindLine('SINOPSIS', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<td>', '</td>');
      HTMLDecode(Item);
      SetField(fieldDescription, Trim(Item));
   end;

   // Critic
   LineNr := FindLine('CRÍTICAS', Page, 0);
   if LineNr <> -1 then
   begin
      Item := Page.GetString(LineNr + 3);
      HTMLDecode(Item);
      while Pos('<br>', Item) <> 0 do
         Item := StringReplace(Item, '<br>', #13#10);
      while Pos('</br>', Item) <> 0 do
         Item := StringReplace(Item, '</br>', #13#10);
      while Pos('  ', Item) <> 0 do
         Item := StringReplace(Item, '  ', ' ');
      Comments := Comments + 'Críticas: ' + #13#10 + DeleteTags(Item) + #13#10;
   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);

   if GetOption('DontAsk') = 0 then
      Input('FilmAffinity', 'Pelicula:', MovieName);

   if Pos('filmaffinity.com', MovieName) > 0 then
      AnalyzeMoviePage(MovieName)
   else
      AnalyzePage('http://www.filmaffinity.com/es/search.php?stext=' + UrlEncode(MovieName)  + '&stype=Title');
end.
iosunoenlle
Posts: 5
Joined: 2010-02-20 12:55:13

Post by iosunoenlle »

Gracias, por la rapidez, un saludo.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks
romiri
Posts: 2
Joined: 2010-02-24 15:40:11

Post by romiri »

MUCHISIMAS GRACIAS!!!! Funciona perfectamente!!!! :grinking:
kreti
Posts: 12
Joined: 2005-07-19 01:20:36

Post by kreti »

Funciona bastante bien, pero no perfectamente.

He encontrado al menos dos errores:

1- Falla el parámetro 'Dont Ask', así siempre obliga a seleccionar la película aunque solo haya encontrado una.
2- En algunas películas que no tienen la carátula en grande, no importa ninguna imagen. La mayoría si la tienen, pero fallan algunas como 'Te quiero para siempre', 'Los límites del silencio', 'La fuerza del cariño II" , ...

He modificado el script para corregir estos dos errores, quedando del siguiente modo:

Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=aviloria  (aviloria@yahoo.com) modded by: rodpedja (rodpedja@gmail.com), kreti (bisoft@hotmail.com), MrK, gilistico
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=2.47
Requires=3.5.0
Comments=Updated: Script option for batch running (default disabled), and now it gets the category.
License=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.|
GetInfo=1

[Options]
DontAsk=0|0|1=Método rápido: No te pregunta el titulo al principio, ni te pide confirmar si sólo hay un resultado|0=Método lento: Confirmas la información manualmente

***************************************************)

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;
   Address2 : string;

begin
   Count := 0;
   Page  := TStringList.Create;
   Page.Text := GetPage(Address);
     PickTreeClear;

     // Veamos si solo hay un solo resultado
   LineNr := FindLine('<b>1 resultados.</b>', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 7);
      Line2:=Line;
      Address2 := 'http://filmaffinity.com' + TextBetween (Line, '<a href="', '">');
      MovieTitle := TextBetween (Line2, '.html">', '</a>');
      HTMLDecode(MovieTitle);
      PickTreeAdd(MovieTitle, Address);


       if(GetOption('DontAsk') = 0) then
            if PickTreeExec(Address) then AnalyzeMoviePage(Address);
       if(GetOption('DontAsk') = 1) then AnalyzeMoviePage(Address2);
      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: Integer;
   Line: 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('TÍTULO 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('src="/images/enlarge.gif"', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('src="/images/enlarge.gif"',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<a class="lightbox" href="http://pics.filmaffinity.com/', '.jpg');
    HTMLDecode(Item);
    GetPicture ('http://pics.filmaffinity.com/'+Item+'.jpg');
  end;
  if LineNr = -1 then
  begin
    LineNr := FindLine('<img src="http://pics', Page, 0);
    if LineNr <> -1 then
    begin
      Item := copy(Page.Text, pos('<td align="center"><img src="http://pics.filmaffinity.com',Page.Text), length(Page.Text));
      Item := TextBetween (Item, '"http://pics.filmaffinity.com/', '.jpg');
      HTMLDecode(Item);
      GetPicture ('http://pics.filmaffinity.com/'+Item+'.jpg');
    end;
  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 + 3);
      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 + 3);
      Item := TextBetween(Line, 'title="', '" 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('MÚSICA', 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;

   // Category
   LineNr := FindLine('GÉNERO', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 2);
      Item := DeleteTags(Line);
      HTMLDecode(Item);
      SetField(fieldCategory, Trim(Item));
   end;

   // Synopsis
   LineNr := FindLine('SINOPSIS', Page, 0);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<td>', '</td>');
      HTMLDecode(Item);
      SetField(fieldDescription, Trim(Item));
   end;

   // Critic
   LineNr := FindLine('CRÍTICAS', Page, 0);
   if LineNr <> -1 then
   begin
      Item := Page.GetString(LineNr + 3);
      HTMLDecode(Item);
      while Pos('<br>', Item) <> 0 do
         Item := StringReplace(Item, '<br>', #13#10);
      while Pos('</br>', Item) <> 0 do
         Item := StringReplace(Item, '</br>', #13#10);
      while Pos('  ', Item) <> 0 do
         Item := StringReplace(Item, '  ', ' ');
      Comments := Comments + 'Críticas: ' + #13#10 + DeleteTags(Item) + #13#10;
   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);

   if GetOption('DontAsk') = 0 then
      Input('FilmAffinity', 'Pelicula:', MovieName);

   if Pos('filmaffinity.com', MovieName) > 0 then
      AnalyzeMoviePage(MovieName)
   else
      AnalyzePage('http://www.filmaffinity.com/es/search.php?stext=' + UrlEncode(MovieName)  + '&stype=Title');
end.
Post Reply