Here it is a new scritp for filmaffinity [es]

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

Here it is a new scritp for filmaffinity [es]

Post by aviloria »

Hi,

I have written a new script for FilmAffinity (spanish version). It's easy to transform to english version.

Enjoy!

Code: Select all

// GETINFO SCRIPTING
// FilmAffinity v1.0 by aviloria

(***************************************************
 *  Author: aviloria   (aviloria@yahoo.com)        *
 *  Script for the importation of pictures from    *
 *  http://www.filmaffinity.com                    *
 *                                                 *
 *  For use with Ant Movie Catalog 3.4.0           *
 *  www.antp.be/software/moviecatalog              *
 *                                                 *
 *  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               *
 ***************************************************)


program FilmAffinity;

const
  SearchBaseURL = 'http://www.filmaffinity.com/es/res.php?stext=';
  SearchPostFix = '&stype=all';
  BaseURL1 = 'http://www.filmaffinity.com/es/';
  BaseURL2 = '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);
  Delete(S, 1, InitialPos + Length(StartTag) - 1);
  InitialPos := Pos(EndTag, S);
  result := copy(S, 1, InitialPos - 1);
  Delete(S, 1, InitialPos + 1);
end;
//------------------------------------------------------------------------------------

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

begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  if Pos('<title>FilmAffinity', Page.Text) = 0 then
  begin
    ShowMessage('No se ha podido establecer la conexion.');
  end else
  begin
    LineNr := FindLine('<td class="tt1" align="center">Resultados por Título</td>', Page, 0);
    LineNr := LineNr + 7;
    Line := Page.GetString(LineNr);
    if Pos ('No se han encontrado coincidencias', Line) <> 0 then
    begin
      ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
    end else
    begin
      PickTreeClear;
      Line := TextBetween (Line, '<b>', '</b>');
      PickTreeAdd('Encontrados ' + Line + ' resultados para "' + MovieName + '"', '');

      LineNr := LineNr + 9;
      Line := Page.GetString(LineNr);
      repeat
        MovieAddress := TextBetween (Line, '<a href="', '">');
        MovieTitle := TextBetween (Line, '<span class="ntext">', '</span>');
        HTMLDecode(Movietitle);
        PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
        LineNr := LineNr + 3;
        Line := Page.GetString(LineNr);
      until Pos('</ol>', 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;
  Description: string;

begin
  Comments := '';
  Actors := '';
  Description := '';

  // URL
  SetField(fieldURL, Address);

  Page := TStringList.Create;
  Page.Text := GetPage(Address);

  // Translated Title
  LineNr := FindLine('<td align="center" class="tt1">', Page, 0);
  Line := Page.GetString(LineNr);
  Item := TextBetween (Line, '<td align="center" class="tt1">', ' <img src=');
  HTMLDecode(Item);
  SetField(fieldTranslatedTitle, Trim (Item));

  LineNr := LineNr + 8;
  Line := Page.GetString(LineNr);

  // Original Title
  if Pos ('TITULO ORIGINAL', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext">', '</td>');
    HTMLDecode(Item);
    SetField(fieldOriginalTitle, Trim (Item));
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
  end;

  // Picture
  if Pos ('owned by Studio', Line) > 0 then
  begin
    Item := TextBetween (Line, '<img src="', '" >');
    GetPicture (BaseURL2 + Item, False);
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Year
  if Pos ('AÑO', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext">', '</td>');
    HTMLDecode(Item);
    SetField(fieldYear, Trim (Item));
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Length
  if Pos ('DURACIÓN', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext">', '</td>');
    HTMLDecode(Item);
    aux := Pos (' min', Item);
    if aux > 0 then
      Delete (Item, aux, aux + 3);
    SetField(fieldLength, Trim (Item));
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Country
  if Pos ('PAÍS', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, 'alt="', '">');
    HTMLDecode(Item);
    SetField(fieldCountry, Trim (Item));
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Director
  if Pos ('DIRECTOR', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '&stype=dir">', '</a>');
    HTMLDecode(Item);
    SetField(fieldDirector, Trim (Item));
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Script writer
  if Pos ('GUIÓN', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext">', '</td>');
    Comments := Comments + 'Guión: ' + Item + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Musician
  if Pos ('MUSICA', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext" >', '</td>');
    Comments := Comments + 'Música: ' + Item + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Photography
  if Pos ('FOTOGRAFÍA', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<td class="ntext" >', '</td>');
    Comments := Comments + 'Fotografía: ' + Item + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Actors
  if Pos ('REPARTO', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Actors := Actors + TextBetween (Line, '&stype=rep">', '</a>') + #13#10;
    while Pos ('&stype=rep"> ', Line) > 0 do
      Actors := Actors + TextBetween (Line, '&stype=rep"> ', '</a>') + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Productor
  if Pos ('PRODUCTORA', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Comments := Comments + 'Productora: ' + TextBetween (Line, '<td class="ntext" colspan="2">', '</td>') + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;
   
  // Genere & Critic
  if Pos ('GÉNERO Y CRÍTICA', Line) > 0 then
  begin
    Line := Copy (Page.Text, 1, Length (Page.Text));
    Line := StringReplace(Line, '<br />', #13#10);
    Line := TextBetween (Line, 'GÉNERO Y CRÍTICA', '</tr>');
    Description := TextBetween (Line, '<td class="ntext" colspan="2">', '</td>');
    LineNr := FindLine('WEB OFICIAL', Page, LineNr);
    Line := Page.GetString(LineNr);
  end;

  // Official Webpage
  if Pos ('WEB OFICIAL', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  // Rating
  if Pos ('PUNTUACIÓN MEDIA', Line) > 0 then
  begin
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    Item := TextBetween (Line, '<b>', '</b>');
    HTMLDecode(Item);
    if Length(Item) = 3 then
    begin
      Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0) + (StrToInt(StrGet(Item, 3), 0) / 10)));
    end else
    begin
      Item := IntToStr(Round(StrToInt(StrGet(Item, 1), 0)));
    end;
    SetField(fieldRating, Item);
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
  end;

  HTMLDecode(Comments);
  SetField(fieldComments, Comments);
  HTMLDecode(Actors);
  SetField(fieldActors, Actors);
  HTMLDecode(Description);
  SetField(fieldDescription, Description);

  DisplayResults;
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------

begin
  if CheckVersion(3,4,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.4.0)');
end.
[/code]
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

Good job.

I've made a change to get the Category from "Description" and put it in the category field. Some movies have awards stuff before category so in some cases we must delete that manually from the category field, but in rest of cases it works.

Change the code in the next paragraph:

Code: Select all

  // Genere & Critic
  if Pos ('GÉNERO Y CRÍTICA', Line) > 0 then
  begin
    Line := Copy (Page.Text, 1, Length (Page.Text));
    Line := StringReplace(Line, '<br />', #13#10);
    Line := TextBetween (Line, 'GÉNERO Y CRÍTICA', '</tr>');
    Item := TextBetween (Line, '<td class="ntext" colspan="2">', '/ SINOPSIS:');
    HTMLDecode(Item);
    SetField(fieldCategory, Trim(Item));
    Description := TextBetween (Line, '/ SINOPSIS:', '</td>');
    LineNr := FindLine('WEB OFICIAL', Page, LineNr);
    Line := Page.GetString(LineNr);
  end;
Regards, folgui
Post Reply