Quería hacer un pequeño aporte. He unido estos 2 scripts haciendo un poco de Franquestein porque me gustan las caratulas de "CartelesPeliculas".
Todos los creditos van para sus creadores.
Espero que a alguien le resulte util.
Un saludo
----------------
Hello,
I've done a little merge of these 2 scripts with the permission of their Authors. All credits to them.
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=aviloria (aviloria@yahoo.com) modded by: rodpedja (rodpedja@gmail.com), kreti (bisoft@hotmail.com), MrK, gilistico, juliojs, Albher, Arturo, jacqlittle
Title=FilmAffinity (ES)
Description=Movie importation script for FilmAffinity Spain
Site=http://www.filmaffinity.com
Language=ES
Version=2.82
Requires=4.1.2
Comments=adaptation for compatibility with 4.2 version. Added Extras capture. Changed Charset ISO-> utf8
License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
GetInfo=1
RequiresMovies=1
[Options]
DontAsk=0|0|1=Método rápido: No te pregunta el titulo al principio, ni te pide confirmar si sólo hay un resultado|0=Método lento: Confirmas la información manualmente
ActorsInALine=0|0|1=Actores separados por comas|0=Actores en lineas independientes
Force350=0|0|1=force the behavior of 3.5.0 version|0=Version auto
DontWantExtras=1|1|1=No se recopilan extras|0=Se recopilan extras: enlaces, imágenes
GroupImages=1|1|1=Agrupa todas las imagenes en una misnma categoría 'Imagenes'|0=Divide las imágenes por categorias
[Parameters]
ExtraCriticsLimit=5|99|Límite de criticas en Extras
ExtraImagesLimit=5|99|Límite de imágenes en Extras
ExtraTrailersLimit=5|99|Límite de Trailers en Extras
***************************************************)
program FilmAffinity;
const
BaseURL = 'http://www.filmaffinity.com';
//uses
// StringUtils1;
var
MovieName: string;
MovieURL: string;
//------------------------------------------------------------------------------------
function LineDecode(S: string):string;
begin
S:= UTF8Decode(S);
HTMLDecode(S);
Result := S;
end;
//------------------------------------------------------------------------------------
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
Result := -1;
if StartAt < 0 then StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
Result := i;
Break;
end;
end;
//------------------------------------------------------------------------------------
//
// ConvertAlphaNum: Quita todo menos letras (mayusculas y minusculas) y numeros
//
Function ConvertAlphaNum(s: string) : string;
var
i: Integer;
s2, ch: string;
begin
s2 := '';
For i := 1 To Length(s) do
begin
ch := copy(s, i, 1);
if ((ch >= 'a') and (ch <= 'z')) or ((ch >= '0') and (ch <= '9')) or ((ch >= 'A') and (ch <= 'Z')) then
s2 := s2 + ch;
end;
result := s2;
end;
//--------------------------------------
function TextBetween(S: string; StartTag: string; EndTag: string): string;
var
ini, fin, lenS: Integer;
begin
Result := '';
lenS := Length(S);
ini := Pos(StartTag, S);
if ini <> 0 then
begin
ini := ini + Length(StartTag);
S:= Copy(S,ini,lenS-ini+1);
ini:=1;
fin := Pos(EndTag, S);
if (fin <> 0) and (fin > ini) then
Result := Copy(S, ini, fin - ini);
end;
end;
//------------------------------------------------------------------------------------
function TextAfter(S: string; StartTag: string): string;
var
ini: Integer;
begin
ini := Pos(StartTag, S);
if ini <> 0 then
Result := Copy(S, ini + Length(StartTag), Length(S)-ini+1)
else
Result := '';
end;
//------------------------------------------------------------------------------------
function DeleteTags(S: string): string;
var
n, len, tag: Integer;
c, p: char;
begin
len := Length(S);
tag := 0;
p := ' ';
Result := '';
for n := 1 to len do
begin
c := Copy(S,n,1);
// Eliminamos los tabuladores
if c = #9 then c := ' ';
// Los espacios redundantes no se procesan
if (c <> ' ') or (p <> ' ') then
begin
// Eliminamos los tags de HTML
if tag = 0 then
begin
if c <> '<' then
begin
Result := Result + c;
p := c;
end
else tag := 1;
end
else if c = '>' then tag := 0;
end;
end
if p = ' ' then Result := Copy(Result, 1, Length(Result) - 1);
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
// FUNCIONES DE CARTELESPELICULAS
//
// Función que suprime los acentos
//
function Sinacento(Conacento : String): String;
var
Acento, Noacento : String;
i : integer;
begin
Acento := 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿ';
Noacento := 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuy';
for i := 1 to Length(Acento) do
Conacento := StringReplace(Conacento,copy(Acento, i, 1),copy(Noacento, i, 1));
result := Conacento;
end;
//
// Función para convertir a ascii
//
function Caracter(str1: string) : string;
begin
str1 := StringReplace(str1, 'á' , 'á');
str1 := StringReplace(str1, 'é' , 'é');
str1 := StringReplace(str1, 'Ã' , 'í');
str1 := StringReplace(Str1, 'ó' , 'ó');
str1 := StringReplace(str1, 'ú' , 'ú');
str1 := StringReplace(str1, 'ñ' , 'ñ');
str1 := StringReplace(str1, 'É' , 'É');
str1 := StringReplace(str1, 'Ã?' , 'Í');
str1 := StringReplace(str1, 'Ó' , 'Ó');
str1 := StringReplace(str1, 'Ú' , 'Ú');
str1 := StringReplace(str1, 'Ñ' , 'Ñ');
str1 := StringReplace(str1, 'Â' , '');
str1 := StringReplace(str1, 'â' , 'â');
str1 := StringReplace(str1, 'ê' , 'ê');
str1 := StringReplace(str1, 'î' , 'î');
str1 := StringReplace(str1, 'ô' , 'ô');
str1 := StringReplace(str1, 'û' , 'û');
str1 := StringReplace(str1, 'è' , 'è');
str1 := StringReplace(str1, 'ì' , 'ì');
str1 := StringReplace(str1, 'ò' , 'ò');
str1 := StringReplace(str1, 'ù' , 'ù');
str1 := StringReplace(str1, 'ä' , 'ä');
str1 := StringReplace(str1, 'ë' , 'ë');
str1 := StringReplace(str1, 'ï' , 'ï');
str1 := StringReplace(str1, 'ö' , 'ö');
str1 := StringReplace(str1, 'ü' , 'ü');
str1 := StringReplace(str1, 'Ã' , 'Á');
str1 := StringReplace(str1, 'Ã' , 'à');
str1 := StringReplace(str1, '¥' , 'å');
str1 := StringReplace(str1 , '“' , '"' );
str1 := StringReplace(str1 , '”' , '"' );
str1 := StringReplace(str1 , '’' , '''' );
str1 := StringReplace(str1 , '‘' , '''' );
str1 := StringReplace(str1 , '&' , '&' );
str1 := StringReplace(str1 , '–' , '-' );
str1 := StringReplace(str1 , '&' , '&' );
str1 := StringReplace(str1 , '″' , '"' );
str1 := StringReplace(str1 , '…' , '...');
str1 := StringReplace(str1 , ' ' , '');
// Str1 := Sinacento (Str1);
result := str1;
end;
//
// Funcion que borra signos y quita acentos
//
function PreparaTitulo(T: string): string;
var
i: Integer;
begin
HTMLDecode(result);
result := AnsiLowerCase(T);
result := StringReplace(result, chr(146), '');
result := StringReplace(result, chr(39), '');
result := StringReplace(result, '´', '');
result := StringReplace(result, '`', '');
result := StringReplace(result, '"', '');
result := StringReplace(result, '¿', '');
result := StringReplace(result, '?', '');
result := StringReplace(result, '¡', '');
result := StringReplace(result, '!', '');
result := StringReplace(result, '.', '');
result := StringReplace(result, ':', '');
result := StringReplace(result, ';', '');
//result := StringReplace(result, '-', '');
result := StringReplace(result, '/', '');
result := StringReplace(result, '\', '');
result := StringReplace(result, '_', '');
result := StringReplace(result, 'á', 'a');
result := StringReplace(result, 'Á', 'a');
result := StringReplace(result, 'À', 'a');
result := StringReplace(result, 'é', 'e');
result := StringReplace(result, 'í', 'i');
result := StringReplace(result, 'ó', 'o');
result := StringReplace(result, 'ú', 'u');
result := StringReplace(result, 'ä', 'a');
result := StringReplace(result, 'ë', 'e');
result := StringReplace(result, 'ï', 'i');
result := StringReplace(result, 'ö', 'o');
result := StringReplace(result, 'ü', 'u');
result := StringReplace(result, '–', '-' );
result := StringReplace(result, '…', '...');
result := Caracter (result);
end;
// PROCEDIMIENTOS DE CARTELES PELICULAS
//
// Crea la lista de las peliculas que contengan el titulo introducido
//
procedure PaginasCartelesPeliculas (Titulo: string);
var
CPPage : TStringList;
Line, PageWeb, TitleWeb, Encontrado, SwFin, TitleWebSin, Any, PageWebList : string;
LineNr, ContPagina, i, j, PosAny : Integer;
begin
Encontrado := '0'; // Si encontrado = '0' es que no se encuentra la pelicula
PickTreeClear;
//PickTreeAdd('Resultados de la búsqueda para "' + Titulo + '" (www.CartelesPeliculas.com):', '');
Titulo := UrlEncode (Titulo);
PageWeb := 'http://www.cartelespeliculas.com/wp/?s=' + titulo; // Se crea la URL para ver todas las peliculas que contengan el texto introducido
CPPage := TStringList.Create;
CPPage.Text := GetPage(PageWeb);
CPPage.Text := Caracter (CPPage.Text);
LineNr := 1;
SwFin := '0';
ContPagina := 1;
Repeat // Para cada pelicula que contenga el texto mira a ver si coincide con el titulo
If FindLine ('bookmark' , CPPage , LineNr) > 0 then // Puede haber coincidencias con otros campos de la web (Sinopsis, ...)
begin
LineNr := FindLine('bookmark', CPPage, LineNr);
Line := CPPage.GetString(LineNr);
TitleWeb := TextBetween (Line, 'bookmark">' , '<'); // Estrae el titulo
LineNr := LineNr + 1;
TitleWebSin := Sinacento(Titleweb);
Titulo := UrlDecode (Titulo);
TitleWebSin := PreparaTitulo(TitleWebSin);
PageWebList := TextBetween (Line, '<a href="' , '" rel="'); // Extrae la direccion Web
if Pos(AnsiLowerCase(Titulo), TitleWebSin) > 0 then // Verifica si el titulo de la web coincide con el texto
begin
LineNr := FindLine('quick-read-more', CPPage, LineNr);
Line := CPPage.GetString(LineNr);
Delete (Line, 1, 4);
For i := 1 to 5 do // Extrae el año para mostrar en la PickList
begin
PosAny := Pos(',' , Line);
Any := Copy (Line, PosAny - 4 , 4);
If (Any > '0000') and (Any < '9999') then
begin
Any:= ' (' + Any + ')';
break
end
else
begin
Any := '';
Delete (Line , PosAny, 1);
end;
end;
PickTreeAdd(TitleWeb + Any, PageWebList); // Añade el titulo, año y direccion Web
Encontrado := '1';
end
else //si no coincide el titulo miramos el primer AKAS
begin
LineNr := LineNr - 1;
LineNr := FindLine('akas', CPPage, LineNr);
Line := CPPage.GetString(LineNr);
TitleWeb := TextBetween (Line, 'alt="akas: ' , ','); // Estrae el titulo
LineNr := LineNr + 1;
TitleWebSin := Sinacento(Titleweb);
Titulo := UrlDecode (Titulo);
TitleWebSin := PreparaTitulo(TitleWebSin);
PageWebList := TextBetween (Line, '<a href="' , '" rel="'); // Extrae la direccion Web
if Pos(AnsiLowerCase(Titulo), TitleWebSin) > 0 then // Verifica si el titulo de la web coincide con el texto
begin
LineNr := FindLine('quick-read-more', CPPage, LineNr);
Line := CPPage.GetString(LineNr);
Delete (Line, 1, 4);
For i := 1 to 8 do // Extrae el año para mostrar en la PickList
begin
PosAny := Pos(',' , Line);
Any := Copy (Line, PosAny - 4 , 4);
If (Any > '0000') and (Any < '9999') then
begin
Any:= ' (' + Any + ')';
break
end
else
begin
Any := '';
Delete (Line , PosAny, 1);
end;
end;
PickTreeAdd(TitleWeb + Any, PageWebList); // Añade el titulo, año y direccion Web
Encontrado := '1';
end
else
begin
SwFin:= '1';
end
end
end
else
begin
If FindLine ('Entradas Anteriores' , CPpage, LineNr) > 0 then // Si 'Entradas Anteriores' es que hay mas paginas con coincidencia
begin
ContPagina := ContPagina + 1;
Titulo := UrlEncode (Titulo);
PageWeb := 'http://www.cartelespeliculas.com/wp/page/' + (inttostr(ContPagina)) + '/?s=' + titulo;
CPPage := TStringList.Create; // Lee las paginas con coincidencia
CPPage.Text := GetPage(PageWeb);
CPPage.Text := Caracter (CPPage.Text);
LineNr := 1;
end
else
begin
SwFin := '1';
end;
end;
until (SwFin = '1');
if (Encontrado = '1') then
begin
PickTreeSort;
if PickTreeExec(pageweb) then // Selecciona que nos interese y va a buscar la caratula
begin
AnalyzeCoverPage (PageWeb); // Muestra los carteles seleccionados
end
end
else
ShowMessage('Titulo ' + Titulo + ' no encontrado en CartelesPeliculas');
end;
//
// Caratula.
//
//Accede a la web para extraer la caratula, Primero va a una web intermedia y despues accede a la caratula
//
procedure AnalyzeCoverPage(PageWeb: string);
var
Page: TStringList;
LineNr : Integer;
Line : string;
begin
Page := TStringList.Create; // Accede a la Web donde están todas las caratulas y los datos de la pelicula
Page.Text := GetPage(PageWeb);
RemovePicture;
LineNr := 1;
If FindLine ('/pgrande3' , Page , LineNr) > 0 then
begin
LineNr := FindLine('/pgrande3', Page, LineNr);
Line := Page.GetString(LineNr);
PageWeb := TextBetween (Line, '<a href="' , '" target'); // Forma la Web con la primera caratula que encuentra que suele ser la española
//PageWeb := 'http://www.cartelespeliculas.com/' + PageWeb;
PageWeb := StringReplace(pageWeb , 'amp;' , '&' );
Page.Free
Page := TStringList.Create; // Accede a la Web intermedia
Page.Text := GetPage(PageWeb);
LineNr := 1;
LineNr := FindLine('galeria/albums/', Page, LineNr);
If FindLine ('galeria/albums/' , Page , LineNr) > 0 then
begin
Line := Page.GetString(LineNr);
PageWeb := TextBetween (Line, 'id="imagen" src="' , '" width'); // Forma la Web donde esta la caratula
PageWeb := 'http://www.cartelespeliculas.com/' + PageWeb;
Getpicture (PageWeb); // Envía la caratula al programa.
end
else
ShowMessage('Titulo no encontrado en CartelesPeliculas')
end
else
ShowMessage('Titulo no encontrado en CartelesPeliculas');
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line: string;
Count: Integer;
MovieTitle, MovieAddress, Title: string;
begin
Count := 0;
Page := TStringList.Create;
Page.Text := GetPage(Address);
PickTreeClear;
// Get how much search results have been found
// No encuentra las palabras "Resultados por título"¿?, busco la
// linea anterior, y cojo la siguiente linea, le quito los espacios
// y me quedo con el numerode peliculas.
LineNr := FindLine('<div class="sub-header-search">', Page, 0);
if LineNr <> -1 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
Line:= DeleteTags(Line);
Line:= ConvertAlphaNum(Line);
Count := StrToInt(Line,0);
end;
// Add the results to the PickTree
if Count = 0 then
ShowMessage('No se ha encontrado ningún registro')
else
begin
LineNr := 0;
while true do
begin
LineNr := FindLine('<div class="mc-title"><a href="', Page, LineNr + 1);
if LineNr = -1 then
begin
LineNr := FindLine('siguientes >>', Page, 0);
if LineNr = -1 then
break;
Line := Page.GetString(LineNr);
Page.Text := GetPage('http://www.filmaffinity.com/es/search.php' + TextBetween(Line, '<a href="search.php', '"><div class="'));
LineNr := 0;
continue;
end;
Line := Page.GetString(LineNr);
MovieAddress := TextBetween(Line, '<div class="mc-title"><a href="', '.html">') + '.html';
MovieTitle:= TextBetween(Line, '.html">', '<img src="');
MovieTitle:= DeleteTags(MovieTitle);
MovieTitle:= LineDecode(MovieTitle);
if (Length(MovieAddress) <> 0) and (Length(MovieTitle) <> 0) then
PickTreeAdd(MovieTitle, BaseURL + MovieAddress);
end;
if ((Count = 1) and (GetOption('DontAsk') = 1)) then
AnalyzeMoviePage(BaseURL + MovieAddress)
else
begin
//
// PickTreeSort; // Si se quiere clasificar por orden alfabetico hay que activar el PickTreeSort, quitar las 2
// // las 2 barras "//" que hay a la izquierda la instrucción PickTreeSort y ya esta.
//
PickTreeExec(Address);
AnalyzeMoviePage(Address);
Title := GetField(fieldTranslatedTitle);
if Title = '' then
Title := GetField(fieldOriginalTitle);
Title := PreparaTitulo(Title);
if Input('Importar de CartelesPeliculas', 'Por favor, introduce el titulo:', Title) then
PaginasCartelesPeliculas(Title);
end
end;
Page.Free;
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Address: string);
var
Page: TStringList;
LineNr, LineInc: Integer;
Line: string;
Item: string;
Comments: string;
CharStar: string;
begin
Comments := '';
// URL
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := GetPage(Address);
// Translated Title
LineNr := FindLine('<h1 id="main-title">', Page, 0);
Line := Page.GetString(LineNr);
Item := DeleteTags(TextBetween(Line, '<h1 id="main-title">', '</h1>'));
Item:= LineDecode(Item);
SetField(fieldTranslatedTitle, Item);
// Picture
LineNr := FindLine('http://pics.filmaffinity.com/', Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween(Line, '<a class="lightbox" href="', '" title="');
if Length(Item) = 0 then
Item := TextBetween(Line, '" src="', '"></a>');
GetPicture(Item);
end;
// Rating
LineNr := FindLine('<div id="movie-rat-avg" itemprop="ratingValue">', Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(Line);
Item:= LineDecode(Item);
SetField(fieldRating, StringReplace(Item, ',', '.'));
end;
// Original Title
LineNr := FindLine(UTF8Encode('<dt>Título original</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
// Eliminar aka
if Pos('>aka <',Line) <> 0 then Line:= StringReplace(Line,'>aka <','');
Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
Item:= LineDecode(Item);
if Length(Item) = 0 then
begin
Line := Page.GetString(LineNr + 2);
// Eliminar aka
if Pos('>aka <',Line) <> 0 then Line:= StringReplace(Line,'>aka <','');
Item := DeleteTags(Line);
Item := LineDecode(Item);
end;
SetField(fieldOriginalTitle, Item);
end;
// Year
LineNr := FindLine(UTF8Encode('<dt>Año</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
Item:= LineDecode(Item);
SetField(fieldYear, Item);
end;
// Length
LineNr := FindLine(UTF8Encode('<dt>Duración</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, '<dd>', 'min.</dd>'));
Item:= LineDecode(Item);
SetField(fieldLength, Item);
end;
// Country
LineNr := FindLine(UTF8Encode('<dt>País</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, 'title="', '"></span'));
Item:= LineDecode(Item);
SetField(fieldCountry, Item);
end;
// Director
LineNr := FindLine(UTF8Encode('<dt>Director</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
Item:= LineDecode(Item);
SetField(fieldDirector, Item);
end;
// Script writer
LineNr := FindLine(UTF8Encode('<dt>Guión</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween(Line, '<dd>', '</dd>');
Item:= LineDecode(Item);
if ((CheckVersion(4,2,0) = true) and (GetOption('Force350') = 0)) then SetField(fieldWriter, Item)
else Comments := Comments + 'Guión: ' + Item + #13#10 + #13#10;
end;
// Composer
LineNr := FindLine(UTF8Encode('Música'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween(Line, '<dd>', '</dd>');
Item:= LineDecode(Item);
if ((CheckVersion(4,2,0) = true) and (GetOption('Force350') = 0)) then SetField(fieldComposer, Item)
else Comments := Comments + 'Música: ' + Item + #13#10 + #13#10;
end;
// Photography
LineNr := FindLine(UTF8Encode('<dt>Fotografía</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween(Line, '<dd>', '</dd>');
Item:= LineDecode(Item);
Comments := Comments + 'Fotografía: ' + Item + #13#10 + #13#10;
end;
// Actors
LineNr := FindLine(UTF8Encode('<dt>Reparto</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
if Length(TextBetween(Line, '<dd>', '</dd>')) = 0 then
Item := DeleteTags(Line)
else
Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
if GetOption('ActorsInALine') = 0 then
Item := StringReplace(Item, ', ', #13#10);
Item:= LineDecode(Item);
SetField(fieldActors, Item);
end;
// Productor
LineNr := FindLine(UTF8Encode('<dt>Productora</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, '<dd>', '</dd>'));
Item:= LineDecode(Item);
SetField(fieldProducer, Item);
end;
// Category
LineNr := FindLine(UTF8Encode('<dt>Género</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 2);
Item := DeleteTags(Line);
Item:= LineDecode(Item);
Item := StringReplace(Item, ' | ', ', ');
Item := StringReplace(Item, '. ', ', ');
SetField(fieldCategory, Item);
end;
// Official Webpage
LineNr := FindLine(UTF8Encode('<dt>Web oficial</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(TextBetween(Line, ' href="', '">'));
Item:= LineDecode(Item);
Comments := Comments + 'Web oficial: ' + Item + #13#10 + #13#10;
end;
// Synopsis
LineNr := FindLine(UTF8Encode('<dt>Sinopsis</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := DeleteTags(Line);
Item:= LineDecode(Item);
SetField(fieldDescription, Item);
end;
// Awards
LineNr := FindLine(UTF8Encode('<dt>Premios</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
Comments := Comments + 'Premios: ' + #13#10;
while Pos ('</dd>', Line) = 0 do
begin
if Pos ('<span id="show-all-awards">', Line) = 0 then
begin
Item := DeleteTags(Line);
Item:= LineDecode(Item);
if (Length(Item) <> 0) then
begin
Comments := Comments + ' - ' + Item + #13#10;
end;
end;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
Comments := Comments + #13#10;
end;
// Critic
LineNr := FindLine(UTF8Encode('<dt>Críticas</dt>'), Page, LineNr);
if LineNr <> -1 then
begin
// El unico objeto de esta linea es poder presentar en el foro el listado
// del script sin que se produzca la conversión del caracter estrella
CharStar := '&'+'#9733;' ;
Comments := Comments + 'Críticas: ' + #13#10 + #13#10;
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
while LineNr <> -1 do
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
if Pos (UTF8Encode('<a title="Leer crítica completa" href='), Line) <> 0 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
Line:= StringReplace(Line, CharStar, '*');
Item := DeleteTags(Line);
Item:= LineDecode(Item);
if (Length(Item) <> 0) then
begin
Comments := Comments + Item + #13#10;
LineNr := FindLine('<div class="pro-crit-med">', Page, LineNr + 1);
Line := Page.GetString(LineNr);
Item := DeleteTags(Line);
Item:= LineDecode(Item);
if (Length(Item) <> 0) then
begin
Comments := Comments + Item + #13#10;
end;
Comments := Comments + '________________________________________' + #13#10 + #13#10;
end;
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
end;
end;
HTMLDecode(Comments);
SetField(fieldComments, Comments);
if GetOption('DontWantExtras') = 0 then
AnalyzeExtras(Page,Address);
end;
//------------------------------------------------------------------------------------
// Extras
procedure AnalyzeExtras(Page: TStringList; Address: string);
var
LineNr,NumImages,NumTrailers, i,CountC: Integer;
Line: string;
TrailersAddress: string;
ImagesAddress: string;
ImageTitle: string;
ExtraIndex: Integer;
ExtraString: string;
ExtraURL: string;
ExtraTagBase: string;
LimitImages,LimitTrailers,LimitCritics: Integer;
begin
ExtraTagBase := 'FA'+TextBetween(Address, '/film', '.html');
ClearExtrasOfScript;
LimitImages := StrtoInt (GetParam('ExtraImagesLimit'),0);
if LimitImages < 0 then LimitImages := 0;
LimitTrailers := StrtoInt (GetParam('ExtraTrailersLimit'),0);
if LimitTrailers < 0 then LimitTrailers := 0;
LimitCritics := StrtoInt (GetParam('ExtraCriticsLimit'),0);
if LimitCritics < 0 then LimitCritics := 0;
// Enlaces a Criticas
LineNr := FindLine(UTF8Encode('<dt>Críticas</dt>'), Page, LineNr);
CountC := 0;
if LineNr <> -1 then
begin
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
while LineNr <> -1 do
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
if Pos (UTF8Encode('<a title="Leer crítica completa" href='), Line) <> 0 then
begin
Line := Page.GetString(LineNr);
ExtraURL:= TextBetween(Line, 'href="', '" ');
if (Length(ExtraURL))>0 then
begin
ExtraIndex := AddExtra();
SetExtraField(ExtraIndex, extraFieldURL, ExtraURL);
SetExtraField(ExtraIndex, extraFieldCategory, 'Críticas');
SetExtraField(ExtraIndex, extraFieldTitle, TextBetween(ExtraURL, '//', '/'));
SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'C'+IntToStr(ExtraIndex));
end;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
LineNr := FindLine('<div class="pro-review">', Page, LineNr + 1);
CountC := CountC+1;
if CountC = LimitCritics then
break;
end;
end;
// Imágenes y Trailers
NumTrailers := 0;
NumImages := 0;
LineNr := FindLine(UTF8Encode('>Trailers <em>'), Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
NumTrailers := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
TrailersAddress := 'http://www.filmaffinity.com'+TextBetween(Line, 'href="', '"');
end
LineNr := FindLine(UTF8Encode('>Imágenes <em>'), Page, LineNr+1);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
NumImages := StrToInt(TextBetween(Line, '<em>[', ']</em>'),0);
ImagesAddress := 'http://www.filmaffinity.com'+TextBetween(Line, 'href="', '"');
end
// Imágenes
If NumImages > LimitImages then NumImages := LimitImages;
if NumImages >0 then
begin
Page.Text := GetPage(ImagesAddress);
LineNr := FindLine(UTF8Encode('<span>Posters</span>'), Page,0);
if LineNr = -1 then
LineNr := FindLine(UTF8Encode('<span>Movie Posters</span>'), Page,0);
if LineNr =-1 then
LineNr := FindLine(UTF8Encode('<span>Fotogramas</span>'), Page,0);
if LineNr =-1 then
LineNr := FindLine(UTF8Encode('span>Otros</span>'), Page,0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
for i := 1 to NumImages do
begin
LineNr := FindLine('<a href="', Page, LineNr + 1);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
ExtraString := TextBetween(Line, 'href="', '"');
ImageTitle := TextBetween(Line, 'Tipo: </strong>', '</div>');
ExtraIndex := AddExtra();
if GetOption('GroupImages') = 1 then
begin
SetExtraField(ExtraIndex, extraFieldCategory, 'Imágenes');
SetExtraField(ExtraIndex, extraFieldTitle, ImageTitle);
end
else
begin
SetExtraField(ExtraIndex, extraFieldCategory, ImageTitle);
SetExtraField(ExtraIndex, extraFieldTitle, 'Imágenes')
end;
SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'I'+IntToStr(ExtraIndex));
GetExtraPicture(ExtraIndex, ExtraString);
end;
end;
end;
end;
If NumTrailers > LimitTrailers then NumTrailers := LimitTrailers;
if NumTrailers > 0 then
begin
Page.Text := GetPage(TrailersAddress);
LineNr := FindLine(UTF8Encode('>Mostrar video<'),Page,0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
for i:= 1 to NumTrailers do
begin
LineNr := FindLine('src="', Page,LineNr + 1);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
ExtraString := TextBetween(Line, 'src="', '"');
ExtraURL := TextAfter(ExtraString, '//');
ExtraIndex := AddExtra();
SetExtraField(ExtraIndex, extraFieldURL, ExtraURL);
SetExtraField(ExtraIndex, extraFieldCategory, 'Trailers');
SetExtraField(ExtraIndex, extraFieldTitle, TextBetween(ExtraString, '//', '/'))
SetExtraField(ExtraIndex, extraFieldTag, ExtraTagBase+'T'+IntToStr(ExtraIndex));
LineNr := FindLine(UTF8Encode('Mostrar video'), Page,LineNr + 1);
end;
end;
end;
end;
end;
//------------------------------------------------------------------------------------
begin
if (CheckVersion(4,1,2) = false) then
begin
ShowMessage('Se requiere Ant Movie Catalog versión 4.1.2 o superior');
exit;
end;
if (CheckVersion(4,2,0) = false) then
SetOption('DontWantExtras', 1);
MovieName := GetField(fieldOriginalTitle);
if Length(MovieName) = 0 then
MovieName := GetField(fieldTranslatedTitle);
if GetOption('DontAsk') = 0 then
Input('FilmAffinity', 'Pelicula:', MovieName);
MovieName := UTF8Encode(MovieName);
if Pos('filmaffinity.com', MovieName) > 0 then
AnalyzeMoviePage(MovieName)
else
AnalyzePage(BaseURL +'/es/search.php?stext=' + UrlEncode(MovieName) + '&stype=Title');
end.