Script Filmaffinity 3.0.5 no funciona

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
masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Script Filmaffinity 3.0.5 no funciona

Post by masterchipo »

Ha dejado de funcionar el Script de Filmaffinity 3.0.5 de la última versión de Ant Movie Catalog. No salen ni directores, ni writers, ni críticas ni las críticas ampliadas o extras que muestra y antes salían en la barra del costado y que hace tiempo ha dejado de funcionar, no dije nada, porque lo utilizaba y contadas ocasiones, pero reconozco que es necesaria.
Por favor agradezco la ayuda para reparar este error.
Gracias
m2s
Posts: 16
Joined: 2010-02-27 17:46:48

Re: Script Filmaffinity 3.0.5 no funciona

Post by m2s »

A mi me funciona correcto, excepto la importación de las críticas.
Para solucionarlo he modificado la línea 604 de la siguiente forma:
Original: LineNr := LineNr + 1;
Modificada: LineNr := LineNr + 2;
Con esto se soluciona el problema de importación de críticas, pero todo lo demás ya funcionaba correctamente.
Roberto
Posts: 3
Joined: 2018-03-07 14:17:40

Re: Script Filmaffinity 3.0.5 no funciona

Post by Roberto »

Hola.
Ayer me pasaba lo mismo que a masterchipo.
Hoy me ha vuelto a funcionar sin problema pero ayer me ocurría exacto igual que a él..
Director. Guion. Interpretes no iba.
Hoy todo ok
masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Re: Script Filmaffinity 3.0.5 no funciona

Post by masterchipo »

m2s wrote: 2019-03-15 19:35:45 A mi me funciona correcto, excepto la importación de las críticas.
Para solucionarlo he modificado la línea 604 de la siguiente forma:
Original: LineNr := LineNr + 1;
Modificada: LineNr := LineNr + 2;
Con esto se soluciona el problema de importación de críticas, pero todo lo demás ya funcionaba correctamente.
Ha vuelto a funcionar, pero lo que no puedo modificar es eso que mencionas, el de modificar el script con las críticas.
Gracias
PD: Pude moficar y tampoco funciona, y me refiero a mostrar en la barra lateral algo que en inglés dice "display extras", en la segunda pestaña de configuración del programa donde dice película, abajo añadir, eliminar, aleatorio, cambiar número, carátula y abajo "display extras" y en la barra lateral te aparecen las críticas ampliadas que es una excelente función del programa.
Gracias
Arturo
Posts: 52
Joined: 2013-04-11 16:28:52

Re: Script Filmaffinity 3.0.5 no funciona

Post by Arturo »

Hay que hacer la misma modificación que en la linea 604 también en la línea 670.
masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Re: Script Filmaffinity 3.0.5 no funciona

Post by masterchipo »

Arturo wrote: 2019-04-06 19:14:07 Hay que hacer la misma modificación que en la linea 604 también en la línea 670.
Arturo lo he hecho ambas veces y el asunto de los extras en la barra lateral display no los muestra.
Esperaré a que modifiquen el script.
Arturo
Posts: 52
Joined: 2013-04-11 16:28:52

Re: Script Filmaffinity 3.0.5 no funciona

Post by Arturo »

Pues a mi si que me funciona. A ver si la pelicula que buscas no tiene enlaces a críticas.
De todas formas dejo aqui la version que me funciona numerada como 3.06

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, AgustinG
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=https://www.filmaffinity.com
Language=ES
Version=3.06
Requires=4.2.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=0|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
SortByYear=0|0|1=Ordena lista de busqueda por año|0=Ordena lista de busqueda por relevancia
SearchByFromToYears=0|0|0=No buscar por año|1=Buscar dentro de un período de años
SearchByTitle=1|1|0=No buscar por título|1=Buscar por título
SearchByDirector=0|0|0=No buscar por director|1=Buscar por director
SearchByCast=0|0|0=No buscar por reparto|1=Buscar por reparto
SearchByScript=0|0|0=No buscar por guión|1=Buscar por guión
SearchByPhoto=0|0|0=No buscar por fotografía|1=Buscar por fotografía
SearchByMusic=0|0|0=No buscar por música|1=Buscar por música
SearchByProducer=0|0|0=No buscar por productor|1=Buscar por productor

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

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

program FilmAffinity;
const
  BaseURL = 'https://www.filmaffinity.com';
var
  MovieName    : string;
  MovieURL     : string;
  MovieYear    : string;

  YearFrom     : string;
  YearTo       : string;

  AdvQuery     : 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;

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

function Occurrences(Subtext: string; Text: string): integer;
var
  offset: Integer;
begin
  result := 0;
  while true do
  begin
    offset := Pos(Subtext, Text);
    if offset = 0 then break;
    Result := Result + 1;
    Text := TextAfter(Text, Subtext);
  end;
end;

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

procedure AnalyzeAdvPage(Address: string);
var
  Page: TStringList;
  LineNr,LineNrax,NextPageNr,Pages: Integer;
  Line, PageNr: string;
  Count: Integer;
  MovieTitle, MovieAddress, MovieDirector: string;
  YearAnt: string;
  PagSig:String;

begin
  Count := 0;
  Page  := TStringList.Create;
  Page.Text := GetPage(Address);
  PickTreeClear;
   // Get how much search results have been found

  LineNr := FindLine('<div class="float-right"><b>', Page, 0);
  Count := StrToInt(TextBetween(Page.GetString(LineNr),'<div class="float-right"><b>','</b>' ),0);

  if LineNr <> -1 then
   // Add the results to the PickTree
  if Count = 0 then
  ShowMessage('No se ha encontrado ningún registro')
  else
  begin
    PageNr := '';
    LineNr := 0;
    while true do
    begin
      LineNr := FindLine('<div class="mc-title"><a', Page, LineNr + 1);
      if LineNr = -1 then
      begin

        LineNr := FindLine('<span class="current">', Page, 0);
        if LineNr = -1 then
        break;
        Line := Page.GetString(LineNr);

        Pages := Occurrences('<a href="advsearch.php?page=', Line);
        PageNr := TextBetween(Line, '<span class="current">', '</span>');

        if StrToInt(PageNr, 0) = Pages then
        break;

        NextPageNr := StrToInt(PageNr, 0) + 1;
        PagSig:= 'https://www.filmaffinity.com/es/advsearch.php?page=' + IntToStr(NextPageNr) + '&stext=' + TextBetween(Line, '&stext=', '">');

        PagSig:=StringReplace(PagSig,'&','&');
        Page.Text := GetPage(PagSig);

        LineNr    := 0;
        continue;

      end;

      Line         := Page.GetString(LineNr);
      MovieAddress := TextBetween(Line, 'href="', '.html"') + '.html';
      MovieTitle   := TextBetween(Line, 'title="', '"');
      MovieTitle   := DeleteTags(MovieTitle);
      MovieTitle   := LineDecode(MovieTitle);

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

      MovieYear := TextBetween(Line, '</a> (', ') <img src="/imgs/countries/');
      if MovieYear = '' Then MovieYear := YearAnt
      else YearAnt := MovieYear;

      Line:= Page.GetString(LineNr-9);

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

      LineNrax := FindLine('div class="mc-director">', Page, LineNr);
      if LineNrax <> -1 then
      begin
        Line:= Page.GetString(LineNrax+1);
        MovieDirector:= TextBetween(Line, 'title="', '"');
        MovieDirector:= DeleteTags(MovieDirector);
        MovieDirector:= LineDecode(MovieDirector);
      end;
         //------------------------------------
      if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
      PickTreeAdd(MovieTitle+'     ('+MovieYear+')'+'        -<'+MovieDirector+'>-', 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)
    end
  end;
  Page.Free;
end;

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

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr,LineNrax: Integer;
  Line: string;
  Count: Integer;
  MovieTitle, MovieAddress, MovieDirector, MovieYear: string;
  YearAnt: string;
  PagSig: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', Page, LineNr + 1);
      if LineNr = -1 then
      begin
        LineNr := FindLine('siguientes >>', Page, 0);
        if LineNr = -1 then
        break;
        Line      := Page.GetString(LineNr);

        PagSig:=  'https://www.filmaffinity.com/es/search.php' + TextBetween(Line, '<a href="search.php', '"><div class="' );
        PagSig:=StringReplace(PagSig,'&','&');
        Page.Text := GetPage(PagSig);

        LineNr    := 0;
        continue;
      end;

      Line         := Page.GetString(LineNr);
      MovieAddress := TextBetween(Line, 'href="', '.html"') + '.html';
      MovieTitle   := TextBetween(Line, 'title="', '"');
      MovieTitle   := DeleteTags(MovieTitle);
      MovieTitle   := LineDecode(MovieTitle);

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

      Line:= Page.GetString(LineNr-9);
      MovieYear := TextBetween(Line, 'ye-w">', '</div>');
      if MovieYear = '' Then MovieYear := YearAnt
      else YearAnt := MovieYear;

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

      LineNrax := FindLine('div class="mc-director">', Page, LineNr);
      if LineNrax <> -1 then
      begin
        Line:= Page.GetString(LineNrax+1);
        MovieDirector:= TextBetween(Line, 'title="', '"');
        MovieDirector:= DeleteTags(MovieDirector);
        MovieDirector:= LineDecode(MovieDirector);
      end;
         //------------------------------------
      if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
      PickTreeAdd(MovieTitle+'     ('+MovieYear+')'+'        -<'+MovieDirector+'>-', 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)
    end
  end;
  Page.Free;
end;

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

procedure AnalyzeMoviePage(Address: string);
var
  Page: TStringList;
  LineNr, LineInc: Integer;
  Line: string;
  Item: string;
  Comments: string;
  CharStar: string;
  auxItem: 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+1);
  Item   := DeleteTags(TextBetween(Line, '<span itemprop="name">', '</span>'));
  Item   := LineDecode(Item);
  SetField(fieldTranslatedTitle, Item);

   // Picture
  LineNr := FindLine('href="https://pics.filmaffinity.com/', Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    Item := TextBetween(Line, '<a class="lightbox" style="display: block;" href="', '" title="');
    if Length(Item) = 0 then
    Item := TextBetween(Line, '" src="', '"></a>');
    Item := StringReplace(Item,'https://','http://');
    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>'));
    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, 'duration">', '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('class="directors">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
    Item := TextBetween(Line,'"name">','</span>');
    while Pos (',', Line) <> 0 do
    begin
      Item := Item + ', ';
      LineNr := LineNr + 3;
      Line := Page.GetString(LineNr);
      auxItem := TextBetween(Line,'"name">','</span>');
      Item := Item + auxItem;
    end;
    Item := LineDecode(Item);
    SetField(fieldDirector, Item);
  end;

   // Script writer
  LineNr := FindLine(UTF8Encode('<dt>Guion</dt>'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(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, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(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, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    Comments := Comments + 'Fotograf&iacute;a: ' + Item + #13#10 + #13#10;
  end;

   // Actors
  LineNr := FindLine(UTF8Encode('<dt>Reparto</dt>'), Page, LineNr);
  if LineNr <> -1  then
  begin
    Item := '';
    while true do
    begin
      LineNr := FindLine('itemprop="name">', Page, LineNr);

      if LineNr = -1 then break;
      begin
        if Item <> '' Then Item := Item + ', ';
        Line := Page.GetString(LineNr);
        Item := Item + TextBetween(Line, 'name">', '</span');
        LineNr:=LineNr+1
      end
    end;
    if GetOption('ActorsInALine') = 0 then
    Item := StringReplace(Item, ', ', #13#10);
    SetField(fieldActors, LineDecode(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 + 2;
      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(TextBetween(Line, ' itemprop="author">', '<i'));
        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 + 2;
      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('>Tráilers&nbsp;<em>'), Page, 0);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    NumTrailers := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
    TrailersAddress := TextBetween(Line, 'href="', '"');
  end

  LineNr := FindLine(UTF8Encode('>Imágenes&nbsp;<em>'), Page, LineNr+1);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    NumImages := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
    ImagesAddress := 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,2,2) = false) then
  begin
    if ShowWarning('This script requires a newer version of Ant Movie Catalog, at least the version 4.2.2, currently available as beta - do you wish to open the link to download it?)') = true then
    begin
      Launch('https://forum.antp.be/phpbb3/viewtopic.php?f=6&t=6862', '');
    end;
    exit;
  end;

  MovieName     := GetField(fieldOriginalTitle);
  MovieYear     := GetField(fieldYear);

  YearFrom      := MovieYear;
  YearTo        := MovieYear;

  AdvQuery      := '/es/advsearch.php';

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

  if GetOption('DontAsk') = 0 then
  Input('FilmAffinity', 'Título: ' + GetField(fieldFilePath), MovieName);

  if Pos('filmaffinity.com', MovieName) > 0 then
  AnalyzeMoviePage(MovieName)
  else
  begin
    //MovieName := UTF8Encode(MovieName);
    AdvQuery := AdvQuery + '?stext=' + UrlEncode(MovieName);

    if GetOption('SearchByFromToYears') = 1 then
    begin
      if GetOption('DontAsk') = 0 then
      begin
        Input('FilmAffinity', 'Desde el año: ', YearFrom);
        Input('FilmAffinity', 'Hasta el año: ', YearTo);
      end;
      AdvQuery := AdvQuery + '&fromyear=' + YearFrom;
      AdvQuery := AdvQuery + '&toyear=' + YearTo;
    end;

    {
    stype[]=title         Título
    stype[]=director      Director
    stype[]=cast          Reparto
    stype[]=script        Guión
    stype[]=photo         Fotografía
    stype[]=music         Música
    stype[]=producer      Productor
    }

    if GetOption('SearchByTitle') = 1 then
    AdvQuery := AdvQuery + '&stype[]=title';

    if GetOption('SearchByDirector') = 1 then
    AdvQuery := AdvQuery + '&stype[]=director';

    if GetOption('SearchByCast') = 1 then
    AdvQuery := AdvQuery + '&stype[]=cast';

    if GetOption('SearchByScript') = 1 then
    AdvQuery := AdvQuery + '&stype[]=script';

    if GetOption('SearchByPhoto') = 1 then
    AdvQuery := AdvQuery + '&stype[]=photo';

    if GetOption('SearchByMusic') = 1 then
    AdvQuery := AdvQuery + '&stype[]=music';

    if GetOption('SearchByProducer') = 1 then
    AdvQuery := AdvQuery + '&stype[]=producer';

    if GetOption('SortByYear') = 1 then
    AdvQuery := AdvQuery + '&orderby=year';

    AnalyzeAdvPage(BaseURL + AdvQuery);
  end;
end. 


masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Re: Script Filmaffinity 3.0.5 no funciona

Post by masterchipo »

Arturo wrote: 2019-04-07 10:00:22 Pues a mi si que me funciona. A ver si la pelicula que buscas no tiene enlaces a críticas.
De todas formas dejo aqui la version que me funciona numerada como 3.06

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, AgustinG
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=https://www.filmaffinity.com
Language=ES
Version=3.06
Requires=4.2.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=0|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
SortByYear=0|0|1=Ordena lista de busqueda por año|0=Ordena lista de busqueda por relevancia
SearchByFromToYears=0|0|0=No buscar por año|1=Buscar dentro de un período de años
SearchByTitle=1|1|0=No buscar por título|1=Buscar por título
SearchByDirector=0|0|0=No buscar por director|1=Buscar por director
SearchByCast=0|0|0=No buscar por reparto|1=Buscar por reparto
SearchByScript=0|0|0=No buscar por guión|1=Buscar por guión
SearchByPhoto=0|0|0=No buscar por fotografía|1=Buscar por fotografía
SearchByMusic=0|0|0=No buscar por música|1=Buscar por música
SearchByProducer=0|0|0=No buscar por productor|1=Buscar por productor

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

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

program FilmAffinity;
const
  BaseURL = 'https://www.filmaffinity.com';
var
  MovieName    : string;
  MovieURL     : string;
  MovieYear    : string;

  YearFrom     : string;
  YearTo       : string;

  AdvQuery     : 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;

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

function Occurrences(Subtext: string; Text: string): integer;
var
  offset: Integer;
begin
  result := 0;
  while true do
  begin
    offset := Pos(Subtext, Text);
    if offset = 0 then break;
    Result := Result + 1;
    Text := TextAfter(Text, Subtext);
  end;
end;

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

procedure AnalyzeAdvPage(Address: string);
var
  Page: TStringList;
  LineNr,LineNrax,NextPageNr,Pages: Integer;
  Line, PageNr: string;
  Count: Integer;
  MovieTitle, MovieAddress, MovieDirector: string;
  YearAnt: string;
  PagSig:String;

begin
  Count := 0;
  Page  := TStringList.Create;
  Page.Text := GetPage(Address);
  PickTreeClear;
   // Get how much search results have been found

  LineNr := FindLine('<div class="float-right"><b>', Page, 0);
  Count := StrToInt(TextBetween(Page.GetString(LineNr),'<div class="float-right"><b>','</b>' ),0);

  if LineNr <> -1 then
   // Add the results to the PickTree
  if Count = 0 then
  ShowMessage('No se ha encontrado ningún registro')
  else
  begin
    PageNr := '';
    LineNr := 0;
    while true do
    begin
      LineNr := FindLine('<div class="mc-title"><a', Page, LineNr + 1);
      if LineNr = -1 then
      begin

        LineNr := FindLine('<span class="current">', Page, 0);
        if LineNr = -1 then
        break;
        Line := Page.GetString(LineNr);

        Pages := Occurrences('<a href="advsearch.php?page=', Line);
        PageNr := TextBetween(Line, '<span class="current">', '</span>');

        if StrToInt(PageNr, 0) = Pages then
        break;

        NextPageNr := StrToInt(PageNr, 0) + 1;
        PagSig:= 'https://www.filmaffinity.com/es/advsearch.php?page=' + IntToStr(NextPageNr) + '&stext=' + TextBetween(Line, '&stext=', '">');

        PagSig:=StringReplace(PagSig,'&','&');
        Page.Text := GetPage(PagSig);

        LineNr    := 0;
        continue;

      end;

      Line         := Page.GetString(LineNr);
      MovieAddress := TextBetween(Line, 'href="', '.html"') + '.html';
      MovieTitle   := TextBetween(Line, 'title="', '"');
      MovieTitle   := DeleteTags(MovieTitle);
      MovieTitle   := LineDecode(MovieTitle);

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

      MovieYear := TextBetween(Line, '</a> (', ') <img src="/imgs/countries/');
      if MovieYear = '' Then MovieYear := YearAnt
      else YearAnt := MovieYear;

      Line:= Page.GetString(LineNr-9);

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

      LineNrax := FindLine('div class="mc-director">', Page, LineNr);
      if LineNrax <> -1 then
      begin
        Line:= Page.GetString(LineNrax+1);
        MovieDirector:= TextBetween(Line, 'title="', '"');
        MovieDirector:= DeleteTags(MovieDirector);
        MovieDirector:= LineDecode(MovieDirector);
      end;
         //------------------------------------
      if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
      PickTreeAdd(MovieTitle+'     ('+MovieYear+')'+'        -<'+MovieDirector+'>-', 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)
    end
  end;
  Page.Free;
end;

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

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr,LineNrax: Integer;
  Line: string;
  Count: Integer;
  MovieTitle, MovieAddress, MovieDirector, MovieYear: string;
  YearAnt: string;
  PagSig: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', Page, LineNr + 1);
      if LineNr = -1 then
      begin
        LineNr := FindLine('siguientes >>', Page, 0);
        if LineNr = -1 then
        break;
        Line      := Page.GetString(LineNr);

        PagSig:=  'https://www.filmaffinity.com/es/search.php' + TextBetween(Line, '<a href="search.php', '"><div class="' );
        PagSig:=StringReplace(PagSig,'&','&');
        Page.Text := GetPage(PagSig);

        LineNr    := 0;
        continue;
      end;

      Line         := Page.GetString(LineNr);
      MovieAddress := TextBetween(Line, 'href="', '.html"') + '.html';
      MovieTitle   := TextBetween(Line, 'title="', '"');
      MovieTitle   := DeleteTags(MovieTitle);
      MovieTitle   := LineDecode(MovieTitle);

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

      Line:= Page.GetString(LineNr-9);
      MovieYear := TextBetween(Line, 'ye-w">', '</div>');
      if MovieYear = '' Then MovieYear := YearAnt
      else YearAnt := MovieYear;

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

      LineNrax := FindLine('div class="mc-director">', Page, LineNr);
      if LineNrax <> -1 then
      begin
        Line:= Page.GetString(LineNrax+1);
        MovieDirector:= TextBetween(Line, 'title="', '"');
        MovieDirector:= DeleteTags(MovieDirector);
        MovieDirector:= LineDecode(MovieDirector);
      end;
         //------------------------------------
      if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
      PickTreeAdd(MovieTitle+'     ('+MovieYear+')'+'        -<'+MovieDirector+'>-', 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)
    end
  end;
  Page.Free;
end;

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

procedure AnalyzeMoviePage(Address: string);
var
  Page: TStringList;
  LineNr, LineInc: Integer;
  Line: string;
  Item: string;
  Comments: string;
  CharStar: string;
  auxItem: 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+1);
  Item   := DeleteTags(TextBetween(Line, '<span itemprop="name">', '</span>'));
  Item   := LineDecode(Item);
  SetField(fieldTranslatedTitle, Item);

   // Picture
  LineNr := FindLine('href="https://pics.filmaffinity.com/', Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    Item := TextBetween(Line, '<a class="lightbox" style="display: block;" href="', '" title="');
    if Length(Item) = 0 then
    Item := TextBetween(Line, '" src="', '"></a>');
    Item := StringReplace(Item,'https://','http://');
    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>'));
    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, 'duration">', '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('class="directors">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
    Item := TextBetween(Line,'"name">','</span>');
    while Pos (',', Line) <> 0 do
    begin
      Item := Item + ', ';
      LineNr := LineNr + 3;
      Line := Page.GetString(LineNr);
      auxItem := TextBetween(Line,'"name">','</span>');
      Item := Item + auxItem;
    end;
    Item := LineDecode(Item);
    SetField(fieldDirector, Item);
  end;

   // Script writer
  LineNr := FindLine(UTF8Encode('<dt>Guion</dt>'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(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, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(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, '<span>', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    Comments := Comments + 'Fotograf&iacute;a: ' + Item + #13#10 + #13#10;
  end;

   // Actors
  LineNr := FindLine(UTF8Encode('<dt>Reparto</dt>'), Page, LineNr);
  if LineNr <> -1  then
  begin
    Item := '';
    while true do
    begin
      LineNr := FindLine('itemprop="name">', Page, LineNr);

      if LineNr = -1 then break;
      begin
        if Item <> '' Then Item := Item + ', ';
        Line := Page.GetString(LineNr);
        Item := Item + TextBetween(Line, 'name">', '</span');
        LineNr:=LineNr+1
      end
    end;
    if GetOption('ActorsInALine') = 0 then
    Item := StringReplace(Item, ', ', #13#10);
    SetField(fieldActors, LineDecode(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 + 2;
      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(TextBetween(Line, ' itemprop="author">', '<i'));
        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 + 2;
      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('>Tráilers&nbsp;<em>'), Page, 0);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    NumTrailers := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
    TrailersAddress := TextBetween(Line, 'href="', '"');
  end

  LineNr := FindLine(UTF8Encode('>Imágenes&nbsp;<em>'), Page, LineNr+1);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr);
    NumImages := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
    ImagesAddress := 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,2,2) = false) then
  begin
    if ShowWarning('This script requires a newer version of Ant Movie Catalog, at least the version 4.2.2, currently available as beta - do you wish to open the link to download it?)') = true then
    begin
      Launch('https://forum.antp.be/phpbb3/viewtopic.php?f=6&t=6862', '');
    end;
    exit;
  end;

  MovieName     := GetField(fieldOriginalTitle);
  MovieYear     := GetField(fieldYear);

  YearFrom      := MovieYear;
  YearTo        := MovieYear;

  AdvQuery      := '/es/advsearch.php';

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

  if GetOption('DontAsk') = 0 then
  Input('FilmAffinity', 'Título: ' + GetField(fieldFilePath), MovieName);

  if Pos('filmaffinity.com', MovieName) > 0 then
  AnalyzeMoviePage(MovieName)
  else
  begin
    //MovieName := UTF8Encode(MovieName);
    AdvQuery := AdvQuery + '?stext=' + UrlEncode(MovieName);

    if GetOption('SearchByFromToYears') = 1 then
    begin
      if GetOption('DontAsk') = 0 then
      begin
        Input('FilmAffinity', 'Desde el año: ', YearFrom);
        Input('FilmAffinity', 'Hasta el año: ', YearTo);
      end;
      AdvQuery := AdvQuery + '&fromyear=' + YearFrom;
      AdvQuery := AdvQuery + '&toyear=' + YearTo;
    end;

    {
    stype[]=title         Título
    stype[]=director      Director
    stype[]=cast          Reparto
    stype[]=script        Guión
    stype[]=photo         Fotografía
    stype[]=music         Música
    stype[]=producer      Productor
    }

    if GetOption('SearchByTitle') = 1 then
    AdvQuery := AdvQuery + '&stype[]=title';

    if GetOption('SearchByDirector') = 1 then
    AdvQuery := AdvQuery + '&stype[]=director';

    if GetOption('SearchByCast') = 1 then
    AdvQuery := AdvQuery + '&stype[]=cast';

    if GetOption('SearchByScript') = 1 then
    AdvQuery := AdvQuery + '&stype[]=script';

    if GetOption('SearchByPhoto') = 1 then
    AdvQuery := AdvQuery + '&stype[]=photo';

    if GetOption('SearchByMusic') = 1 then
    AdvQuery := AdvQuery + '&stype[]=music';

    if GetOption('SearchByProducer') = 1 then
    AdvQuery := AdvQuery + '&stype[]=producer';

    if GetOption('SortByYear') = 1 then
    AdvQuery := AdvQuery + '&orderby=year';

    AnalyzeAdvPage(BaseURL + AdvQuery);
  end;
end. 


claro amigo lo que yo no tengo es esa versión de script, dónde está el enlace para bajarlo directamente, ya que en eso soy de madera para copiar y pegar.
Gracias
PD Ves, amigo lo hice y no pude abrir el script, si ya no viene hecho no me funciona. Lo borré y he vuelto a descargar el sript, y en realidad las críticas si están dentro de la descripción de la película. Lo que ya no me aparece son los enlaces de la barra lateral, que en un momento sí aparecían.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Re: Script Filmaffinity 3.0.5 no funciona

Post by antp »

Arturo wrote: 2019-04-07 10:00:22 Pues a mi si que me funciona. A ver si la pelicula que buscas no tiene enlaces a críticas.
De todas formas dejo aqui la version que me funciona numerada como 3.06
Thanks, I updated it on the server
Arturo
Posts: 52
Joined: 2013-04-11 16:28:52

Re: Script Filmaffinity 3.0.5 no funciona

Post by Arturo »

masterchipo wrote: 2019-04-08 15:43:46

claro amigo lo que yo no tengo es esa versión de script, dónde está el enlace para bajarlo directamente, ya que en eso soy de madera para copiar y pegar.
Gracias
PD Ves, amigo lo hice y no pude abrir el script, si ya no viene hecho no me funciona. Lo borré y he vuelto a descargar el sript, y en realidad las críticas si están dentro de la descripción de la película. Lo que ya no me aparece son los enlaces de la barra lateral, que en un momento sí aparecían.
La versión 3.06 ya esta donde siempre: update.antp.be/amc/scripts en el apartado Downloads de la página. Y con esa versión si salen los enlaces el la ventana lateral de Extras.
masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Re: Script Filmaffinity 3.0.5 no funciona

Post by masterchipo »

Arturo wrote: 2019-04-14 15:10:07
masterchipo wrote: 2019-04-08 15:43:46

claro amigo lo que yo no tengo es esa versión de script, dónde está el enlace para bajarlo directamente, ya que en eso soy de madera para copiar y pegar.
Gracias
PD Ves, amigo lo hice y no pude abrir el script, si ya no viene hecho no me funciona. Lo borré y he vuelto a descargar el sript, y en realidad las críticas si están dentro de la descripción de la película. Lo que ya no me aparece son los enlaces de la barra lateral, que en un momento sí aparecían.
La versión 3.06 ya esta donde siempre: update.antp.be/amc/scripts en el apartado Downloads de la página. Y con esa versión si salen los enlaces el la ventana lateral de Extras.
La descargué y actualicé, y ahora todo funciona a la perfección.
Gracias @antp
magol
Posts: 26
Joined: 2010-03-05 11:28:38

Re: Script Filmaffinity 3.0.5 no funciona

Post by magol »

Hola

A mí con la versión 3.06 actualizado con UPDATE SCRIPTS no me salen los comentarios: ni fotografía, ni críticas.
No he hecho los cambios que se recomiendan para la versión 3.05 porque ya se dice que está corregido en la versión 3.06.
Qué podrá ser?

Saludos
Post Reply