(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=micmic (micmic@dieznet.com). Update: enriquevagu
Title=Carteles-Metropoli
Description=Picture importation script for carteles-metropoli
Site=carteles.metropoliglobal.com
Language=ES
Version=2.0
Requires=3.5.0
Comments=La imagen grande a veces no entra en AMC, así que será automáticamente reducida. Esto puede hacer que se pixele y pierda calidad
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]
TitleMixedCase=0|0|0=Each letter of each word of title begins with Uppercase|1=Titles in lowercase except first letter of first word
ObtenerImagen=0|0|0=Permite seleccionar la imagen a tomar|1=Toma automáticamente la primera imagen, pequeña|2=Toma automáticamente la primera imagen, grande
ObtenerComentarios=1|1|0=No obtiene los comentarios de los usuarios sobre la película|1=Sí obtiene los comentarios de los usuarios sobre la película
***************************************************)
program micmic;
var
MovieName: string;
const
Base = 'http://carteles.metropoliglobal.com/';
BaseURL = 'http://carteles.metropoliglobal.com/paginas/ficha.php?qbtitulo=';
BaseURL2 = '&qbbuscar=titulo&Submit=Buscar&qsec=buscar';
BaseURL3 = 'paginas/ficha.php?qsec=peli&qid=';
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 AnalizaBigImagePage(ImagenURL: string): string;
var
Page: TStringList;
LineNr: Integer;
PosIni, PosFin: Integer;
Line, SubLine: string;
txtTemp: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(ImagenURL);
txtTemp := 'img src="';
LineNr := FindLine(txtTemp, Page, 0);
if LineNr > 0 then
begin
Line := Page.GetString(LineNr);
//Busca el comienzo de la URL
PosIni := pos(txtTemp, Line);
SubLine := Copy(Line, PosIni + Length(txtTemp), Length(Line));
//chequea si la imagen comienza por ../, y lo quita
txtTemp := '../';
PosIni := pos(txtTemp, SubLine);
if PosIni>0 then SubLine := Copy(SubLine, PosIni + Length(txtTemp), Length(Line));
//busca el final de la URL
txtTemp := '" hspace="2" ';
PosFin := pos(txtTemp, SubLine);
txtTemp := Copy(SubLine, 1, PosFin - 1);
end else
txtTemp := '';
Page.Free;
result := txtTemp;
end;
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr, Encontrado: Integer;
PosIni, PosFin: Integer;
Line, SubLine: string;
Title, DirURL: string;
txtTemp: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
//Si no encuentra ningún resultado, finaliza
if Pos('Se han encontrado 0 resultados para', Page.Text) > 0 then
begin
ShowMessage('No se ha encontrado la película en carteles-metrópoli.');
end else
//si encuentra sólo un resultado, lo analiza directamente
if Pos('Se han encontrado 1 resultados para', Page.Text) > 0 then
begin
Encontrado :=0;
while (LineNr < Page.Count) and (Encontrado = 0) do
begin
SubLine := Page.GetString(LineNr);
txtTemp := '
';
PosFin := pos(txtTemp, SubLine);
DirURL := Base + BaseURL3 + Copy(SubLine, 1, PosFin - 1);
Encontrado := 1;
end;
LineNr := LineNr+1;
end;
AnalyzeMoviePage(DirURL);
end else //Si encuentra varios resultados, deja seleccionar
begin
PickTreeClear;
PickTreeAdd('Resultados para "' + MovieName + '" en ' + Base + ':', '');
// buscamos los resultados
LineNr := 0;
while LineNr < Page.Count do
begin
SubLine := Page.GetString(LineNr);
txtTemp := ' | ';
PosFin := pos(txtTemp, SubLine);
DirURL := Base + BaseURL3 + Copy(SubLine, 1, PosFin - 1);
SubLine := Copy(SubLine, PosFin + Length(txtTemp), Length(SubLine));
txtTemp := '';
PosFin := pos(txtTemp, SubLine);
Title := Copy(SubLine, 1, PosFin - 1);
//ShowMessage(Title + '-->' + DirURL);
PickTreeAdd(Title, DirURL);
end;
LineNr := LineNr + 1;
end;
Page.Free;
if PickTreeExec(Address) then
AnalyzeMoviePage(Address);
end;
end;
procedure AnalyzeMoviePage(Address: string);
var
Page: TStringList;
PosIni, PosFin, PosFin2, dist: Integer;
dirBase: string;
txtTemp: string;
txtAux: string;
campo, valor, campoAux: string;
LineNr: Integer;
Line, SubLine: string;
ImagenPeqSRC, ImagenURL, ImagenGrandeSRC: string;
Comentarios: string;
Encontrado_descripcion: Integer;
NumeroImagen, NumeroImagenBig: Integer;
Encontrado_imagen : Integer;
begin
//ShowMessage(Address);
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := StringReplace(GetPage(Address), ' ', #13#10);
// buscamos los campos
Encontrado_descripcion := 0;
Comentarios := '';
ImagenPeqSRC := '';
ImagenURL := '';
ImagenGrandeSRC := '';
LineNr := 0;
NumeroImagen := 0;
NumeroImagenBig := 0;
Encontrado_imagen := 0;
while LineNr < Page.Count do
begin
SubLine := Page.GetString(LineNr);
//txtTemp := '';
txtTemp := ' ';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
PosFin := pos(' '' then
begin
//miramos si el título traducido tiene el año, y lo quitamos
dist := pos(')',campo);
dist := pos(')',campo)-pos('(',campo);
if dist=5 then //entonces el título incorpora el año
begin
campoAux := Copy(campo,1,pos('(',campo)-2);
SetField(fieldTranslatedTitle, campoAux);
PosIni :=pos('(',campo)+1;
PosFin := pos(')',campo)-1;
campoAux := Copy(campo,PosIni,PosFin);
campoAux := Copy(campoAux,1,4);
SetField(fieldYear, campoAux);
end
else
SetField(fieldTranslatedTitle, campo);
//Buscamos en la siguiente línea el título original, nacionalidad y duracion.
LineNr := LineNr + 1;
SubLine := Page.GetString(LineNr);
while SubLine = '' do
begin
LineNr := LineNr + 1;
SubLine := Page.GetString(LineNr);
end;
//Buscamos el comienzo. txtTemp marca la diferencia entre el título y el país
txtTemp := ',';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
campo := Copy(SubLine, 21, PosIni - 21);
if campo <> '' then SetField(fieldOriginalTitle, campo);
end;
//Buscamos el país. txtAux contiene país y duración
txtAux := Copy(SubLine, PosIni + 2, Length(SubLine));
PosFin := pos(txtTemp, txtAux);
if PosFin > 0 then
begin
campo := Copy(txtAux, 1, PosFin - 1);
if campo <> '' then SetField(fieldCountry, campo);
//Buscamos los minutos.
txtTemp := ' Min. | ';
PosFin2 := pos(txtTemp, txtAux);
if PosFin2 > 0 then
begin
campo := Copy(txtAux, PosFin +2, PosFin2 - 6);
if campo <> '' then SetField(fieldLength, campo);
end;
end;
end;
end;
txtTemp := '';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
PosFin := pos(':', txtAux);
campo := Copy(txtAux, 1, PosFin - 1);
LineNr := LineNr + 1;
SubLine := Page.GetString(LineNr);
txtTemp := 'valign="top">';
PosIni := pos(txtTemp, SubLine);
txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
PosFin := pos('', txtAux);
valor := Copy(txtAux, 1, PosFin - 1);
if (valor <> '') then
begin
if campo = 'AÑO' then SetField(fieldYear, valor);
if campo = 'NACIONALIDAD' then SetField(fieldCountry, valor);
if campo = 'Director' then SetField(fieldDirector, valor);
if campo = 'Intérpretes' then SetField(fieldActors, valor);
if campo = 'DURACION' then Comentarios := Comentarios + 'Duración: ' + valor + #13#10;
if campo = 'Guión' then Comentarios := Comentarios + 'Guión: ' + valor + #13#10;
if campo = 'Fotografía' then Comentarios := Comentarios + 'Fotografía: ' + valor + #13#10;
if campo = 'Música' then Comentarios := Comentarios + 'Música: ' + valor + #13#10;
end;
//ShowMessage(campo + '-->' + valor);
end;
//Busca la imagen pequeña
txtTemp := '/cpp/albums/userpics/';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then NumeroImagen := NumeroImagen+1;
txtTemp := '/c/';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then NumeroImagen := NumeroImagen+1;
txtTemp := '/archivo/pelis/';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then NumeroImagen := NumeroImagen+1;
txtTemp := '/cartel/albums/';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then NumeroImagen := NumeroImagen+1;
txtTemp := '/galeria/data/';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then NumeroImagen := NumeroImagen+1;
//descripcion y comentarios
txtTemp := '';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
PosFin := pos(' | ', txtAux);
if PosFin = 0 then PosFin := Length(txtAux); //Por si no se encuentra
campo := Copy(txtAux, 1, PosFin - 1);
if campo <> '' then
begin
if Encontrado_descripcion >0 then
begin
If (GetOption('ObtenerComentarios') >0) then Comentarios := Comentarios + #13#10#13#10 + campo + #13#10;
end else
begin
SetField(fieldDescription, campo);
Encontrado_descripcion :=1;
end;
end;
end;
LineNr := LineNr + 1;
end;
HTMLDecode(Comentarios);
HTMLRemoveTags(Comentarios);
if Comentarios <> '' then SetField(fieldComments, Comentarios);
//Busqueda de imágenes
If ((NumeroImagen > 0) and CanSetPicture) then
If (GetOption('ObtenerImagen') = 0) then //permite seleccionar la imagen a traer
begin
PickTreeClear;
PickTreeAdd('Imagenes para "' + MovieName + '":', '');
If (NumeroImagen > 1) then PickTreeAdd('Página de referencia (Para "Ver página", no seleccionar)', Address);
LineNr := 0;
while (LineNr < Page.Count) do
begin
SubLine := Page.GetString(LineNr);
//Busca una imagen pequeña
txtTemp := '/cpp/albums/userpics/';
PosIni := pos(txtTemp, SubLine);
if PosIni = 0 then
begin
txtTemp := '/c/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni = 0 then
begin
txtTemp := '/archivo/pelis/';
PosIni := pos(txtTemp, SubLine);
end;
begin
txtTemp := '/cartel/albums/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni = 0 then
begin
txtTemp := '/galeria/data/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni, Length(SubLine));
PosFin := pos('" width="', txtAux);
campo := Copy(txtAux, 1, PosFin - 1);
PickTreeAdd('Pequeña', Base + campo);
end;
//Busca una imagen grande
txtTemp := 'pgrande.php?image_id=';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni, Length(SubLine));
PosFin := pos('" target=', txtAux);
campo := Copy(txtAux, 1, PosFin - 1);
ImagenURL := Base + 'paginas/' + campo;
PickTreeAdd('Grande', Base + AnalizaBigImagePage(ImagenURL));
end;
LineNr := LineNr +1;
end;
if PickTreeExec(Address) then GetPicture(Address);
end else
if (GetOption('ObtenerImagen') = 1) then
//selecciona automáticamente la primera imagen pequeña
begin
LineNr := 0;
while (LineNr < Page.Count) and (Encontrado_imagen = 0) do
begin
SubLine := Page.GetString(LineNr);
//Busca una imagen pequeña
txtTemp := '/cpp/albums/userpics/';
PosIni := pos(txtTemp, SubLine);
if PosIni = 0 then
begin
txtTemp := '/c/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni = 0 then
begin
txtTemp := '/archivo/pelis/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni = 0 then
begin
txtTemp := '/cartel/albums/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni = 0 then
begin
txtTemp := '/galeria/data/';
PosIni := pos(txtTemp, SubLine);
end;
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni, Length(SubLine));
PosFin := pos('" width="', txtAux);
campo := Copy(txtAux, 1, PosFin - 1);
GetPicture(UrlEncode(Base + campo));
Encontrado_imagen := 1;
end;
LineNr := LineNr +1;
end;
end else
if (GetOption('ObtenerImagen') = 2) then
//selecciona automáticamente la primera imagen grande
begin
LineNr := 0;
while (LineNr < Page.Count) and (Encontrado_imagen = 0) do
begin
SubLine := Page.GetString(LineNr);
//Busca una imagen pequeña
txtTemp := 'pgrande.php?image_id=';
PosIni := pos(txtTemp, SubLine);
if PosIni > 0 then
begin
txtAux := Copy(SubLine, PosIni, Length(SubLine));
PosFin := pos('" target=', txtAux);
campo := Copy(txtAux, 1, PosFin - 1);
ImagenURL := Base + 'paginas/' + campo;
GetPicture(Base + AnalizaBigImagePage(ImagenURL));
Encontrado_imagen := 1;
end;
LineNr := LineNr +1;
end;
end
Page.Free;
end;
// bmicmic: Bucle Principal
begin
if CheckVersion(3,5,0) then
begin
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
Input('Importar de ' + Base, 'Introduce el Titulo de la Pelicula:', MovieName);
AnalyzePage(BaseURL + UrlEncode(MovieName) + BaseURL2);
end else
ShowMessage('Este script necesita una versión superior de Ant Movie Catalog (al menos la version 3.5.0)');
end.