Page 1 of 1

[REL] [ITA] SediciFilm.it

Posted: 2008-08-28 08:43:38
by lucamark
Hi guys, here is the script to get movie info from http://www.sedicifilm.it/.
As usual, i've tested with a few movie, so if you find bug/errors let me know!!

Code: Select all

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

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

[Infos]
Authors=Gigibop (luca.marcato@gmail.com)
Title=SediciFilm
Description=Get movie info from http://www.sedicifilm.it
Site=http://www.sedicifilm.it
Language=IT
Version=1.0 - 28.08.2008
Requires=3.5.0
Comments=Changes|28.08.2008 v. 1.0.0: First version (Gigibop)||
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 SediciFilm;
uses
  StringUtils1;

var
  MovieName: string;
  TheMovieAddress: string;
  comm: String;

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: integer;
  BeginPos: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  LineNr := FindLine('<br><h2>Film</h2><br>', Page, 0);
  if LineNr = -1 then
  begin
    SetField(fieldURL, Address);
    AnalyzeMoviePage(Page);
  end
  else
  begin
    PickTreeClear;
    AddMoviesTitles(Page);
    if TheMovieAddress='' then
    begin
      if PickTreeExec(Address) then AnalyzePage(Address);
    end
    else
    begin
      SetField(fieldURL, TheMovieAddress);
      Page.Text := GetPage(TheMovieAddress);
      AnalyzeMoviePage(Page);
    end;
  end;
  Page.Free;
end;

function RemoveTabs(Pattern: string): string;
begin
  repeat
  Delete(Pattern, 1, 1);
  until ord(copy(Pattern, 1, 1)) <> 9;
  result := Pattern;
end;

function TranslateSpecial(str1: string) :string;
begin

	str1 := StringReplace(str1, '&', '&');
	HTMLDecode(str1);
	result := Trim(str1);
end;

procedure AnalyzeMoviePage(Page: TStringList);
var
  Line, PreviousLine, NomeHtml, Actors,Category, sTemp: string;
  LineNr,PrevLineNr, BeginPos, EndPos, Field: Integer;
  BeginLine: integer;
  EndLine: integer;
  i: integer;
  Languages: string;
  IsMainActors: boolean;
begin
  IsMainActors := false;
  sTemp := '';

  //	cerco il titolo tradotto e il titolo originale
  LineNr := FindLine('<div class="boxhome">', Page, 0);
  if LineNr > -1 then
    begin

    //Titolo tradotto
    LineNr:= LineNr + 1;
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    Line := AnsiLowerCase(Line);
    Line := AnsiUpFirstLetter(Line);

    SetField(fieldTranslatedTitle, Line);
    SetField(fieldOriginalTitle, Line);

    end;

  //Regia
  LineNr := FindLine('<b>Regia:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldDirector,Line);
    end;

  LineNr := 0;

  //    Cast
  LineNr := FindLine('<b>Cast:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldActors,Line);
    end;

  LineNr := 0;

  //    Genere
  LineNr := FindLine('<b>Genere:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldCategory,Line);
    end;

  LineNr := 0;

  //  anno di uscita
  LineNr := FindLine('<b>Anno:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldYear,Line);
    end;

  LineNr := 0;


  //  durata
  LineNr := FindLine('<b>Durata:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);

      Line := StringReplace(Line, '''', ' ');
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldLength,Line);
    end;

  // descrizione

  Languages := '';

  LineNr := FindLine('<b>Trama:', Page, 0);
  if LineNr > -1 then
  begin

    BeginLine := LineNr + 1;

    EndLine := FindLine('<b>Genere:', Page, BeginLine) -1 ;
    for i:= BeginLine+1 to EndLine-1 do
    begin
      Line := Page.GetString(i);
      HTMLRemoveTags(Line);
      Line := Copy(Line,2,Length(Line));
      Line := TranslateSpecial(Line);
      Languages := Languages + ' ' + Line;
    end;
    Languages := Trim(Languages);
    SetField(fieldDescription, Languages);
  end

  //  locandina del film
  LineNr := FindLine('img alt="LOCANDINA:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'src="');
    Line := TextBefore(Line, '">','');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    GetPicture(Line);
  end;
end;

procedure AddMoviesTitles(Page: TStringList);
var
  LineNr,EndLine: Integer;
  Line: string;
  MovieTitle, MovieAddress: string;
  BeginPos, EndPos: Integer;
  begin
  LineNr := 0;
  LineNr := FindLine('<tr><td align=''left'' class=corpo colspan=2>',Page,LineNr);
  EndLine := FindLine('<br><h2>Videogiochi</h2><br>',Page,0);
  if EndLine = -1 then EndLine := 999999;
  
while ((LineNr > -1) and (LineNr <= EndLine)) do
  begin

    Line := Page.GetString(LineNr);
    MovieAddress := 'http://www.sedicifilm.it/scheda_dvd.php/' + TextBetween(Line, 'scheda_dvd.php/', '/''>') ;

    HTMLRemoveTags(Line);
    MovieTitle := Line;
    HTMLDecode(Movietitle);

    Movietitle := AnsiLowerCase(Movietitle);
    Movietitle := AnsiUpFirstLetter(Movietitle);

    LineNr := FindLine('<tr><td align=''left'' class=corpo colspan=2>',Page,LineNr+1);
    PickTreeAdd(MovieTitle, MovieAddress);
    if TheMovieAddress='*' then
      TheMovieAddress := MovieAddress
    else
      TheMovieAddress := '';
  end;

  LineNr := FindLine('?page=1&genere=',Page,LineNr);
  Line := Page.GetString(LineNr);
  BeginPos := pos('href=',Line);
  if BeginPos>0 then
  begin
  
    Line := TextBetween(Line, 'a href=''', '>');
    Line := Copy(Line,1,Length(Line) -1);
    MovieAddress := 'http://www.sedicifilm.it/catalogo.php' + Line;
    
    //Delete(Line,1,BeginPos + 5);
    //EndPos := pos('"',Line);
    //MovieAddress := copy(Line,1,EndPos-1);
    PickTreeMoreLink(MovieAddress);
  end;
  if TheMovieAddress='*' then TheMovieAddress := '';
end;


// Main Script

begin
  if CheckVersion(3,5,0) then
   begin
    TheMovieAddress := '*';
    MovieName := StringReplace(GetField(fieldTranslatedTitle), '.', ' ');
    if MovieName = '' then
      MovieName := StringReplace(GetField(fieldOriginalTitle), '.', ' ');
While pos ('[', MovieName) > 0 Do begin
  MovieName := TextBefore(MovieName, '[', '') + TextAfter(MovieName, ']');
end;
    if Input('SediciFilm Importazione Film', 'Digitare il titolo del film:', MovieName) then
    begin

      AnalyzePage('http://www.sedicifilm.it/catalogo.php?cat=&q='+UrlEncode(MovieName));
    end;
   end
  else
    ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.5.0)');
end.
:grinking: !!!

Fix random "Out of Range" error:

Posted: 2008-09-12 08:25:29
by lucamark
Fix random "Out of Range" error:

Code: Select all

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

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

[Infos]
Authors=Gigibop (luca.marcato@gmail.com)
Title=SediciFilm
Description=Get movie info from http://www.sedicifilm.it
Site=http://www.sedicifilm.it
Language=IT
Version=1.0.1 - 08.09.2008
Requires=3.5.0
Comments=Changes|28.08.2008 v. 1.0.0: First version (Gigibop)|08.09.2008 v. 1.0.1: Fix random "Out of Range" in RemoveTabs (Gigibop)
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 SediciFilm;
uses
  StringUtils1;

var
  MovieName: string;
  TheMovieAddress: string;
  comm: String;

function RemoveTabs(Value : string) : String;
begin
  repeat
      Value:= StringReplace(Value, '	', '');
  until (pos('	',Value) = 0);
  result := Value;
end;

function TranslateSpecial(str1: string) :string;
begin

   str1 := StringReplace(str1, '&', '&');
   HTMLDecode(str1);
   result := Trim(str1);
end;

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: integer;
  BeginPos: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  LineNr := FindLine('<br><h2>Film</h2><br>', Page, 0);
  if LineNr = -1 then
  begin
    SetField(fieldURL, Address);
    AnalyzeMoviePage(Page);
  end
  else
  begin
    PickTreeClear;
    AddMoviesTitles(Page);
    if TheMovieAddress='' then
    begin
      if PickTreeExec(Address) then AnalyzePage(Address);
    end
    else
    begin
      SetField(fieldURL, TheMovieAddress);
      Page.Text := GetPage(TheMovieAddress);
      AnalyzeMoviePage(Page);
    end;
  end;
  Page.Free;
end;

procedure AnalyzeMoviePage(Page: TStringList);
var
  Line, PreviousLine, NomeHtml, Actors,Category, sTemp: string;
  LineNr,PrevLineNr, BeginPos, EndPos, Field: Integer;
  BeginLine: integer;
  EndLine: integer;
  i: integer;
  Languages: string;
  IsMainActors: boolean;
begin
  IsMainActors := false;
  sTemp := '';

  //   cerco il titolo tradotto e il titolo originale
  LineNr := FindLine('<div class="boxhome">', Page, 0);
  if LineNr > -1 then
    begin

    //Titolo tradotto
    LineNr:= LineNr + 1;
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    Line := AnsiLowerCase(Line);
    Line := AnsiUpFirstLetter(Line);

    SetField(fieldTranslatedTitle, Line);
    SetField(fieldOriginalTitle, Line);

    end;

  //Regia
  LineNr := FindLine('<b>Regia:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldDirector,Line);
    end;

  LineNr := 0;

  //    Cast
  LineNr := FindLine('<b>Cast:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldActors,Line);
    end;

  LineNr := 0;

  //    Genere
  LineNr := FindLine('<b>Genere:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldCategory,Line);
    end;

  LineNr := 0;

  //  anno di uscita
  LineNr := FindLine('<b>Anno:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldYear,Line);
    end;

  LineNr := 0;


  //  durata
  LineNr := FindLine('<b>Durata:', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 2);

      Line := StringReplace(Line, '''', ' ');
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldLength,Line);
    end;

  // descrizione

  Languages := '';

  LineNr := FindLine('<b>Trama:', Page, 0);
  if LineNr > -1 then
  begin

    BeginLine := LineNr + 1;

    EndLine := FindLine('<b>Genere:', Page, BeginLine) -1 ;
    for i:= BeginLine+1 to EndLine-1 do
    begin
      Line := Page.GetString(i);
      HTMLRemoveTags(Line);
      Line := Copy(Line,2,Length(Line));
      Line := TranslateSpecial(Line);
      Languages := Languages + ' ' + Line;
    end;
    Languages := Trim(Languages);
    SetField(fieldDescription, Languages);
  end

  //  locandina del film
  LineNr := FindLine('img alt="LOCANDINA:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'src="');
    Line := TextBefore(Line, '">','');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    GetPicture(Line);
  end;
end;

procedure AddMoviesTitles(Page: TStringList);
var
  LineNr,EndLine: Integer;
  Line: string;
  MovieTitle, MovieAddress: string;
  BeginPos, EndPos: Integer;
  begin
  LineNr := 0;
  LineNr := FindLine('<tr><td align=''left'' class=corpo colspan=2>',Page,LineNr);
  EndLine := FindLine('<br><h2>Videogiochi</h2><br>',Page,0);
  if EndLine = -1 then EndLine := 999999;
 
while ((LineNr > -1) and (LineNr <= EndLine)) do
  begin

    Line := Page.GetString(LineNr);
    MovieAddress := 'http://www.sedicifilm.it/scheda_dvd.php/' + TextBetween(Line, 'scheda_dvd.php/', '/''>') ;

    HTMLRemoveTags(Line);
    MovieTitle := Line;
    HTMLDecode(Movietitle);

    Movietitle := AnsiLowerCase(Movietitle);
    Movietitle := AnsiUpFirstLetter(Movietitle);

    LineNr := FindLine('<tr><td align=''left'' class=corpo colspan=2>',Page,LineNr+1);
    PickTreeAdd(MovieTitle, MovieAddress);
    if TheMovieAddress='*' then
      TheMovieAddress := MovieAddress
    else
      TheMovieAddress := '';
  end;

  LineNr := FindLine('?page=1&genere=',Page,LineNr);
  Line := Page.GetString(LineNr);
  BeginPos := pos('href=',Line);
  if BeginPos>0 then
  begin
 
    Line := TextBetween(Line, 'a href=''', '>');
    Line := Copy(Line,1,Length(Line) -1);
    MovieAddress := 'http://www.sedicifilm.it/catalogo.php' + Line;
   
    //Delete(Line,1,BeginPos + 5);
    //EndPos := pos('"',Line);
    //MovieAddress := copy(Line,1,EndPos-1);
    PickTreeMoreLink(MovieAddress);
  end;
  if TheMovieAddress='*' then TheMovieAddress := '';
end;


// Main Script

begin
  if CheckVersion(3,5,0) then
   begin
    TheMovieAddress := '*';
    MovieName := StringReplace(GetField(fieldTranslatedTitle), '.', ' ');
    if MovieName = '' then
      MovieName := StringReplace(GetField(fieldOriginalTitle), '.', ' ');
While pos ('[', MovieName) > 0 Do begin
  MovieName := TextBefore(MovieName, '[', '') + TextAfter(MovieName, ']');
end;
    if Input('SediciFilm Importazione Film', 'Digitare il titolo del film:', MovieName) then
    begin

      AnalyzePage('http://www.sedicifilm.it/catalogo.php?cat=&q='+UrlEncode(MovieName));
    end;
   end
  else
    ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.5.0)');
end.

Cheers!!!