Filmaffinity reparado

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
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Filmaffinity reparado

Post by sadman1973 »

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.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks.
I added

Code: Select all

 tags to make the code look better.
Your code is missing the info block at the beginning of the script. It is not displayed within AMC (you have to open the script in notepad or other text editor to see it) but it is important if you changed script properties/options. Did you made a change in that? Or did you only fix the script code itself?
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Filmaffinity

Post by sadman1973 »

I only tried to change the code... But i'm not a programmer.Please if you change something to make it work better, post the code here.
:)
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

But that script works now?
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

filmaffinity

Post by sadman1973 »

There is otherone posted here... But does not import de rating anymore... just like this one...
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

¡Hello!

Script included in the latest AMC pack (2006-07-29) works fine for me (including rating). Don't know exactly what is the reason to change it. By the way, format of the latest script (v2.3) is accordly to the amc-3.5.x and the modifications of this thread seem to be accordly to old format :-?

sadman1973, can you put a title/movie that has problems with the original script?

Regards, folgui.
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Flimaffinity

Post by sadman1973 »

Well, the original script did not work with movie names longer than one word...
I'll try instaling the original title and see what happnes now...
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Rating: It does not work...

Post by sadman1973 »

Acabo de probar el script original de la última versión, y no carga el rating...
Alguien sabe como arreglarlo?

I just tried the original script from the last version, and it does not import the rating...
Does anyone know how to solve that?

Salu2!!!
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Oops!!!

Post by sadman1973 »

Sorry... I just tried with another movie and now is working... Sorry for all the trouble...
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Re: Flimaffinity

Post by folgui »

sadman1973 wrote:Well, the original script did not work with movie names longer than one word...
I'll try instaling the original title and see what happnes now...
Hello!

With "señor de la guerra" it works and has 4 words ;)

About "rating" perhaps movie doesn't have any or there is really a problem with the script. The movies i've tried (few), get the rating info without problem. Do you know any movie that has rating at page and doesn't get it with the script?

Thanks for you work with the community ;)

Regards, folgui.

P.D. Hope you understand english without problem and don't need spanish translation of my words. Tell me, in other case...
sadman1973
Posts: 12
Joined: 2005-09-06 16:28:38

Filmaffinitty

Post by sadman1973 »

Folgui, I re-install the program and the problem was solved.
Now is working 100%.
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

Ok.

antp, keep the script that you included in the latest amc pack as the latest working one. No updates needed.

Regards, folgui.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

ok :)
Post Reply