[UPDATE] FilmAffinity (ES) 2.82 + CartelesPeliculas (ES) 1.2

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
carlosmg2
Posts: 39
Joined: 2009-08-18 19:21:08
Contact:

[UPDATE] FilmAffinity (ES) 2.82 + CartelesPeliculas (ES) 1.2

Post by carlosmg2 »

Hola,

Quería hacer un pequeño aporte. He unido estos 2 scripts haciendo un poco de Franquestein porque me gustan las caratulas de "CartelesPeliculas".
Todos los creditos van para sus creadores.

Espero que a alguien le resulte util.
Un saludo

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

Hello,

I've done a little merge of these 2 scripts with the permission of their Authors. All credits to them.


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, juliojs, Albher, Arturo, jacqlittle
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=2.82
Requires=4.1.2
Comments=adaptation for compatibility with 4.2 version. Added Extras capture. Changed Charset ISO-> utf8
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
RequiresMovies=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
ActorsInALine=0|0|1=Actores separados por comas|0=Actores en lineas independientes
Force350=0|0|1=force the behavior of 3.5.0 version|0=Version auto
DontWantExtras=1|1|1=No se recopilan extras|0=Se recopilan extras: enlaces, imágenes
GroupImages=1|1|1=Agrupa todas las imagenes en una misnma categoría 'Imagenes'|0=Divide las imágenes por categorias

[Parameters]
ExtraCriticsLimit=5|99|Límite de criticas en Extras
ExtraImagesLimit=5|99|Límite de imágenes en Extras
ExtraTrailersLimit=5|99|Límite de Trailers en Extras

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

program FilmAffinity;
const
   BaseURL = 'http://www.filmaffinity.com';

//uses
//   StringUtils1;
var
   MovieName: string;
   MovieURL: string;


//------------------------------------------------------------------------------------

function LineDecode(S: string):string;
begin
   S:= UTF8Decode(S);
   HTMLDecode(S);

   Result := S;
end;

//------------------------------------------------------------------------------------

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;

//------------------------------------------------------------------------------------

//
//  ConvertAlphaNum: Quita todo menos letras (mayusculas y minusculas) y numeros
//

Function ConvertAlphaNum(s: string) : string;
var
  i: Integer;
  s2, ch: string;
begin
  s2 := '';
  For i := 1 To Length(s) do
    begin
      ch := copy(s, i, 1);
      if ((ch >= 'a') and (ch <= 'z')) or ((ch >= '0') and (ch <= '9')) or ((ch >= 'A') and (ch <= 'Z'))  then
      s2 := s2 + ch;
    end;
  result := s2;
end;

//--------------------------------------

function TextBetween(S: string; StartTag: string; EndTag: string): string;
var
   ini, fin, lenS: Integer;
begin
   Result := '';
   lenS := Length(S);
   ini := Pos(StartTag, S);
   if ini <> 0 then
   begin
      ini := ini + Length(StartTag);
      S:= Copy(S,ini,lenS-ini+1);
      ini:=1;
      fin := Pos(EndTag, S);
      if (fin <> 0) and (fin > ini) then
          Result := Copy(S, ini, fin - ini);
   end;
end;

//------------------------------------------------------------------------------------

function TextAfter(S: string; StartTag: string): string;
var
  ini: Integer;
begin
  ini := Pos(StartTag, S);
  if ini <> 0 then
     Result := Copy(S, ini + Length(StartTag), Length(S)-ini+1)
  else
     Result := '';
end;

//------------------------------------------------------------------------------------


function DeleteTags(S: string): string;
var
   n, len, tag: Integer;
   c, p: char;
begin

   len    := Length(S);
   tag    := 0;
   p      := ' ';
   Result := '';
   for n := 1 to len do
   begin
      c := Copy(S,n,1);

      // Eliminamos los tabuladores
      if c = #9 then c := ' ';

      // Los espacios redundantes no se procesan
      if (c <> ' ') or (p <> ' ') then
      begin
         // Eliminamos los tags de HTML
         if tag = 0 then
         begin
            if c <> '<' then
            begin
               Result := Result + c;
               p := c;
            end
            else tag := 1;
         end
         else if c = '>' then tag := 0;
      end;
   end
   if p = ' ' then Result := Copy(Result, 1, Length(Result) - 1);
end;

//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------

// FUNCIONES DE CARTELESPELICULAS

//
// Función que suprime los acentos
//

function Sinacento(Conacento : String): String;

var
  Acento, Noacento : String;
  i : integer;
begin
  Acento := 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿ';
  Noacento := 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuy';
 for i := 1  to Length(Acento) do
    Conacento := StringReplace(Conacento,copy(Acento, i, 1),copy(Noacento, i, 1));
  result := Conacento;
end;

//
// Función para convertir a ascii
//

function Caracter(str1: string) : string;
begin
  str1 := StringReplace(str1, 'á' , 'á');
  str1 := StringReplace(str1, 'é' , 'é');
  str1 := StringReplace(str1, 'í' , 'í');
  str1 := StringReplace(Str1, 'ó' , 'ó');
  str1 := StringReplace(str1, 'ú' , 'ú');
  str1 := StringReplace(str1, 'ñ' , 'ñ');
  str1 := StringReplace(str1, 'É' , 'É');
  str1 := StringReplace(str1, 'Ã?' , 'Í');
  str1 := StringReplace(str1, 'Ó' , 'Ó');
  str1 := StringReplace(str1, 'Ú' , 'Ú');
  str1 := StringReplace(str1, 'Ñ' , 'Ñ');
  str1 := StringReplace(str1, 'Â'  ,  '');
  str1 := StringReplace(str1, 'â' , 'â');
  str1 := StringReplace(str1, 'ê' , 'ê');
  str1 := StringReplace(str1, 'î' , 'î');
  str1 := StringReplace(str1, 'ô' , 'ô');
  str1 := StringReplace(str1, 'û' , 'û');
  str1 := StringReplace(str1, 'è' , 'è');
  str1 := StringReplace(str1, 'ì' , 'ì');
  str1 := StringReplace(str1, 'ò' , 'ò');
  str1 := StringReplace(str1, 'ù' , 'ù');
  str1 := StringReplace(str1, 'ä' , 'ä');
  str1 := StringReplace(str1, 'ë' , 'ë');
  str1 := StringReplace(str1, 'ï' , 'ï');
  str1 := StringReplace(str1, 'ö' , 'ö');
  str1 := StringReplace(str1, 'ü' , 'ü');
  str1 := StringReplace(str1, 'Ã￾' , 'Á');
  str1 := StringReplace(str1, 'Ã' ,  'à');
  str1 := StringReplace(str1, '¥' ,  'å');
  str1 := StringReplace(str1 , '“' , '"'  );
  str1 := StringReplace(str1 , '”' , '"'  );
  str1 := StringReplace(str1 , '’' , '''' );
  str1 := StringReplace(str1 , '‘' , '''' );
  str1 := StringReplace(str1 , '&'   , '&'  );
  str1 := StringReplace(str1 , '–' , '-'  );
  str1 := StringReplace(str1 , '&'  , '&'  );
  str1 := StringReplace(str1 , '″' , '"'  );
  str1 := StringReplace(str1 , '…' , '...');
  str1 := StringReplace(str1 , ' ' , '');
//  Str1 := Sinacento (Str1);
  result := str1;

end;


//
// Funcion que borra signos y quita acentos
//

function PreparaTitulo(T: string): string;

var
  i: Integer;

begin
  HTMLDecode(result);
  result := AnsiLowerCase(T);
  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, 'á', 'a');
  result := StringReplace(result, 'Á', 'a');
  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, '–', '-'  );
  result := StringReplace(result, '…', '...');
  result := Caracter (result);
end;


// PROCEDIMIENTOS DE CARTELES PELICULAS

//
// Crea la lista de las peliculas que contengan el titulo introducido
//

procedure PaginasCartelesPeliculas (Titulo: string);

var

  CPPage : TStringList;
  Line, PageWeb, TitleWeb, Encontrado, SwFin, TitleWebSin, Any, PageWebList : string;
  LineNr, ContPagina, i, j,  PosAny : Integer;

begin
    Encontrado := '0';  // Si encontrado = '0' es que no se encuentra la pelicula
    PickTreeClear;
    //PickTreeAdd('Resultados de la búsqueda para "' + Titulo + '" (www.CartelesPeliculas.com):', '');
    Titulo := UrlEncode (Titulo);
    PageWeb := 'http://www.cartelespeliculas.com/wp/?s=' + titulo;        // Se crea la URL para ver todas las peliculas que contengan el texto introducido
    CPPage := TStringList.Create;
    CPPage.Text := GetPage(PageWeb);
    CPPage.Text := Caracter (CPPage.Text);
    LineNr := 1;
    SwFin := '0';
    ContPagina := 1;
    Repeat                                                               // Para cada pelicula que contenga el texto mira a ver si coincide con el titulo
        If FindLine ('bookmark' , CPPage , LineNr) > 0 then              // Puede haber coincidencias con otros campos de la web (Sinopsis, ...)
          begin
            LineNr := FindLine('bookmark', CPPage, LineNr);
            Line  := CPPage.GetString(LineNr);
            TitleWeb := TextBetween (Line, 'bookmark">' , '<');          // Estrae el titulo
            LineNr := LineNr + 1;
            TitleWebSin := Sinacento(Titleweb);
            Titulo := UrlDecode (Titulo);
            TitleWebSin  := PreparaTitulo(TitleWebSin);
            PageWebList := TextBetween (Line, '<a href="' , '" rel="');    // Extrae la direccion Web
            if Pos(AnsiLowerCase(Titulo), TitleWebSin) > 0 then                           // Verifica si el titulo de la web coincide con el texto
              begin
                LineNr := FindLine('quick-read-more', CPPage, LineNr);
                Line  := CPPage.GetString(LineNr);
                Delete (Line, 1, 4);
                For i := 1 to 5 do                                         // Extrae el año para mostrar en la PickList
                  begin
                    PosAny := Pos(',' , Line);
                    Any := Copy (Line, PosAny - 4 , 4);
                    If (Any > '0000') and (Any < '9999') then
                      begin
                        Any:= ' (' + Any + ')';
                        break
                      end
                    else
                      begin
                        Any := '';
                        Delete (Line , PosAny, 1);
                        end;
                  end;

                PickTreeAdd(TitleWeb + Any, PageWebList);                   // Añade el titulo, año y direccion Web
                Encontrado := '1';
              end
            else                                                            //si no coincide el titulo miramos el primer AKAS
                begin
                    LineNr := LineNr - 1;
                    LineNr := FindLine('akas', CPPage, LineNr);
                    Line  := CPPage.GetString(LineNr);
                    TitleWeb := TextBetween (Line, 'alt="akas: ' , ',');          // Estrae el titulo
                    LineNr := LineNr + 1;
                    TitleWebSin := Sinacento(Titleweb);
                    Titulo := UrlDecode (Titulo);
                    TitleWebSin  := PreparaTitulo(TitleWebSin);
                    PageWebList := TextBetween (Line, '<a href="' , '" rel="');    // Extrae la direccion Web
                    if Pos(AnsiLowerCase(Titulo), TitleWebSin) > 0 then                           // Verifica si el titulo de la web coincide con el texto
                        begin
                            LineNr := FindLine('quick-read-more', CPPage, LineNr);
                            Line  := CPPage.GetString(LineNr);
                            Delete (Line, 1, 4);
                            For i := 1 to 8 do                                         // Extrae el año para mostrar en la PickList
                              begin
                                PosAny := Pos(',' , Line);
                                Any := Copy (Line, PosAny - 4 , 4);
                                If (Any > '0000') and (Any < '9999') then
                                  begin
                                    Any:= ' (' + Any + ')';
                                    break
                                  end
                                else
                                  begin
                                    Any := '';
                                    Delete (Line , PosAny, 1);
                                  end;
                              end;


                        PickTreeAdd(TitleWeb + Any, PageWebList);                   // Añade el titulo, año y direccion Web
                        Encontrado := '1';
                        end
                    else
                        begin
                            SwFin:= '1';
                        end
                end
        end
        else
          begin
            If FindLine ('Entradas Anteriores' , CPpage, LineNr) > 0 then    // Si 'Entradas Anteriores' es que hay mas paginas con coincidencia
              begin
                ContPagina := ContPagina + 1;
                Titulo := UrlEncode (Titulo);
                PageWeb := 'http://www.cartelespeliculas.com/wp/page/' + (inttostr(ContPagina)) + '/?s=' + titulo;
                CPPage := TStringList.Create;                                // Lee las paginas con coincidencia
                CPPage.Text := GetPage(PageWeb);
                CPPage.Text := Caracter (CPPage.Text);
                LineNr := 1;
              end
            else
              begin
                SwFin := '1';
              end;
          end;

     until (SwFin = '1');

    if (Encontrado = '1') then
      begin

        PickTreeSort;

        if PickTreeExec(pageweb) then                                    // Selecciona que nos interese y va a buscar la caratula
          begin
            AnalyzeCoverPage (PageWeb); // Muestra los carteles seleccionados
          end
      end
   else
     ShowMessage('Titulo ' + Titulo + ' no encontrado en CartelesPeliculas');

end;

//
// Caratula.
//
//Accede a la web para extraer la caratula, Primero va a una web intermedia y despues accede a la caratula
//

procedure AnalyzeCoverPage(PageWeb: string);

var
   Page: TStringList;
   LineNr : Integer;
   Line : string;

begin
   Page := TStringList.Create;                                        // Accede a la Web donde están todas las caratulas y los datos de la pelicula
   Page.Text := GetPage(PageWeb);
   RemovePicture;
   LineNr := 1;
   If FindLine ('/pgrande3' , Page , LineNr) > 0 then
     begin
       LineNr := FindLine('/pgrande3', Page, LineNr);
       Line  := Page.GetString(LineNr);
       PageWeb := TextBetween (Line, '<a href="' , '" target');    // Forma la Web con la primera caratula que encuentra que suele ser la española
     //PageWeb := 'http://www.cartelespeliculas.com/' + PageWeb;
       PageWeb := StringReplace(pageWeb , 'amp;'   , '&'  );
       Page.Free
       Page := TStringList.Create;                                         // Accede a la Web intermedia
       Page.Text := GetPage(PageWeb);
       LineNr := 1;
       LineNr := FindLine('galeria/albums/', Page, LineNr);
       If FindLine ('galeria/albums/' , Page , LineNr) > 0 then
         begin
           Line  := Page.GetString(LineNr);
           PageWeb := TextBetween (Line, 'id="imagen" src="' , '" width'); // Forma la Web donde esta la caratula
           PageWeb := 'http://www.cartelespeliculas.com/' + PageWeb;
           Getpicture (PageWeb);                                           // Envía la caratula al programa.
         end
       else
         ShowMessage('Titulo no encontrado en CartelesPeliculas')
     end
   else
     ShowMessage('Titulo no encontrado en CartelesPeliculas');
end;

//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------

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

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

   // Get how much search results have been found

   // No encuentra las palabras "Resultados por título"¿?, busco la
   // linea anterior, y cojo la siguiente linea, le quito los espacios
   // y me quedo con el numerode peliculas.

   LineNr := FindLine('<div class="sub-header-search">', Page, 0);
   if LineNr <> -1 then
   begin
      LineNr := LineNr + 1;
      Line   := Page.GetString(LineNr);
      Line:= DeleteTags(Line);
      Line:= ConvertAlphaNum(Line);
      Count := StrToInt(Line,0);
   end;

   // Add the results to the PickTree
   if Count = 0 then
      ShowMessage('No se ha encontrado ningún registro')
   else
   begin
      LineNr := 0;
      while true do
      begin
         LineNr := FindLine('<div class="mc-title"><a href="', Page, LineNr + 1);
         if LineNr = -1 then
         begin
            LineNr := FindLine('siguientes >>', Page, 0);
            if LineNr = -1 then
               break;
            Line      := Page.GetString(LineNr);
            Page.Text := GetPage('http://www.filmaffinity.com/es/search.php' + TextBetween(Line, '<a href="search.php', '"><div class="'));
            LineNr    := 0;
            continue;
         end;

         Line         := Page.GetString(LineNr);
         MovieAddress := TextBetween(Line, '<div class="mc-title"><a href="', '.html">') + '.html';

         MovieTitle:= TextBetween(Line, '.html">', '<img src="');
         MovieTitle:= DeleteTags(MovieTitle);
         MovieTitle:= LineDecode(MovieTitle);

         if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
            PickTreeAdd(MovieTitle, BaseURL + MovieAddress);
      end;

      if ((Count = 1) and (GetOption('DontAsk') = 1)) then
         AnalyzeMoviePage(BaseURL + MovieAddress)
      else
      begin

//
//         PickTreeSort;      // Si se quiere clasificar por orden alfabetico hay que activar el PickTreeSort, quitar las 2
//                            // las 2 barras "//" que hay a la izquierda la instrucción PickTreeSort y ya esta.
//
         PickTreeExec(Address);
         AnalyzeMoviePage(Address);

    		 Title := GetField(fieldTranslatedTitle);
    		 if Title = '' then
            Title := GetField(fieldOriginalTitle);
 			      Title := PreparaTitulo(Title);
    		 if Input('Importar de CartelesPeliculas', 'Por favor, introduce el titulo:', Title) then
           			PaginasCartelesPeliculas(Title);
      end
   end;
   Page.Free;
end;

//------------------------------------------------------------------------------------

procedure AnalyzeMoviePage(Address: string);
var
   Page: TStringList;
   LineNr, LineInc: Integer;
   Line: string;
   Item: string;
   Comments: string;
   CharStar: string;


begin
   Comments := '';

   // URL
   SetField(fieldURL, Address);

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

   // Translated Title
   LineNr := FindLine('<h1 id="main-title">', Page, 0);
   Line := Page.GetString(LineNr);
   Item := DeleteTags(TextBetween(Line, '<h1 id="main-title">', '</h1>'));
   Item:= LineDecode(Item);
   SetField(fieldTranslatedTitle, Item);

   // Picture
   LineNr := FindLine('http://pics.filmaffinity.com/', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr);
      Item := TextBetween(Line, '<a class="lightbox" href="', '" title="');
      if Length(Item) = 0 then
         Item := TextBetween(Line, '" src="', '"></a>');
      GetPicture(Item);
   end;

   // Rating
   LineNr := FindLine('<div id="movie-rat-avg" itemprop="ratingValue">', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(Line);
      Item:= LineDecode(Item);
      SetField(fieldRating, StringReplace(Item, ',', '.'));
   end;

   // Original Title
   LineNr := FindLine(UTF8Encode('<dt>Título original</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
	  
      // Eliminar aka
      if Pos('>aka <',Line) <> 0 then Line:= StringReplace(Line,'>aka <','');

      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
      Item:= LineDecode(Item);
      if Length(Item) = 0 then
      begin
        Line := Page.GetString(LineNr + 2);
		
		    // Eliminar aka
		    if Pos('>aka <',Line) <> 0 then Line:= StringReplace(Line,'>aka <','');
		
        Item := DeleteTags(Line);
        Item := LineDecode(Item);
      end;
      SetField(fieldOriginalTitle, Item);
   end;

   // Year

   LineNr := FindLine(UTF8Encode('<dt>Año</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
      Item:= LineDecode(Item);

      SetField(fieldYear, Item);
   end;

   // Length
   LineNr := FindLine(UTF8Encode('<dt>Duración</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', 'min.</dd>'));
      Item:= LineDecode(Item);

      SetField(fieldLength, Item);
   end;

   // Country
   LineNr := FindLine(UTF8Encode('<dt>País</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, 'title="', '"></span'));

      Item:= LineDecode(Item);
      SetField(fieldCountry, Item);
   end;

   // Director
   LineNr := FindLine(UTF8Encode('<dt>Director</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));

      Item:= LineDecode(Item);
      SetField(fieldDirector, Item);
   end;

   // Script writer
   LineNr := FindLine(UTF8Encode('<dt>Guión</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');

      Item:= LineDecode(Item);
      if ((CheckVersion(4,2,0) = true) and (GetOption('Force350') = 0)) then SetField(fieldWriter, Item)
      else   Comments := Comments + 'Guión: ' + Item + #13#10 + #13#10;
   end;

   // Composer

   LineNr := FindLine(UTF8Encode('Música'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');

      Item:= LineDecode(Item);
      if ((CheckVersion(4,2,0) = true) and (GetOption('Force350') = 0)) then SetField(fieldComposer, Item)
      else Comments := Comments + 'Música: ' + Item + #13#10 + #13#10;
   end;

   // Photography
   LineNr := FindLine(UTF8Encode('<dt>Fotografía</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');

      Item:= LineDecode(Item);
      Comments := Comments + 'Fotografía: ' + Item + #13#10 + #13#10;
   end;

   // Actors
   LineNr := FindLine(UTF8Encode('<dt>Reparto</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      if Length(TextBetween(Line, '<dd>', '</dd>')) = 0 then
         Item := DeleteTags(Line)
      else
          Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
          if GetOption('ActorsInALine') = 0 then
            Item := StringReplace(Item, ', ', #13#10);

      Item:= LineDecode(Item);
      SetField(fieldActors, Item);
   end;

   // Productor
   LineNr := FindLine(UTF8Encode('<dt>Productora</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));

      Item:= LineDecode(Item);
      SetField(fieldProducer, Item);
   end;

   // Category
   LineNr := FindLine(UTF8Encode('<dt>Género</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 2);
      Item := DeleteTags(Line);
      Item:= LineDecode(Item);
      Item := StringReplace(Item, ' | ', ', ');
      Item := StringReplace(Item, '. ', ', ');

      SetField(fieldCategory, Item);
   end;

   // Official Webpage
   LineNr := FindLine(UTF8Encode('<dt>Web oficial</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, ' href="', '">'));
      Item:= LineDecode(Item);

      Comments := Comments + 'Web oficial: ' + Item + #13#10 + #13#10;
   end;

   // Synopsis
   LineNr := FindLine(UTF8Encode('<dt>Sinopsis</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(Line);

      Item:= LineDecode(Item);
      SetField(fieldDescription, Item);
   end;

   // Awards
   LineNr := FindLine(UTF8Encode('<dt>Premios</dt>'), Page, LineNr);
   if LineNr <> -1 then
   begin
      LineNr   := LineNr + 1;
      Line     := Page.GetString(LineNr);
      Comments := Comments + 'Premios: ' + #13#10;
      while Pos ('</dd>', Line) = 0 do
      begin
         if Pos ('<span id="show-all-awards">', Line) = 0 then
         begin
            Item := DeleteTags(Line);
            Item:= LineDecode(Item);

            if (Length(Item) <> 0) then
            begin
               Comments := Comments + '  - ' + Item + #13#10;
            end;
         end;
         LineNr := LineNr + 1;
         Line   := Page.GetString(LineNr);
      end;
      Comments := Comments + #13#10;
   end;

   // Critic
   LineNr := FindLine(UTF8Encode('<dt>Críticas</dt>'), Page, LineNr);

   if LineNr <> -1 then
   begin
      // El unico objeto de esta linea es poder presentar en el foro el listado
      // del script sin que se produzca la conversión del caracter estrella

      CharStar       := '&'+'#9733;' ;

      Comments := Comments + 'Críticas: ' + #13#10 + #13#10;
      LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
      while LineNr <> -1 do
      begin
         LineNr := LineNr + 1;
         Line := Page.GetString(LineNr);

         if Pos (UTF8Encode('<a title="Leer crítica completa" href='), Line) <> 0 then
         begin
            LineNr := LineNr + 1;
            Line := Page.GetString(LineNr);

         end;
         Line:= StringReplace(Line, CharStar, '*');
         Item := DeleteTags(Line);
         Item:= LineDecode(Item);
         if (Length(Item) <> 0) then
         begin
            Comments := Comments + Item + #13#10;
            LineNr := FindLine('<div class="pro-crit-med">', Page, LineNr + 1);
            Line := Page.GetString(LineNr);
            Item := DeleteTags(Line);
            Item:= LineDecode(Item);
            if (Length(Item) <> 0) then
            begin
               Comments := Comments + Item + #13#10;
            end;
            Comments := Comments + '________________________________________' + #13#10 + #13#10;
         end;
         LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);

      end;
   end;

   HTMLDecode(Comments);
   SetField(fieldComments, Comments);
   if GetOption('DontWantExtras') = 0 then
      AnalyzeExtras(Page,Address);
end;

//------------------------------------------------------------------------------------

// Extras
procedure AnalyzeExtras(Page: TStringList; Address: string);
var
   LineNr,NumImages,NumTrailers, i,CountC: Integer;
   Line: string;
   TrailersAddress: string;
   ImagesAddress: string;
   ImageTitle: string;
   ExtraIndex: Integer;
   ExtraString: string;
   ExtraURL: string;
   ExtraTagBase: string;
   LimitImages,LimitTrailers,LimitCritics: Integer;

begin
   ExtraTagBase :=  'FA'+TextBetween(Address, '/film', '.html');
   ClearExtrasOfScript;
   LimitImages := StrtoInt (GetParam('ExtraImagesLimit'),0);
   if LimitImages < 0 then LimitImages := 0;
   LimitTrailers := StrtoInt (GetParam('ExtraTrailersLimit'),0);
   if LimitTrailers < 0 then LimitTrailers := 0;
   LimitCritics := StrtoInt (GetParam('ExtraCriticsLimit'),0);
   if LimitCritics < 0 then LimitCritics := 0;



// Enlaces a Criticas
   LineNr := FindLine(UTF8Encode('<dt>Críticas</dt>'), Page, LineNr);
   CountC := 0;
   if LineNr <> -1 then
   begin
      LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
      while LineNr <> -1 do
      begin
         LineNr := LineNr + 1;
         Line := Page.GetString(LineNr);
         if Pos (UTF8Encode('<a title="Leer crítica completa" href='), Line) <> 0 then
         begin
            Line := Page.GetString(LineNr);
            ExtraURL:= TextBetween(Line, 'href="', '" ');
            if (Length(ExtraURL))>0 then
            begin
                 ExtraIndex := AddExtra();
                 SetExtraField(ExtraIndex, extraFieldURL, ExtraURL);
                 SetExtraField(ExtraIndex, extraFieldCategory, 'Críticas');
                 SetExtraField(ExtraIndex, extraFieldTitle, TextBetween(ExtraURL, '//', '/'));
                 SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'C'+IntToStr(ExtraIndex));
            end;
            LineNr := LineNr + 1;
            Line := Page.GetString(LineNr);
         end;
         LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
         CountC := CountC+1;
         if CountC = LimitCritics then
             break;
      end;
   end;

   // Imágenes  y Trailers
   NumTrailers := 0;
   NumImages := 0;

   LineNr := FindLine(UTF8Encode('>Trailers <em>'), Page, 0);
   if LineNr <> -1 then
   begin
       Line := Page.GetString(LineNr);
       NumTrailers := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
       TrailersAddress :=  'http://www.filmaffinity.com'+TextBetween(Line, 'href="', '"');
   end

   LineNr := FindLine(UTF8Encode('>Imágenes <em>'), Page, LineNr+1);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr);
      NumImages := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
      ImagesAddress :=  'http://www.filmaffinity.com'+TextBetween(Line, 'href="', '"');
   end

   // Imágenes


   If NumImages > LimitImages then NumImages := LimitImages;
   if NumImages >0 then
   begin
      Page.Text := GetPage(ImagesAddress);
      LineNr := FindLine(UTF8Encode('<span>Posters</span>'), Page,0);
      if LineNr = -1 then
         LineNr := FindLine(UTF8Encode('<span>Movie Posters</span>'), Page,0);
      if LineNr =-1 then
         LineNr := FindLine(UTF8Encode('<span>Fotogramas</span>'), Page,0);
      if LineNr =-1 then
         LineNr := FindLine(UTF8Encode('span>Otros</span>'), Page,0);
      if LineNr <> -1 then
      begin
         Line := Page.GetString(LineNr);
         for i := 1 to NumImages do
         begin
             LineNr := FindLine('<a href="', Page, LineNr + 1);
             if LineNr <> -1 then
             begin
                Line := Page.GetString(LineNr);
                ExtraString := TextBetween(Line, 'href="', '"');
                ImageTitle := TextBetween(Line, 'Tipo: </strong>', '</div>');
                ExtraIndex := AddExtra();
                if GetOption('GroupImages') = 1 then
                begin
                   SetExtraField(ExtraIndex, extraFieldCategory, 'Imágenes');
                   SetExtraField(ExtraIndex, extraFieldTitle, ImageTitle);
                end
                else
                   begin
                      SetExtraField(ExtraIndex, extraFieldCategory, ImageTitle);
                      SetExtraField(ExtraIndex, extraFieldTitle, 'Imágenes')
                end;


                SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'I'+IntToStr(ExtraIndex));
                GetExtraPicture(ExtraIndex, ExtraString);
             end;
         end;
      end;
   end;

   If NumTrailers > LimitTrailers then NumTrailers := LimitTrailers;
   if NumTrailers > 0 then
   begin
      Page.Text := GetPage(TrailersAddress);
      LineNr := FindLine(UTF8Encode('>Mostrar video<'),Page,0);
      if LineNr <> -1 then
      begin
         Line := Page.GetString(LineNr);
         for i:= 1 to NumTrailers do
         begin
            LineNr := FindLine('src="', Page,LineNr + 1);
            if LineNr <> -1 then
            begin
               Line := Page.GetString(LineNr);
               ExtraString := TextBetween(Line, 'src="', '"');
               ExtraURL := TextAfter(ExtraString, '//');
               ExtraIndex := AddExtra();
               SetExtraField(ExtraIndex, extraFieldURL, ExtraURL);
               SetExtraField(ExtraIndex, extraFieldCategory, 'Trailers');
               SetExtraField(ExtraIndex, extraFieldTitle, TextBetween(ExtraString, '//', '/'))
               SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'T'+IntToStr(ExtraIndex));
               LineNr := FindLine(UTF8Encode('Mostrar video'), Page,LineNr + 1);
            end;
         end;
      end;
  end;
end;


//------------------------------------------------------------------------------------

begin
   if (CheckVersion(4,1,2) = false) then
   begin
      ShowMessage('Se requiere Ant Movie Catalog versión 4.1.2 o superior');
      exit;
   end;

   if (CheckVersion(4,2,0) = false) then
      SetOption('DontWantExtras', 1);

   MovieName := GetField(fieldOriginalTitle);
   if Length(MovieName) = 0 then
      MovieName := GetField(fieldTranslatedTitle);

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

   MovieName := UTF8Encode(MovieName);

   if Pos('filmaffinity.com', MovieName) > 0 then
      AnalyzeMoviePage(MovieName)
   else
      AnalyzePage(BaseURL +'/es/search.php?stext=' + UrlEncode(MovieName) + '&stype=Title');
end.
Last edited by carlosmg2 on 2015-02-10 15:57:53, edited 6 times in total.
raulsara
Posts: 54
Joined: 2006-02-13 14:05:04

Post by raulsara »

Hola Carlos, yo acostumbro a trabajar con filmaffinity pero el problema es que las carátulas son originales. Como no funcionaba ningún script de caratulas, el año pasado hice algunos scripts como cartelespeliculas, cartelesmix, caratulas de cine, covercaratulas......

Quizas covercaratulas es la web con diferencia donde hay mas pelis pero la calidad de carteslespeliculas es mayor.

Si vieras cualquier cosa en cartelespeliculas me lo dices para modificarlo.

Es una buena idea juntar los scripts, has hecho un buen trabajo.
Gracias por tu colaboración.

Posdata. Acabo de enviarle a antp el último cambio que ha hecho Arturo en el script de filmaffinity. Lo digo para que cuando lo publique puedas modificar tu script con los últimos cambios.
carlosmg2
Posts: 39
Joined: 2009-08-18 19:21:08
Contact:

Post by carlosmg2 »

i've updated the script to the 2.82 from Filmafinnity
carlosmg2
Posts: 39
Joined: 2009-08-18 19:21:08
Contact:

Post by carlosmg2 »

updated the script on first post to fix the cartelespeliculas part after web change

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

actualizado el script del primer post para arreglar la parte de cartelespeliculas tras el cambio en la web
girodino
Posts: 1
Joined: 2015-05-23 11:00:07
Location: Asturias, Spain

Post by girodino »

Una propuesta:

Sería posible descargar la carátula de la película en español.

Mirando el código de la página de Filmafinity, se ve en alguna películas diferentes carátulas para la misma película en diferentes idiomas.

El script descarga la primera que encuentra en inglés y tengo el catálogo que parece que solo tengo películas en inglés, la otra opción es cambiar las carátulas a mano o aprender a programar los script, pero loro viejo no aprende a hablar.

Gracias.
Post Reply