[REL][ES]Filmaffinity + CaratulasDeCine
Posted: 2005-06-09 19:40:03
[ES]Nuevo script, que coge toda la informacion de filmaffinity y la caratula de CaratulasDeCine. Muchas gracias tanto a aviloria como a japg2000 por sus scripts. Esto es solo una mezcla de ambos (las ultimas versiones de cada uno de ellos)
[EN]This is a new script, it takes all the info from filmaffinity and the picture from CaratulasDeCine. Thanks to aviloria and japg2000 for their scripts. This script is only a mix between both of them (It is made with the last versions of the scripts)
[EN]This is a new script, it takes all the info from filmaffinity and the picture from CaratulasDeCine. Thanks to aviloria and japg2000 for their scripts. This script is only a mix between both of them (It is made with the last versions of the scripts)
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=aviloria (aviloria@yahoo.com); japg2000 (japg2000@terra.es); javilp (javilp83@telefonica.net)
Title=FilmAffinity + CaratulasDeCine (ES)
Description=Movie importation script for FilmAffinity Spain and CaratulasDeCine
Site=http://www.filmaffinity.com
Language=ES
Version=1.0
Requires=3.5.0
Comments=Updated to the new beta version of the page | Previous version is unsupported. | Mix between two scripts made by javilp. The whole work of the scripts made by aviloria and japg2000.
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
[Options]
***************************************************)
program FilmAffinity;
const
SearchBaseURL = 'http://new.filmaffinity.com/es/res.php?stext=';
SearchPostFix = '&stype=tit';
BaseURL1 = 'http://new.filmaffinity.com';
var
MovieName: string;
MovieURL: string;
Title: 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(var S: string; StartTag: string; EndTag: string): string;
var
InitialPos: Integer;
begin
InitialPos := Pos(StartTag, S);
if InitialPos = 0 then
result := ''
else
begin
Delete(S, 1, InitialPos + Length(StartTag) - 1);
InitialPos := Pos(EndTag, S);
if InitialPos = 0 then
result := S
else
begin
result := copy(S, 1, InitialPos - 1);
Delete(S, 1, InitialPos + 1);
end;
end;
end;
//------------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line: string;
Count: Integer;
MovieTitle, MovieAddress: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
if Pos('<title>Busqueda de "', Page.Text) = 0 then
begin
ShowMessage('No se ha podido establecer la conexion.');
end else
begin
LineNr := FindLine('resultados.</b></td></tr>', Page, 0);
Line := Page.GetString(LineNr);
Count := StrToInt(TextBetween (Line, '<b>', ' resultados.</b>'), 0);
if Count = 0 then
begin
ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
end else
begin
PickTreeClear;
PickTreeAdd('Encontrados ' + IntToStr(Count) + ' resultados para "' + MovieName + '"', '');
LineNr := LineNr + 7;
Line := Page.GetString(LineNr);
repeat
MovieTitle := TextBetween (Line, '.html">', '</a>');
HTMLDecode(MovieTitle);
Line := Page.GetString(LineNr);
MovieAddress := TextBetween (Line, '<b><a href="', '">');
PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
LineNr := LineNr + 10;
Line := Page.GetString(LineNr);
until Pos('</table>', Line) > 0;
if PickTreeExec(Address) then
AnalyzeMoviePage(Address);
end;
end;
Page.Free;
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Address: string);
var
Page: TStringList;
LineNr, aux: Integer;
Line: string;
Item: string;
Comments: string;
Actors: string;
Directors: string;
begin
Comments := '';
Actors := '';
// URL
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := GetPage(Address);
// Translated Title
LineNr := FindLine('<div style="margin-bottom: 4; padding:1; text-align: left; border-bottom: 1px solid #990000;"><span style="color:#990000; font-size:16; font-weight: bold;">', Page, 0);
Line := Page.GetString(LineNr);
Item := TextBetween (Line, ' border="0"> ', '</span>');
HTMLDecode(Item);
SetField(fieldTranslatedTitle, Trim (Item));
// Original Title
LineNr := FindLine('TITULO ORIGINAL', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td ><b>', '</b></td>');
HTMLDecode(Item);
SetField(fieldOriginalTitle, Trim (Item));
end;
// Picture
LineNr := FindLine('owned by Studio', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<img src="', '">');
if Pos (BaseURL1, Item) <> 0 then
Item := TextBetween (Item, BaseURL1, '"');
GetPicture (BaseURL1 + Item);
end;
// Year
LineNr := FindLine('AÑO', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
HTMLDecode(Item);
SetField(fieldYear, Trim (Item));
end;
// Length
LineNr := FindLine('DURACIÓN', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', ' min.</td>');
HTMLDecode(Item);
SetField(fieldLength, Trim (Item));
end;
// Country
LineNr := FindLine('PAÍS', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, 'alt="', '" border');
HTMLDecode(Item);
SetField(fieldCountry, Trim (Item));
end;
// Director
LineNr := FindLine('DIRECTOR', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Directors := '';
while Pos ('stype=director', Line) > 0 do
begin
Item := TextBetween (Line, '">', '</a>');
HTMLDecode(Item);
if Directors = '' then
Directors := Item
else
Directors := Directors + ', ' + Item;
end;
SetField(fieldDirector, Trim (Directors));
end;
// Script writer
LineNr := FindLine('GUIÓN', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Guión: ' + Item + #13#10;
end;
// Composer
LineNr := FindLine('MUSICA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Música: ' + Item + #13#10;
end;
// Photography
LineNr := FindLine('FOTOGRAFÍA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
Comments := Comments + 'Fotografía: ' + Item + #13#10;
end;
// Actors
LineNr := FindLine('REPARTO', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Actors := TextBetween (Line, '">', '</a>') + #13#10;
while Pos ('stype=cast', Line) > 0 do
Actors := Actors + TextBetween (Line, '"> ', '</a>') + #13#10;
HTMLDecode(Actors);
SetField(fieldActors, Actors);
end;
// Productor
LineNr := FindLine('PRODUCTORA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Item := TextBetween (Line, '<td >', '</td>');
HTMLDecode(Item);
SetField(fieldProducer, Trim (Item));
end;
// Genere & Critic
LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
HTMLDecode(Line);
Item := TextBetween (Line, '<td >', '</td>');
if Pos (' / ', Item) <> 0 then
begin
Line := Item;
Item := Copy (Item, 1, Pos (' / ', Item));
Line := TextBetween (Line, ' / ', '<br />');
if Pos (' / ', Line) <> 0 then
begin
Comments := Comments + Item + #13#10;
Item := Line;
Item := Copy (Item, 1, Pos (' / ', Item));
Line := TextBetween (Line, ' / ', '</td>');
SetField(fieldCategory, Trim(Item));
SetField(fieldDescription, Line);
end
else
begin
SetField(fieldCategory, Trim(Item));
SetField(fieldDescription, Line);
end
end
else
SetField(fieldCategory, Trim(Item));
end;
// Official Webpage
LineNr := FindLine('WEB OFICIAL', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr + 1);
Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
end;
// Rating
LineNr := FindLine('<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween (Line, '<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', '</td>');
HTMLDecode(Item);
SetField(fieldRating, Item);
end;
HTMLDecode(Comments);
SetField(fieldComments, Comments);
end;
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
// CARATULA DE CARATULASDECINE
function EliminaInicio(S: string; CR: string): string;
begin
result := S;
while Pos(CR, result) = 1 do
begin
Delete(result, 1, Length(CR));
end;
end;
function CadenaEntre(var S: string; StartTag: string; EndTag: string): string;
var
InicioPos: Integer;
begin
InicioPos := Pos(StartTag, S);
Delete(S, 1, InicioPos + Length(StartTag) - 1);
InicioPos := Pos(EndTag, S);
result := copy(S, 1, InicioPos - 1);
Delete(S, 1, InicioPos + 1);
end;
function PreparaTitulo(T: string): string;
var
i: Integer;
begin
result := AnsiLowerCase(T);
HTMLDecode(result);
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, '_', '');
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, 'ñ', 'n');
end;
function GetCaratulasDeCineDir(MovieTitle: string): string;
var
PageOfLetter: Array of string;
C: Char;
Index: Integer;
begin
Setarraylength(PageOfLetter,36);
PageOfLetter[0]:='0_9'; PageOfLetter[1]:='0_9'; PageOfLetter[2]:='0_9'; PageOfLetter[3]:='0_9';
PageOfLetter[4]:='0_9'; PageOfLetter[5]:='0_9'; PageOfLetter[6]:='0_9'; PageOfLetter[7]:='0_9';
PageOfLetter[8]:='0_9'; PageOfLetter[9]:='0_9'; PageOfLetter[10]:='a'; PageOfLetter[11]:='b';
PageOfLetter[12]:='c'; PageOfLetter[13]:='d'; PageOfLetter[14]:='e'; PageOfLetter[15]:='f_h';
PageOfLetter[16]:='f_h'; PageOfLetter[17]:='f_h'; PageOfLetter[18]:='i_k'; PageOfLetter[19]:='i_k';
PageOfLetter[20]:='i_k'; PageOfLetter[21]:='l'; PageOfLetter[22]:='m_n'; PageOfLetter[23]:='m_n';
PageOfLetter[24]:='o_q'; PageOfLetter[25]:='o_q'; PageOfLetter[26]:='o_q'; PageOfLetter[27]:='r_s';
PageOfLetter[28]:='r_s'; PageOfLetter[29]:='t_z'; PageOfLetter[30]:='t_z'; PageOfLetter[31]:='t_z';
PageOfLetter[32]:='t_z'; PageOfLetter[33]:='t_z'; PageOfLetter[34]:='t_z'; PageOfLetter[35]:='t_z';
C := copy(MovieTitle, 1, 1);
if (C >= '0') and (C <= '9') then
begin
Index := Ord(C) - Ord('0');
end
else
begin
Index := 10 + Ord(C) - Ord('a');
end;
result:='http://www.caratulasdecine.com/' + PageOfLetter[Index] + '.htm';
end;
procedure AnalyzePageCaratulasDeCine(PageDir: string);
var
CaratulasdecinePage, MoviePage: TStringList;
MovieDir, Line, LineTmp: string;
Encontrado, Salir, BeginPos, EndPos, LineNr, LineMov: Integer;
begin
CaratulasdecinePage := TStringList.Create;
CaratulasdecinePage.Text := GetPage(PageDir);
LineNr := FindLine('</big></big></big></big></big></big>', CaratulasdecinePage, 0);
LineNr := LineNr + 1;
Line := CaratulasdecinePage.GetString(LineNr);
Line := EliminaInicio(Line, ' ');
Salir := 0;
Encontrado := 0;
repeat
while (Pos('<br>', Line) = 0) and (Pos('</td>', Line) = 0) and (LineNr < 10000) do
begin
if copy(Line, Length(Line), 1) <> ' ' then
Line := Line + ' ';
LineNr := LineNr + 1;
LineTmp := CaratulasdecinePage.GetString(LineNr);
LineTmp := EliminaInicio(LineTmp, ' ');
Line := Line + LineTmp;
end;
if Pos('</td>', Line) > 0 then
Salir := 1;
if Pos('<a class="A" href="', Line) > 0 then
begin
MovieDir := 'http://www.caratulasdecine.com/' + CadenaEntre(Line, '<a class="A" href="', '">');
end
else
begin
MovieDir := Line;
MovieDir := CadenaEntre(MovieDir, '<a href="', 'class="A">');
while Pos('<a href="', MovieDir) > 0 do
MovieDir := CadenaEntre(MovieDir, '<a href="', 'class="A">');
end;
Line := CadenaEntre(Line, '', '<');
Line := PreparaTitulo(Line);
if Pos(Title, Line) > 0 then
begin
MoviePage := TStringList.Create;
MoviePage.Text := GetPage(MovieDir);
LineMov := FindLine('<p align="center"><img src="', MoviePage, 0);
Line := MoviePage.GetString(LineMov);
Line := CadenaEntre(Line, '<p align="center"><img src="', '" ');
Line := EliminaInicio(Line, '../');
GetPicture('http://www.caratulasdecine.com/' + Line);
Salir := 1;
Encontrado := 1;
end;
LineNr := LineNr + 1;
if LineNr > 10000 then
Salir := 1;
Line := CaratulasdecinePage.GetString(LineNr);
Line := EliminaInicio(Line, ' ');
until Salir = 1;
if (Encontrado <> 1) then
ShowMessage('Titulo ' + Title + ' no encontrado en ' + PageDir)
end;
begin
if CheckVersion(3,5,0) then
begin
MovieName := GetField(fieldTranslatedTitle);
if MovieName = '' then
MovieName := GetField(fieldOriginalTitle);
if Input('Importar de FilmAffinity + CaratulasDeCine', 'Introduzca el titulo de la pelicula:', MovieName) then
begin
AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix);
Title := PreparaTitulo (MovieName);
AnalyzePageCaratulasDeCine(GetCaratulasDeCineDir(Title));
end;
end
else
ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
end.