www.cinematografo.it, not function

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
stilegojo
Posts: 12
Joined: 2003-02-02 13:03:09

www.cinematografo.it, not function

Post by stilegojo »

Hello to all,

www.cinematografo.it, it has modernized the situated one and the script does not work more.

You could modify it?

Thanks
dinolib
Posts: 13
Joined: 2005-02-02 10:24:41
Location: Italy

Post by dinolib »

I've already send to Antp the script for v.3.5.0 fixed (tested yesterday night, I suppose it is still ok :)).
In the meanwhile he will publish it, here is whe code.
Let me know for ant problem.

bye
Dino

Code: Select all

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

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

[Infos]
Authors=2003 Andrea Cristaudo achris@tiscalinet.it; 2004 Stefano Mora stefano.mora@libero.it
Title=Cinematografo
Description=Get movie info from Cinematografo.it
Site=http://www.cinematografo.it
Language=IT
Version=1.02
Requires=3.5.0
Comments=Modified by Dino Librandi dinolib@libero.it (2005) for v 3.5.0;
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
GetInfo=1

[Options]

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

program Cinematografo;
var
  MovieName: string;
  TheMovieAddress: string;
  idx : integer;

const
  PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\LogsCinematogr\';
  MOVIE = 'leon';
  SITE = 'http://www.cinematografo.it';
  
// -- Formatta la stringa rendendola tutto minuscolo a parte la prima lettera
function PrimaMaiu(str: string): string;
begin
  str := AnsiLowerCase(str);
  Result := AnsiUpFirstLetter(str);
end;

// -- Formatta la stringa cercando le prime lettere rendendole maiuscole
function PrimeMaiu(str: string): string;
begin
  str := AnsiLowerCase(str);
  str := AnsiMixedCase(str, ' -/');
  Result := str;
end;

// ---

function RemoveTabs(Pattern: string): string;
begin
  while (Pattern<>'') and (ord(copy(Pattern, 1, 1)) = 9) do
    Delete(Pattern, 1, 1);

  result := Pattern;
end;

function Space2html(Url: string): string;
var
  Temp : string;
  SpacePos : Integer;
begin
  repeat
    SpacePos := pos(' ', Url);
    if SpacePos <> 0 then
      begin
        Temp := copy(Url, 1, SpacePos -1);
        Delete(Url, 1, SpacePos);
        Temp := Temp + '%20' + Url;
        Url := Temp;
      end;
  until pos(' ', Url) = 0;

  result := Url;
end;

// ---

function FillInput(Page: TStringList; LineNr: Integer; Salto: Integer; Field: Integer): Integer;
var
  Line: string;
begin
  LineNr := LineNr + Salto;

  // Sostituzione <BR>
  if (Field = fieldActors) or (Field=fieldDirector) then
  begin
    Line := StringReplace(Page.GetString(LineNr), '<BR>', ', ');
  end
  else
  begin
    if (Field = fieldCategory) or (Field = fieldCountry) then
    begin
      Line := StringReplace(Page.GetString(LineNr), '<BR>', '/');
    end
    else
    begin
      Line := StringReplace(Page.GetString(LineNr), '<BR>', #13#10);
    end;
  end;

  HTMLRemoveTags(Line);
  HTMLDecode(Line);
  Line := Trim(RemoveTabs(Line));
  
  // Correzione maiuscole/minuscole
  if Field = fieldActors then
    begin
    Line := StringReplace(Line, '      ', ' : ');
    Line := PrimeMaiu(Line);
    end
  else if (Field = fieldOriginalTitle) then
    begin
    Line := PrimaMaiu(Line);
    end
  else if (Field = fieldDirector) or (Field = fieldProducer) or (Field = fieldCountry) or (Field = fieldCategory) then Line := PrimeMaiu(Line);

  Line := StringReplace(Line, '  ', ' ');
  Line := StringReplace(Line, '  ', ' ');
  SetField(Field, Line);
  Result := LineNr;
end;

// ---

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

// ----

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: integer;
  BeginPos: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  idx := 0;

  // Debug
  //Page.SaveToFile(PATHLOG+MovieName+'.res0');
  //Page.LoadFromFile(PATHLOG+MOVIE+'.res0');

  LineNr := FindLine('DELLA RICERCA', Page, 0);
  if LineNr = -1 then
  begin
    LineNr := FindLine('Affina la tua ricerca', Page, 0);
    if LineNr = -1 then
    begin
      SetField(fieldURL, Address);
      AnalyzeMoviePage(Page);
    end
    else
      ShowMessage('Nessun film trovato');
  end
  else  // Trovati film !   Nota: possono esserci + pagine -> non gestito !
  begin
    // Crea la lista di film
    PickTreeClear;
    PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
    AddMoviesTitles(Page);
    if PickTreeExec(Address) then
      begin
        SetField(fieldURL, Address);    // Memorizza il campo URL
        Page.Text := GetPage(Address);  // Richiede la pagina del film
        AnalyzeMoviePage(Page);         // Analizza la pagina del film
      end;
  end;
  Page.Free;
end;

// ---

procedure AnalyzeMoviePage(Page: TStringList);
var
  Fine: Integer;
  Line: string;
  Line2: string;
  LineNr: Integer;
  BeginPos, EndPos: Integer;
  Field: integer;
begin

  //Debug
  //Page.SaveToFile(PATHLOG+MovieName+'.film');
  //Page.LoadFromFile(PATHLOG+MOVIE+'.film');

  Fine := 0;
  LineNr := FindLine('<font color="#ffffff">Titolo Film</font>', Page, 0);

  if LineNr > -1 then
  begin
    //Translated Title
    while Pos('<p align="left"><strong><font color="#ffffff" size="2">',Page.GetString(LineNr))=0 do
      LineNr:=LineNr+1;
    //LineNr := LineNr + 4;
    Line := Page.GetString(LineNr);
    HTMLRemoveTags(Line);
    Line := RemoveTabs(Line);
    SetField(fieldTranslatedTitle, PrimaMaiu(Line) );
    SetField(fieldOriginalTitle, PrimaMaiu(Line) );

    // Immagine
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
    if pos('<img border="0" src="', Line) <> 0 then
    begin
      BeginPos := pos('<img border="0" src="', Line);
      Delete(Line, 1, BeginPos + 20);
      EndPos := pos('" ', Line);
      Line := copy(Line, 1, EndPos - 1);
      Line := StringReplace(Line, ' ', '');

      Line := 'http://www.cinematografo.it/bdcm/' + Line;
      Line := Space2html(Line);
      GetPicture(Line);
      while (pos('</table>', Page.GetString(LineNr))=0) and
            (pos('</html>', Page.GetString(LineNr))=0) do
        LineNr := LineNr + 1;
    end
    repeat
      LineNr := LineNr + 1;
      Line := Page.GetString(LineNr);

      if pos('<font color="#ffffff">Anno</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldYear)
      else if pos('<font color="#ffffff">Titolo originale</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldOriginalTitle)
      else if pos('<font color="#ffffff">Durata</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldLength)
      else if pos('<font color="#ffffff">Origine</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldCountry)
      else if pos('<font color="#ffffff">Genere</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldCategory)
      else if pos('<font color="#ffffff">Produzione</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldProducer)
      else if pos('<font color="#ffffff">Regia</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldDirector)
      else if pos('<font color="#ffffff">Trama</font>', Line) <> 0 then
        begin
        LineNr := LineNr+3;
        Line := Page.GetString(LineNr);
        HTMLRemoveTags(Line);
        Line := Trim(RemoveTabs(Line));
        LineNr := LineNr+1;
        if Left(Line, 6)='TRAMA ' then  // Trama breve e lunga su + righe
          begin
          Line := Page.GetString(LineNr); // Tengo la trama breve
          LineNr := LineNr+1;
          end

        Line2 := Page.GetString(LineNr);  // Event. seconda riga
        HTMLRemoveTags(Line2);
        if trim(Line2)<> '' then Line := Line + Line2;

        SetField(fieldDescription, Line);
        end
      else if pos('<font color="#ffffff">Critica</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldComments)
      else if pos('<font color="#ffffff">Attori</font>', Line) <> 0 then
        LineNr := FillInput(Page, LineNr, 3, fieldActors)
      else if pos('<img align="right" border="0"', Line) <> 0 then
        begin
          BeginPos := pos('<img align="right" border="0" src="', Line);
          Delete(Line, 1, BeginPos + 35);
          EndPos := pos('">', Line);
          Line := copy(Line, 1, EndPos - 1);
          Line := 'http://www.cinematografo.it/' + Line;
          Line := Space2html(Line);
          GetPicture(Line);
        end
      else if pos('</table>', Line) <> 0 then
        Fine := 1;

    until Fine = 1;
  end;
  
  //DisplayResults;
end;

// ---
// Riempie la lista con i film trovati

procedure AddMoviesTitles(Page: TStringList);

var
  LineNr: Integer;
  Line: string;
  MovieTitle, MovieAddress: string;
  BeginPos, EndPos: Integer;
  Pagina: TStringList;

begin
  TheMovieAddress := '*';
  LineNr := 0;

  LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr);
  while LineNr > -1 do
  begin
    Line := Page.GetString(LineNr);

    BeginPos := pos('<a href="',Line)+9;  // Punta all'inizio url
    Delete(Line, 1, BeginPos-1);          // Cancella tutti i char precedenti
    
    BeginPos := 1;            // Nuovo inizio
    EndPos := pos('">',Line); // Fine url

    // Crea l'url per il film
    MovieAddress := SITE + '/bdcm/' + copy(Line,BeginPos,EndPos-BeginPos);
    
    // Riga successiva = titolo trovato
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    MovieTitle := AnsiUpFirstLetter(Line);
    // Ripulisce il titolo
    HTMLRemoveTags(MovieTitle);
    HTMLDecode(MovieTitle);
    MovieTitle := RemoveTabs(MovieTitle);

    // Cerca l'anno del film
    LineNr := LineNr + 3;
    Line := Page.GetString(LineNr);
    HTMLRemoveTags(Line);
    Line := RemoveTabs(Line);
    Line := StringReplace( Line, ' ', '');
    Line := StringReplace( Line, '-', '');

    // Costruisce la riga con titolo + anno e mette in lista
    MovieTitle := MovieTitle + ' (' + Line + ')';
    PickTreeAdd(MovieTitle, MovieAddress);
    
    // Prossimo film in lista ...
    LineNr := FindLine('<a href="bancadati_scheda.asp?sch=',Page,LineNr+1);

  end;  // while
  
  // Controlla se ci sono altre pagine di risultati
  LineNr := FindLine('Succ.',Page,LineNr);
  if LineNr<>-1 then
    begin
    idx := idx+1;
    // PickTreeAdd('Ci sono altre pagine ...'+IntToStr(idx), '');
    // LineNr := FindLine('Succ.',Page,LineNr);
    
    Line := Page.GetString(LineNr);
    // Estrae l'URL della pagina successiva
    BeginPos := pos('href="', Line)+6;
    EndPos := pos('">', Line);
    Line := SITE + copy(Line, BeginPos, endPos-BeginPos);
    // Richiama la pagina successiva e la analizza
    Pagina := TStringList.Create;
    Pagina.Text := GetPage(Line);

    // Debug
    //Page.SaveToFile(PATHLOG+MovieName+'.res'+IntToStr(idx));
    //Page.LoadFromFile(PATHLOG+MOVIE+'.res');

    AddMoviesTitles(Pagina);
    Pagina.Free;
    end;
end;


// ----- main()

Var
  TempVar: String;
begin
  if CheckVersion(3,5,0) then
  begin
    MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      MovieName := GetField(fieldTranslatedTitle);
    if Input('Cinematografo.it', 'Inserire il nome del film:', MovieName) then
    begin
      TempVar := 'http://www.cinematografo.it/bdcm/bancadati_query.asp?fi='+UrlEncode(MovieName)+'&R1=TI&image1.x=24&image1.y=24';
      analyzepage(TempVar);
    end;
  end else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.
Guest

Post by Guest »

Non funziona :cry:
Guest

Post by Guest »

E poi la versione 3.5.0 non è uscita !!! Come faccio a farlo funzionare????
dinolib
Posts: 13
Joined: 2005-02-02 10:24:41
Location: Italy

Post by dinolib »

Per farlo funzionare devi rimettere la vecchia intestazione (quella compresa fra (* e *) all'inizio dello script.
Poi dove trovi la funzione GetPicture prima della chiusura della parentesi ) aggiungere ,false
Infine mettere la chiamata a DisplayResults nel punto in cui era nella precedente versione.

La nuova versione comunque funziona abbastanza bene e la trovi nella sezione download dove si parla di beta version. Segui il link. C'è un archivio da scompattare. Vedrai che funziona. Ci sono anche gli scrip in italiano e la traduzione del programma aggiornata.

ciao,
Dino
stilegojo
Posts: 12
Joined: 2003-02-02 13:03:09

Post by stilegojo »

Grazie Dino !

Sei un grande :-)

Funziona tutto benissimo


Grazie mille a nome di tutti quelli che usano Cinematografo
Guest

Post by Guest »

Grazie Dino !!!
Infatti mi ero messo a spunciare un po' lo script e facendo qualche tentativo ero riuscito a metterlo a posto !!!
Avevo fatto proprio queste modifiche :-)
Per la versione Beta preferisco aspettare... !!!
Ma in che linguaggio è scritto lo script? VB?
dinolib
Posts: 13
Joined: 2005-02-02 10:24:41
Location: Italy

Post by dinolib »

Ant è scritto in Delphi 7: Pascal ad oggetti.
Gli script in "script Pascal". Versione semplificata del linguaggio.

Ciao,Dino
Guest

Post by Guest »

Grazie Dino,
gentilissimo !!!!
Alla prossima.
;)
Post Reply