[ES] Versión final en español para filmaffinity

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
kreti
Posts: 12
Joined: 2005-07-19 01:20:36

[ES] Versión final en español para filmaffinity

Post by kreti »

He vuelto a modificar este scrip, y ahora ya funcionan bien las búsquedas. Por lo menos, con las decenas de películas que he probado.

He modificado la constante SearchBaseURL, y también he modicado el procedimiento AnalyzePage, para que si solo encuentra un resultado, vaya directamente a buscarlo. Antes fallaba cuando solo encontraba un resultado.

Por cierto, que en la Descripción, guardo todo lo que aparece en Género y crítica, y no solo la sinopsis.

El código final del script será:

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) and modded by kreti (bisoft@hotmail.com)
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=1.3
Requires=3.5.0
Comments=Updated to the new beta version of the page | Previous version is unsupported.
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]

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

program FilmAffinity;

const
  SearchBaseURL = 'http://www.filmaffinity.com/es/search.php?stext=';
  SearchPostFix = '&stype=title';
  BaseURL1 = 'http://new.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;
//------------------------------------------------------------------------------------

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  Line: string;
  Count: Integer;
  MovieTitle, MovieAddress: string;

begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  if Pos('<title>Busqueda de "', Page.Text) = 0 then
  begin   //se supone que solo existe un resultado, y ya fue a ese resultado
    AnalyzeMoviePage(Address);
  end else
  begin
    LineNr := FindLine('resultados.</b></td></tr>', Page, 0);
    Line := Page.GetString(LineNr);
    Count := StrToInt(TextBetween (Line, '<b>', ' resultados.</b>'), 0);
    if Count = 0 then
    begin
      ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
    end else
    begin
      PickTreeClear;
      PickTreeAdd('Encontrados ' + IntToStr(Count) + ' resultados para "' + MovieName + '"', '');
      LineNr := LineNr + 7;
      Line := Page.GetString(LineNr);
      repeat
        MovieTitle := TextBetween (Line, '.html">', '</a>');
     if MovieTitle <> '' then
         begin
           HTMLDecode(MovieTitle);
           Line := Page.GetString(LineNr);
           MovieAddress := TextBetween (Line, '<b><a href="', '">');
           PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
         end;
        LineNr := LineNr + 10;
        Line := Page.GetString(LineNr);
      until Pos('</table>', Line) > 0;

      if PickTreeExec(Address) then
        AnalyzeMoviePage(Address);
    end;
  end;
  Page.Free;
end;
//------------------------------------------------------------------------------------

procedure AnalyzeMoviePage(Address: string);
var
  Page: TStringList;
  LineNr, aux: 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('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('owned by Studio', Page, 0);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<img src="', '">');
    if Pos (BaseURL1, Item) <> 0 then
      Item := TextBetween (Item, BaseURL1, '"');
    GetPicture (BaseURL1 + 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 := Page.GetString(LineNr + 1);
    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;
   
  // Genere & Critic
  LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    HTMLDecode(Line);
    Line := Copy (Page.Text, 1, Length (Page.Text));
    Line := StringReplace(Line, '<br />', #13#10);
    Item := TextBetween (Line, 'GÉNERO Y CRÍTICA</b></td>', '</tr>');
    Item := TextBetween (Item, '<td  >', '</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;

  // 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) then
  begin
    MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      MovieName := GetField(fieldTranslatedTitle);
    if Input('Importar de FilmAffinity', 'Introduzca el titulo de la pelicula:', MovieName) then
    begin
      AnalyzePage(SearchBaseURL + UrlEncode(MovieName)  + SearchPostfix);
    end;
  end
  else
    ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
end. 
Espero que os sea útil.
Last edited by kreti on 2005-08-04 22:32:08, edited 1 time in total.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Hi,
Sorry, I do not speak spanish. Is it a corrected version that replaces the script that was currently available, or simply a modified version?
kreti
Posts: 12
Joined: 2005-07-19 01:20:36

Post by kreti »

It's a modified version that works fine, at least for the spanish version of the web. It's based on the mods by aviloria and rodpedja.

I think the original version of the script that the program contains does not work since filmaffinity made changes on his web site.

Excuse me for the language. I answered you the best i can.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

No problem, your english is OK ;)
Thanks for the script.
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

Hello!

Thanks Kreti :grinking: the script needed a revision since the latest changes at the webpage. Good work!

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

Rating does not work...

Post by sadman1973 »

Can anyone tell me if this script imports the rating? I use it but it does not import de number . with any movie...
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

Yes, at least the latest version. I've tried with two films: "la playa" and "dune" and no problem.

Regards, folgui.
darts501
Posts: 21
Joined: 2005-05-29 20:47:19

I can`t import cover

Post by darts501 »

could you checked it
çthank
kreti
Posts: 12
Joined: 2005-07-19 01:20:36

Post by kreti »

Hubo nuevos cambios en la web, aunque lo único que noté es que no me importaba las carátulas.

Conseguí arreglarlo sustituyendo una sola línea en el script anterior:
En el procedimiento AnalizeMoviePage, buscar las líneas

Code: Select all

  // Picture
  LineNr := FindLine('owned by Studio', Page, 0); 
y sustituir por

Code: Select all

  // Picture
  LineNr := FindLine('<img src="http://images.filmaffinity.com/movies/full', Page, 0);
Si lo haceis así, os seguirá rulando el script sin ningún problema.

Ahora lo intentaré explicar en inglés,

New modification on the web. The only thing I see is that the import of pictures doesn't work.

I fix it changing one line on the upper script. In the procedure AnalizeMoviePage, find the lines

Code: Select all

  // Picture
  LineNr := FindLine('owned by Studio', Page, 0); 
and change them for:

Code: Select all

  // Picture
  LineNr := FindLine('<img src="http://images.filmaffinity.com/movies/full', Page, 0);
If you do it thus, the script will work fine another time.
Last edited by kreti on 2005-11-19 00:48:29, edited 1 time in total.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks ;)
darts501
Posts: 21
Joined: 2005-05-29 20:47:19

thanks

Post by darts501 »

Great script
Tumbita
Posts: 1
Joined: 2006-09-17 08:40:05

Post by Tumbita »

Muchas gracias por el script, se agradece y encima en español que alivio.
molgar
Posts: 2
Joined: 2005-09-23 10:54:01

Post by molgar »

Esta versión es algo antigua y no funciona correctamente, mejor usar la que viene con el instalador.

This version is quite old, and does not work correctly. It's better to use the one that comes with the installer.
Post Reply