FilmAffinity (ES): New version of the script

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.
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

Probado el nuevo script y funciona correctamente...

Saludos.

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

Tested the new script and work properly...

Greetings.
AARON8888
Posts: 15
Joined: 2013-04-19 18:50:56
Location: South of Spain

Post by AARON8888 »

Hola antp

Ya lo he comprobado, y confirmo por mi parte que el script funciona adecuadamente.

Muchas gracias.
----------------------
Hi antp
I have just checked it, and I confirm from my side this script runs propertly.

Thanks very much.
magol
Posts: 26
Joined: 2010-03-05 11:28:38

Post by magol »

Hola a todos, hace algún tiempo que no utilizo el script, lo ha actualizado, y tengo un problema, no me captura la calificación, antes sí lo hacía. ¿Qué podrá ocurrir?

Por lo demás, perfecto.

Saludos
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

Pues tienes razón, no me había fijado en ello, pero observo que las 2 últimas películas que he importado recientemente con el script, no importa la calificación...

Saludos.

Edit: se ve que en Filmaffinity han cambiando algo en su web, observo también que en los comentarios importa en las puntuaciones el carácter "|" en vez de "*", y que si no me equivoco es el que también servía para las puntuaciones en el apdo. correspondiente, ahora lo que aparece es en vez de un asterisco "*" una estrella "★", y me parece que esos cambios son los que provocan el fallo del script...
srxela
Posts: 3
Joined: 2013-07-24 15:25:57

Post by srxela »

El script no funciona correctamente. Puede que en el propio Ant Movie Catalog sí se muestre todo bien, pero a la hora de exportar el XML de la base de datos, los templates como el de Bergware (viewtopic.php?p=36788#36788) no lo leen correctamente.


He hecho yo la prueba ahora mismo. He añadido 1 película desde el Script de FilmAffinity, he exportado el XML y lo he cargado con el template de Bergware. Chrome y Firefox no lo abren.
Luego he añadido la misma película pero con el Script de CinEOL. He exportado el XML y lo he cargado con el template de Bergware. Ahora sí lo abren Firefox y Chrome.



PD: Las películas añadidas hasta X fecha (posiblemente abril o mayo) sí se han descargado correctamente. Posiblemente FilmAffinity haya cambiado algo en su estructura en este último mes y ahora los datos ya no se descargan correctamente.
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

Desde Abril o Mayo no tanto compañero no exageres, el día 15 de este mes importé los datos de una película correctamente, posteriormente a esa fecha si es posible que en Filmaffinity hayan cambiado algo en la estructura de su web, luego el día 22 y 24 importe las 2 últimas películas, y en esas si que falló el script, aunque es un fallo leve, que editando manualmente la calificación, y sustituyendo el carácter "|" por "*" todo solucionado, aunque seguro que los compañeros que manejan el tema de programación y tal, en cuanto lo tengan nos lo comunican... ;)

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

Post by masterchipo »

Gracias es bueno saberlo. Sí, es cierto no hace mucho que dejó de funcionar, porque cambiaron o modificaron la página en Filmaffinity en cuanto a la puntuación de las películas catalogadas. De todas formas no te entiendo como se arregla manualmente el script.
Gracias
srxela
Posts: 3
Joined: 2013-07-24 15:25:57

Post by srxela »

jacqlittle wrote:Desde Abril o Mayo no tanto compañero no exageres, el día 15 de este mes importé los datos de una película correctamente, posteriormente a esa fecha si es posible que en Filmaffinity hayan cambiado algo en la estructura de su web, luego el día 22 y 24 importe las 2 últimas películas, y en esas si que falló el script, aunque es un fallo leve, que editando manualmente la calificación, y sustituyendo el carácter "|" por "*" todo solucionado, aunque seguro que los compañeros que manejan el tema de programación y tal, en cuanto lo tengan nos lo comunican... ;)

Saludos.
Bueno, dije Abril o Mayo porque es la fecha en la que añadí mis últimas a la base de datos y exactamente a partir de esas es cuando falla, pero no sé la fecha exacta, obviamente (por eso dije "posiblemente" :lol:).

Yo no tengo ni idea de programación, si no lo arreglaría yo mismo. Por ahora estoy esperando a ver si lo retocan. Si no, pues usaré el script de CinEOL.
Albher
Posts: 2
Joined: 2013-07-31 22:15:58

Post by Albher »

Teneis que editar el script y sustituir la linea 179 que es la siguiente:

LineNr := FindLine('<div id="movie-rat-avg">', Page, LineNr);

por

LineNr := FindLine('<div id="movie-rat-avg" itemprop="ratingValue">', Page, LineNr);
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

¡Bravo!

Con eso se importa la calificación correctamente, lo que sigue fallando es la importación de las críticas, que importa el caracter "|" en vez de las estrellas que hay ahora "★" en ciertas críticas, y que anteriormente eran unos asteriscos "*", pero es un gran paso adelante desde luego compañero. ;)

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

Post by masterchipo »

Gracias, y sí, es cierto, un gran paso. Pero sigue faltando las críticas. Gracias a todos los que trabajan por nosotros, los que no entendemos nada.
Arturo
Posts: 52
Joined: 2013-04-11 16:28:52

Post by Arturo »

Para volver a los asteriscos en la puntuacion puede cambiarse añadiendo la siguiente linea:
Line:= StringReplace(Line, '★', '*');
dentro de //critic despues del primer end;

OJO EN VEZ DE ★ HAY QUE PONER & # 9 7 3 3 ; PERO SIN ESPACIOS

//critic quedaria asi:

// Critic
LineNr := FindLine('<dt>Críticas</dt>', Page, LineNr);
if LineNr <> -1 then
begin
Comments := Comments + 'Críticas: ' + #13#10;
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
while LineNr <> -1 do
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
LineInc := 2;
if Pos ('<a title="Leer crítica completa" href=', Line) <> 0 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
LineInc := 3;
end;
Line:= StringReplace(Line, '★', '*');
Item := DeleteTags(Line);
if (Length(Item) <> 0) then
begin
Comments := Comments + Item + #13#10;
LineNr := LineNr + LineInc;
Line := Page.GetString(LineNr);
Item := DeleteTags(Line);
if (Length(Item) <> 0) then
begin
Comments := Comments + Item + #13#10;
end;
Comments := Comments + '----------------------------------------' + #13#10;
end;
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
end;
end;
Keruh
Posts: 1
Joined: 2013-08-03 22:04:12

Post by Keruh »

Hola a todos, me ha ayudado muchisimo este foro para solucionar problemas del script de AMC, pero algo que no he conseguido arreglar es la duración de las peliculas, me aparecen cantidades mucho mayores a las reales, tampoco me aparecen los actores. Y por ultimo, es posible importar la caratula española?
Gracias.
masterchipo
Posts: 99
Joined: 2010-02-22 23:15:05

Post by masterchipo »

La verdad traté de aplicarlo y editarlo y varias veces de intentarlo sin éxito, no pude hacerlo correctamente. Así que esperaré a que salga la corrección.
O en su defecto ¿desde donde hasta donde hay que editar tomando el script original?
Gracias
magol
Posts: 26
Joined: 2010-03-05 11:28:38

Post by magol »

Keruh wrote:Y por ultimo, es posible importar la caratula española?
Gracias.
Sería estupendo poder capturar el cartel español, FilmAffinity en carteles tiene el cartel en español (no en todas las películas).

Si no se pudiera, me podríais recomendar algún scrips de otra página de donde se pudiera capturar.

Saludos
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

Con tu permiso Arturo, he modificado el script un poco, ya que había un par de líneas diferentes al script anterior, en el que tú dejabas como estaba hace tiempo el caracter "-" para separar los comentarios, en vez de "_" que es el que había en el último script, es una chorrada pero más que nada para que todos los que ya teníamos las críticas con ese formato siga igual.

También lo he dejado con las mismas tabulaciones que habían en el código antiguo, además de incluír también el código que puso Albher para que se importasen las calificaciones, y ya funciona todo correctamente o eso creo al menos...

Os he citado al principio del script a tí y a Albher como mods del script, pues entre todos ha sido posible dejar el script funcionando de p.m., y yo también me he puesto entre los mods, pues también he puesto mi granito de arena, jeje... ;)

Pongo el código del script entero y así quien quiera que lo pruebe y si dáis el visto bueno, quizás si antp lo considera oportuno que lo suba al servidor para que se pueda actualizar automáticamente desde el script "[ UPDATE SCRIPTS ]".

Yo lo he probado con bastantes películas y me funciona perfectamente, pero bueno si alguien detecta algún problema que lo comente, aunque creo que va todo bien ya, y si va todo bien que lo suba admin antp al servidor si lo considera oportuno.

Code: Select all

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

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

[Infos]
Authors=aviloria (aviloria@yahoo.com) modded by: rodpedja (rodpedja@gmail.com), kreti (bisoft@hotmail.com), MrK, gilistico, juliojs, Albher, Arturo, jacqlittle
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=2.67
Requires=3.5.0
Comments=Updated to 2013/08/04 version of the web-page. Added an option to choose Actor list format (ActorsInALine).
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

[Parameters]

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

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

function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
   i: Integer;
begin
   Result := -1;
   if StartAt < 0 then StartAt := 0;
   for i := StartAt to List.Count-1 do
      if Pos(Pattern, List.GetString(i)) <> 0 then
      begin
         Result := i;
         Break;
      end;
end;

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

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

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

function DeleteTags(S: string): string;
var
   n, len, tag: Integer;
   c, p: char;
begin
   HTMLDecode(S);
   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;

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

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

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

   // Get how much search results have been found
   LineNr := FindLine('</strong> resultados.</div>', Page, 0);
   if LineNr <> -1 then
   begin
      Line  := Page.GetString(LineNr);
      Count := StrToInt(TextBetween(Line, '<div style="text-align:right;"><strong>', '</strong> resultados.</div>'), 0);
   end;

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

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

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

      if ((Count = 1) and (GetOption('DontAsk') = 1)) or PickTreeExec(Address) then
         AnalyzeMoviePage(Address);
   end;
   Page.Free;
end;

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

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

begin
   Comments := '';

   // URL
   SetField(fieldURL, Address);

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

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

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

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

   // Original Title
   LineNr := FindLine('<dt>Título original</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
      SetField(fieldOriginalTitle, Item);
   end;

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

   // Length
   LineNr := FindLine('<dt>Duración</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', 'min.</dd>'));
      SetField(fieldLength, Item);
   end;

   // Country
   LineNr := FindLine('<dt>País</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, 'title="', '" border'));
      SetField(fieldCountry, Item);
   end;
 
   // Director
   LineNr := FindLine('<dt>Director</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
      SetField(fieldDirector, Item);
   end;

   // Script writer
   LineNr := FindLine('<dt>Guión</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');
      Comments := Comments + 'Guión: ' + Item + #13#10 + #13#10;
   end;

   // Composer
   LineNr := FindLine('<dt>Música</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');
      Comments := Comments + 'Música: ' + Item + #13#10 + #13#10;
   end;

   // Photography
   LineNr := FindLine('<dt>Fotografía</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 1);
      Item := TextBetween(Line, '<dd>', '</dd>');
      Comments := Comments + 'Fotografía: ' + Item + #13#10 + #13#10;
   end;

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

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

   // Category
   LineNr := FindLine('<dt>Género</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Line := Page.GetString(LineNr + 2);
      Item := DeleteTags(Line);
      Item := StringReplace(Item, ' | ', ', ');
      Item := StringReplace(Item, '. ', ', ');
      SetField(fieldCategory, Item);
   end;

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

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

   // Awards
   LineNr := FindLine('<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);
            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('<dt>Críticas</dt>', Page, LineNr);
   if LineNr <> -1 then
   begin
      Comments := Comments + 'Críticas: ' + #13#10 + #13#10;
      LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
      while LineNr <> -1 do
      begin
         LineNr := LineNr + 1;
         Line := Page.GetString(LineNr);
         LineInc := 2;
         if Pos ('<a title="Leer crítica completa" href=', Line) <> 0 then
         begin
            LineNr := LineNr + 1;
            Line := Page.GetString(LineNr);
            LineInc := 3;
         end;
         Line:= StringReplace(Line, '★', '*');
         Item := DeleteTags(Line);
         if (Length(Item) <> 0) then
         begin
            Comments := Comments + Item + #13#10;
            LineNr := LineNr + LineInc;
            Line := Page.GetString(LineNr);
            Item := DeleteTags(Line);
            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);
end;

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

begin
   if (CheckVersion(3,5,0) = false) then
   begin
      ShowMessage('Se requiere Ant Movie Catalog versión 3.5 o superior');
      exit;
   end;

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

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

   if Pos('filmaffinity.com', MovieName) > 0 then
      AnalyzeMoviePage(MovieName)
   else
      AnalyzePage(BaseURL +'/es/search.php?stext=' + UrlEncode(MovieName) + '&stype=Title');
end. 

Saludos a todos. ;)


P.D.: ojo con lo que comentó Arturo unos posts atrás, que en la línea 345 del script aquí se visualiza como:

Line:= StringReplace(Line, '★', '*');

, pero en realidad el archivo contiene lo siguiente:

Image

, lo que pasa es que no sé por qué aquí en el foro se visualiza la estrellita en vez del código correcto, debe ser por la codificación del archivo de texto, que lo debemos guardar como ANSI al editarlo con el Bloc de Notas, pero se ve que la web utiliza otra codificación o algo así...


Para evitar confusiones lo subo a MEGA para el que lo quiera probar y tal...

Code: Select all

https://mega.co.nz/#!lsNSXYgA!O8IqU3yFfzBRsbB5nVpJrQREtLs98lvEaoXlZ6tdJDQ
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks for the download link, indeed the &# codes do not work well in the forum as they are replaced by the corresponding character.
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

Thanks to you that brings us that wonderful program!

Sorry if my english isn't very good...

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

¡Gracias a ti por brindarnos este programa maravilloso!

Perdón si mi inglés no es muy bueno...
magol
Posts: 26
Joined: 2010-03-05 11:28:38

Post by magol »

Probado y perfecto.
Muchas gracias.
jacqlittle
Posts: 26
Joined: 2013-04-11 07:13:02

Post by jacqlittle »

antp lo ha subido al servidor oficial, con lo que se puede descargar directamente desde: http://update.antp.be/amc/scripts/

O bien utilizar el script [ UPDATE SCRIPTS ] para actualizarlo.

Saludos.
Post Reply