[REL][ES] Updated Carteles-Metropoli - actualización

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.
Post Reply
enriquevagu
Posts: 7
Joined: 2005-03-29 21:45:39

[REL][ES] Updated Carteles-Metropoli - actualización

Post by enriquevagu »

Hi,

I have updated the script for carteles-metropoli, to work with the new page format. The new script is below. I have also added some options to the script (you can select the image, or have it selected automatically, mainly). You might be interested in it, as the page contains many many movies, and very good covers.

Please substitute the previous file Carteles-Metropoli (ES).ifs with this, if micmic (the original author) agrees.

Buenas a todos,

He actualizado el script para Carteles-Metropoli, para que funcione con el nuevo formato de la página. El nuevo script está abajo. También he añadido algunas opciones al scrpipt (principalmente, selección de imagen, o que ésta se seleccione automáticamente). Posiblemente os interese probarlo, ya que la página contiene muchas películas con posters de muy buena calidad.

enriquevagu

Code: Select all


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

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 := '<td><a href="ficha.php?qsec=peli&qid=';
      PosIni := pos(txtTemp, SubLine);
      if PosIni > 0 then
      begin
        SubLine := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
        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 := '<td><a href="ficha.php?qsec=peli&qid=';
      PosIni := pos(txtTemp, SubLine);
      if PosIni > 0 then
      begin
        SubLine := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
       
        txtTemp := '">';
        PosFin := pos(txtTemp, SubLine);
        DirURL := Base + BaseURL3 + Copy(SubLine, 1, PosFin - 1);
       
        SubLine := Copy(SubLine, PosFin + Length(txtTemp), Length(SubLine));
        txtTemp := '</a>';
        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), '<br>', #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 := '<title>';
    txtTemp := '</span> <img src="imagenes/rating';
    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);
      if campo <> '' then SetField(fieldRating, campo);
    end;
   
    txtTemp := 'td colspan="2" valign="top"><span class="title">';
    PosIni := pos(txtTemp, SubLine);
    if PosIni > 0 then
    begin
      txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
      PosFin := pos('</span> <img', txtAux);
      campo := Copy(txtAux, 1, PosFin - 1);
      if campo <> '' 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. </td>';
          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 := '<span class="setperpageselect">';
    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('</td>', 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 := '<td colspan="2" valign="top">';
    PosIni := pos(txtTemp, SubLine);
    if PosIni > 0 then
    begin
      txtAux := Copy(SubLine, PosIni + Length(txtTemp), Length(SubLine));
      PosFin := pos('</td>', 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.
antp
Site Admin
Posts: 9630
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

thanks ;)
Post Reply