Page 1 of 1

[REL][ES]Filmaffinity + CaratulasDeCine

Posted: 2005-06-09 19:40:03
by javilp
[ES]Nuevo script, que coge toda la informacion de filmaffinity y la caratula de CaratulasDeCine. Muchas gracias tanto a aviloria como a japg2000 por sus scripts. Esto es solo una mezcla de ambos (las ultimas versiones de cada uno de ellos)

[EN]This is a new script, it takes all the info from filmaffinity and the picture from CaratulasDeCine. Thanks to aviloria and japg2000 for their scripts. This script is only a mix between both of them (It is made with the last versions of the scripts)

Code: Select all

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

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

[Infos]
Authors=aviloria  (aviloria@yahoo.com); japg2000 (japg2000@terra.es); javilp (javilp83@telefonica.net)
Title=FilmAffinity + CaratulasDeCine  (ES)
Description=Movie importation script for FilmAffinity Spain and CaratulasDeCine
Site=http://www.filmaffinity.com
Language=ES
Version=1.0
Requires=3.5.0
Comments=Updated to the new beta version of the page | Previous version is unsupported. | Mix between two scripts made by javilp. The whole work of the scripts made by aviloria and japg2000.
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://new.filmaffinity.com/es/res.php?stext=';
  SearchPostFix = '&stype=tit';
  BaseURL1 = 'http://new.filmaffinity.com';

var
  MovieName: string;
  MovieURL: string;
  Title: 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
    ShowMessage('No se ha podido establecer la conexion.');
  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>');
        HTMLDecode(MovieTitle);
        Line := Page.GetString(LineNr);
        MovieAddress := TextBetween (Line, '<b><a href="', '">');
        PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
        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 + 1);
    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);
    Item := TextBetween (Line, '<td  >', '</td>');
    if Pos (' / ', Item) <> 0 then
    begin
      Line := Item;
      Item := Copy (Item, 1, Pos (' / ', Item));
      Line := TextBetween (Line, ' / ', '<br />');
     if Pos (' / ', Line) <> 0 then
      begin
        Comments := Comments + Item + #13#10;
        Item := Line;
        Item := Copy (Item, 1, Pos (' / ', Item));
        Line := TextBetween (Line, ' / ', '</td>');
        SetField(fieldCategory, Trim(Item));
        SetField(fieldDescription, Line);
      end
      else
      begin
        SetField(fieldCategory, Trim(Item));
        SetField(fieldDescription, Line);
      end
    end
    else
      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;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
// CARATULA DE CARATULASDECINE
function EliminaInicio(S: string; CR: string): string;
begin
  result := S;
  while Pos(CR, result) = 1 do
  begin
    Delete(result, 1, Length(CR));
  end;
end;

function CadenaEntre(var S: string; StartTag: string; EndTag: string): string;
var
  InicioPos: Integer;
begin
  InicioPos := Pos(StartTag, S);
  Delete(S, 1, InicioPos + Length(StartTag) - 1);
  InicioPos := Pos(EndTag, S);
  result := copy(S, 1, InicioPos - 1);
  Delete(S, 1, InicioPos + 1);
end;

function PreparaTitulo(T: string): string;
var
  i: Integer;
begin
  result := AnsiLowerCase(T);
  HTMLDecode(result);
  result := StringReplace(result, chr(146), '');
  result := StringReplace(result, chr(39), '');
  result := StringReplace(result, '´', '');
  result := StringReplace(result, '`', '');
  result := StringReplace(result, '"', '');
  result := StringReplace(result, '¿', '');
  result := StringReplace(result, '?', '');
  result := StringReplace(result, '¡', '');
  result := StringReplace(result, '!', '');
  result := StringReplace(result, '.', '');
  result := StringReplace(result, ',', '');
  result := StringReplace(result, ':', '');
  result := StringReplace(result, ';', '');
  result := StringReplace(result, '-', '');
  result := StringReplace(result, '/', '');
  result := StringReplace(result, '\', '');
  result := StringReplace(result, '_', '');
  result := StringReplace(result, 'á', 'a');
  result := StringReplace(result, 'é', 'e');
  result := StringReplace(result, 'í', 'i');
  result := StringReplace(result, 'ó', 'o');
  result := StringReplace(result, 'ú', 'u');
  result := StringReplace(result, 'ä', 'a');
  result := StringReplace(result, 'ë', 'e');
  result := StringReplace(result, 'ï', 'i');
  result := StringReplace(result, 'ö', 'o');
  result := StringReplace(result, 'ü', 'u');
  result := StringReplace(result, 'ñ', 'n');
end;

function GetCaratulasDeCineDir(MovieTitle: string): string;
var
  PageOfLetter: Array of string;
  C: Char;
  Index: Integer;
begin
  Setarraylength(PageOfLetter,36);
  PageOfLetter[0]:='0_9';  PageOfLetter[1]:='0_9';  PageOfLetter[2]:='0_9';  PageOfLetter[3]:='0_9';
  PageOfLetter[4]:='0_9';  PageOfLetter[5]:='0_9';  PageOfLetter[6]:='0_9';  PageOfLetter[7]:='0_9';
  PageOfLetter[8]:='0_9';  PageOfLetter[9]:='0_9';  PageOfLetter[10]:='a';   PageOfLetter[11]:='b';
  PageOfLetter[12]:='c';   PageOfLetter[13]:='d';   PageOfLetter[14]:='e';   PageOfLetter[15]:='f_h';
  PageOfLetter[16]:='f_h'; PageOfLetter[17]:='f_h'; PageOfLetter[18]:='i_k'; PageOfLetter[19]:='i_k';
  PageOfLetter[20]:='i_k'; PageOfLetter[21]:='l';   PageOfLetter[22]:='m_n'; PageOfLetter[23]:='m_n';
  PageOfLetter[24]:='o_q'; PageOfLetter[25]:='o_q'; PageOfLetter[26]:='o_q'; PageOfLetter[27]:='r_s';
  PageOfLetter[28]:='r_s'; PageOfLetter[29]:='t_z'; PageOfLetter[30]:='t_z'; PageOfLetter[31]:='t_z';
  PageOfLetter[32]:='t_z'; PageOfLetter[33]:='t_z'; PageOfLetter[34]:='t_z'; PageOfLetter[35]:='t_z';

  C := copy(MovieTitle, 1, 1);
  if (C >= '0') and (C <= '9') then
  begin
  	Index := Ord(C) - Ord('0');
  end
  else
  begin
  	Index := 10 + Ord(C) - Ord('a');
  end;

  result:='http://www.caratulasdecine.com/' + PageOfLetter[Index] + '.htm';
end;

procedure AnalyzePageCaratulasDeCine(PageDir: string);
var
  CaratulasdecinePage, MoviePage: TStringList;
  MovieDir, Line, LineTmp: string;
  Encontrado, Salir, BeginPos, EndPos, LineNr, LineMov: Integer;
begin
  CaratulasdecinePage := TStringList.Create;
  CaratulasdecinePage.Text := GetPage(PageDir);

  LineNr := FindLine('</big></big></big></big></big></big>', CaratulasdecinePage, 0);
  LineNr := LineNr + 1;
  Line := CaratulasdecinePage.GetString(LineNr);
  Line := EliminaInicio(Line, ' ');
  Salir := 0;
  Encontrado := 0;
  repeat
    while (Pos('<br>', Line) = 0) and (Pos('</td>', Line) = 0) and (LineNr < 10000) do
    begin
      if copy(Line, Length(Line), 1) <> ' ' then
        Line := Line + ' ';
      LineNr := LineNr + 1;
      LineTmp := CaratulasdecinePage.GetString(LineNr);
      LineTmp := EliminaInicio(LineTmp, ' ');
      Line := Line + LineTmp;
    end;

    if Pos('</td>', Line) > 0 then
      Salir := 1;

    if Pos('<a class="A" href="', Line) > 0 then
    begin
      MovieDir := 'http://www.caratulasdecine.com/' + CadenaEntre(Line, '<a class="A" href="', '">');
    end
    else
    begin
      MovieDir := Line;
      MovieDir := CadenaEntre(MovieDir, '<a href="', 'class="A">');
      while Pos('<a href="', MovieDir) > 0 do
        MovieDir := CadenaEntre(MovieDir, '<a href="', 'class="A">');
    end;

    Line := CadenaEntre(Line, '', '<');
    Line := PreparaTitulo(Line);

    if Pos(Title, Line) > 0 then
    begin
      MoviePage := TStringList.Create;
      MoviePage.Text := GetPage(MovieDir);
      LineMov := FindLine('<p align="center"><img src="', MoviePage, 0);
      Line := MoviePage.GetString(LineMov);
      Line := CadenaEntre(Line, '<p align="center"><img src="', '" ');
      Line := EliminaInicio(Line, '../');
      GetPicture('http://www.caratulasdecine.com/' + Line);
      Salir := 1;
      Encontrado := 1;
    end;

    LineNr := LineNr + 1;
    if LineNr > 10000 then
      Salir := 1;

    Line := CaratulasdecinePage.GetString(LineNr);
    Line := EliminaInicio(Line, ' ');
  until Salir = 1;

  if (Encontrado <> 1) then
     ShowMessage('Titulo ' + Title + ' no encontrado en ' + PageDir)
end;

begin
  if CheckVersion(3,5,0) then
  begin
    MovieName := GetField(fieldTranslatedTitle);
    if MovieName = '' then
      MovieName := GetField(fieldOriginalTitle);
    if Input('Importar de FilmAffinity + CaratulasDeCine', 'Introduzca el titulo de la pelicula:', MovieName) then
    begin
      AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix);
      Title := PreparaTitulo (MovieName);
      AnalyzePageCaratulasDeCine(GetCaratulasDeCineDir(Title));
    end;
  end
  else
    ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
end.