Page 1 of 2

FilmAffinity

Posted: 2020-06-18 08:27:00
by carlesaran
Cuando descargo informacion para una pelicula de Filmaffinity no funciona correctamente.
Director = ,
Writer = (blanco)
Interpretes = solo el primero de la lista

Saludos

Rectifico: He vuelto a sobre-escribir el script y ahora solamente no me aparece el año.
Saludos

Re: FilmAffinity

Posted: 2020-06-19 11:36:48
by m2s
Hola, me pasa igual que ha ti, pero no se arregla sobreescribiendo el script:

Director = ,
Writer = en blanco
Intérpretes = solo el primero de la lista

¿Alguien más tiene el mismo problema?

Saludos

Re: FilmAffinity

Posted: 2020-06-23 18:29:01
by PACOIRIPO
Yo tengo exactamente el mismo problema. A ver si alguien nos ayuda y se soluciona.
Saludos.

Re: FilmAffinity

Posted: 2020-06-24 18:06:20
by JuanRa_007
Buenas.
Parece que la solución es fácil:

Code: Select all

   // 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>');
Sólo hay que modificar la línea 454

Code: Select all

LineNr := LineNr + 3;
por

Code: Select all

LineNr := LineNr + 1;
==============================================================================================

Good.
It seems that the solution is easy:

Code: Select all

    // 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>');
Just change line 454

Code: Select all

LineNr := LineNr + 3;
to

Code: Select all

LineNr := LineNr + 1;

Re: FilmAffinity

Posted: 2020-06-24 18:19:57
by PACOIRIPO
Muchas gracias, compañero. Eso sólo soluciona los campos Director y writer.
Pero sigue cogiendo sólo el primer intérprete.
Saludos.

Re: FilmAffinity

Posted: 2020-06-24 22:40:09
by masterchipo
Continúa fallando en muchos campos, actores, directores, writer, etc.
Es una lástima

Re: FilmAffinity

Posted: 2020-06-25 11:57:48
by khepper
Solo me falla el reparto, el resto sale bien

Re: FilmAffinity

Posted: 2020-06-25 12:25:49
by PACOIRIPO
A mi me falta también el reparto, pero me gustaría que la persona que diera la solución que dijera como poner los actores con una coma de separación entre uno y otro. El script que tengo actualmente, antes del problema me ponia los actores sin coma entre uno y otro y los reportes que tengo configurados me salen mal.

Gracias anticipadas para el valiente que nos saque del pozo. Saludos. :) ;)

Re: FilmAffinity

Posted: 2020-06-25 13:14:08
by masterchipo
Sigue fallando todo writer, director y reparto. También faltan otros campos que antes estaban

Re: FilmAffinity

Posted: 2020-06-25 23:17:00
by m2s
JuanRa_007 wrote: 2020-06-24 18:06:20
Sólo hay que modificar la línea 454

Code: Select all

LineNr := LineNr + 3;
por

Code: Select all

LineNr := LineNr + 1;
Corrige el error de "director" y "Writer". Ahora solo falla el reparto, que aparece el primer nombre únicamente.

Gracias por el aporte :clapping:

Re: FilmAffinity

Posted: 2020-06-26 14:49:36
by masterchipo
De todas formas hasta que no se corrijan los errores con la actualización de un nuevo script a mí igual me falla. Gracias

Re: FilmAffinity

Posted: 2020-06-26 16:15:59
by maravic
Por favor, quién sepa (no es mi caso, por desgracia) que revise el scrip, ya sería interesante que saliera una actualización con las modificaciones. Gracias

Re: FilmAffinity

Posted: 2020-06-28 19:28:15
by Ronin666
Mientras actualizan el script, he hecho algunos cambios en "Director" y "Intérpretes" que es donde falla, para que siga funcionando:

Code: Select all

   // Director
  LineNr := FindLine(UTF8Encode('class="directors">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    SetField(fieldDirector, Item);
  end;

Code: Select all

   // Actors
  LineNr := FindLine(UTF8Encode('class="card-cast">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    if GetOption('ActorsInALine') = 0 then
    Item := StringReplace(Item, ', ', #13#10);
    SetField(fieldActors, Item); 
  end;

Si preferís los actores separados por comas:

Code: Select all

   // Actors
  LineNr := FindLine(UTF8Encode('class="card-cast">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    SetField(fieldActors, Item); 
  end;

Re: FilmAffinity

Posted: 2020-06-29 12:17:42
by m2s
Ronin666 wrote: 2020-06-28 19:28:15 Mientras actualizan el script, he hecho algunos cambios en "Director" y "Intérpretes" que es donde falla, para que siga funcionando:
Funciona perfectamente. Muchas gracias!!!

Re: FilmAffinity

Posted: 2020-06-29 22:47:45
by masterchipo
Lamentablemente a pesar de haber intentado corregir este error, en la línea 489 me da error y no carga absolutamente nada, teniendo que volver al script ya defectuoso.
Hasta que el amigo @antp corrija el script para actualizar, no puedo hacer nada.
Gracias a los compañeros por intentarlo
Saludos

Re: FilmAffinity

Posted: 2020-06-30 00:00:57
by cinecampillos
Ronin666 wrote: 2020-06-28 19:28:15 Mientras actualizan el script, he hecho algunos cambios en "Director" y "Intérpretes" que es donde falla, para que siga funcionando:

Code: Select all

   // Director
  LineNr := FindLine(UTF8Encode('class="directors">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    SetField(fieldDirector, Item);
  end;

Code: Select all

   // Actors
  LineNr := FindLine(UTF8Encode('class="card-cast">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    if GetOption('ActorsInALine') = 0 then
    Item := StringReplace(Item, ', ', #13#10);
    SetField(fieldActors, Item); 
  end;

Si preferís los actores separados por comas:

Code: Select all

   // Actors
  LineNr := FindLine(UTF8Encode('class="card-cast">'), Page, LineNr);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween(Line, '<span itemprop="name">', '</div>');
    Item := LineDecode(Item);
    Item := DeleteTags(Item);
    SetField(fieldActors, Item); 
  end;
Funciona bien salvo que los intérpretes siempre me salen separados por comas... pero al menos salen: pasito a paso, jeje. Gracias.

Re: FilmAffinity

Posted: 2020-06-30 07:58:53
by m2s
masterchipo wrote: 2020-06-29 22:47:45 Lamentablemente a pesar de haber intentado corregir este error, en la línea 489 me da error y no carga absolutamente nada, teniendo que volver al script ya defectuoso.
Hasta que el amigo @antp corrija el script para actualizar, no puedo hacer nada.
Gracias a los compañeros por intentarlo
Saludos
A mí me funciona bien.
Por lo que respecta a los actores en línea o columna, es una opción que puedes modificar antes de ejecutar el script, a la derecha, donde dice "Opciones de script": das doble clic a "ActorsInALine" y cambias la opción.
Pego aquí el script completo y funcionando, por si quereis probar:

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 class="nflag" src="/imgs/countries2/');
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+'>-', MovieAddress);
end;
if ((Count = 1) and (GetOption('DontAsk') = 1)) then
AnalyzeMoviePage(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(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
Line := Page.GetString(LineNr + 1);
Item := TextBetween(Line, '<span itemprop="name">', '</div>');
Item := LineDecode(Item);
Item := DeleteTags(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
// Actors
LineNr := FindLine(UTF8Encode('class="card-cast">'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween(Line, '<span itemprop="name">', '</div>');
Item := LineDecode(Item);
Item := DeleteTags(Item);
if GetOption('ActorsInALine') = 0 then
Item := StringReplace(Item, ', ', #13#10);
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 + 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('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.

Re: FilmAffinity

Posted: 2020-06-30 20:22:29
by PACOIRIPO
Muchas gracias Ronin. Funcionando perfectamente. ;) ;) ;)

Re: FilmAffinity

Posted: 2020-07-01 16:39:05
by masterchipo
Muchas gracias amigo m2s, al fin funciona perfectamente.

Re: FilmAffinity

Posted: 2020-07-02 09:37:18
by antp
I've put the version posted by m2s here above on the server as version 3.09, for those who want to update it via "update scripts".