[REL] [ITA] www.musicafilm.it

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
lucamark
Posts: 19
Joined: 2008-01-23 10:25:29
Contact:

[REL] [ITA] www.musicafilm.it

Post by lucamark »

Here is the script for http://www.musicafilm.it/. I've tested with few movie..
But i'd like to know for bugs/improvements...

Code: Select all

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

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

[Infos]
Authors=lucchetta ads
Title=MusicaFilm
Description=Ottiene le informazioni sui film da http://www.musicafilm.it
Site=http://www.musicafilm.it
Language=IT
Version=1.0.3 - 20.01.2008
Requires=3.5.0
Comments=Changes|20.01.2008 v. 1.0.1: aggiunto puntatore alla funzione PickTreeMoreLink (lucchetta ads)|21.01.2008 v. 1.0.2: aggiunti lingue audio e sottotitoli (lucchetta ads)|22.01.2008 v. 1.0.3: aggiunta la versione del film nella ricerca dei titoli (lucchetta ads)
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 MusicaFilm;
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('<H3>DVD Film trovati</H3>', 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 ID="InPageTitle">', Page, 0);
  if LineNr > -1 then
    begin

      //Titolo tradotto
      LineNr:= LineNr + 1;
      Line := Page.GetString(LineNr);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldTranslatedTitle, Line);

      //Titolo originale
      LineNr:= LineNr + 1;
      Line := Page.GetString(LineNr);
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldOriginalTitle, Line);
    end;

  (*Regia *)
  LineNr := FindLine('- Regista</LI>', Page, 0);

  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      Line := TextBefore(Line, ' - Regista</LI>', '');
      Line := RemoveTabs(Line);
      HTMLRemoveTags(Line);
      Line := TranslateSpecial(Line);
      SetField(fieldDirector,Line);
    end;

  LineNr := 0;
  
  //	attori... e qui si balla!!! :-)
  While LineNr <> -1 Do
    Begin

    LineNr :=	FindLine('<A CLASS="Actor"', Page, LineNr);
    If LineNR = -1 Then
      begin
        Break;
      end
    else
      begin
      Line := Page.GetString(LineNr);
      HTMLRemoveTags(Line);
      Line := RemoveTabs(Line);
      Line := TranslateSpecial(Line);
      Line := StringReplace(Line, '- ', '(') + ')';
      Actors:= Actors + ', ' + Line;
    end;

    LineNr:= LineNr +1;
  end;

  Actors := Copy(Actors, 3, Length(Actors));
  SetField(fieldActors,Actors);

  //  casa produttrice
  LineNr := FindLine('<H3>Etichette</H3>', Page, 0);

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

  //  genere
  LineNr := 0;
  While LineNr <> -1 Do
  Begin

    LineNr :=	FindLine('<A CLASS="DVDMovieGenre"', Page, LineNr);
    If LineNR = -1 Then
    begin
      Break;
    end
    else
      begin
        Line := Page.GetString(LineNr);
        HTMLRemoveTags(Line);
        Line := RemoveTabs(Line);
        Line := TranslateSpecial(Line);
        Category:= Category + ', ' + Line;
    end;
    LineNr:= LineNr +1;
  end;

  Category := Copy(Category, 3, Length(Category));
  SetField(fieldCategory,Category);

  //  anno di uscita
  LineNr := FindLine('<LI><SPAN CLASS="Label">Anno di uscita:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'Anno di uscita:');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    SetField(fieldYear,Line);
  end;

  //  durata
  LineNr := FindLine('<LI><SPAN CLASS="Label">Durata:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'Durata:');
    Line := TextBefore(Line, 'min','');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    SetField(fieldLength,Line);
  end;

  // numero di dischi
  LineNr := FindLine('<LI><SPAN CLASS="Label">Numero dischi:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'Numero dischi:');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    SetField(fieldDisks,Line);
  end;

  // descrizione
  LineNr := FindLine('<DIV ID="Plot">', Page, 0);

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

  //  locandina del film
  LineNr := FindLine('<DIV ID="ProductPreview">', 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;

  // formato video
  LineNr := FindLine('<LI><SPAN CLASS="Label">Formati video:', Page, 0);

  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Line := RemoveTabs(Line);
    Line := TextAfter(Line, 'Formati video:');
    HTMLRemoveTags(Line);
    Line := TranslateSpecial(Line);
    SetField(fieldVideoFormat,Line);
  end;
  
  //  tracce audio
  LineNr := FindLine('<H3>Tracce audio</H3>', Page, 0);
  if LineNr > -1 then
  begin
    BeginLine := FindLine('<UL>', Page, LineNr);

    EndLine := FindLine('</UL>', Page, BeginLine);
    for i:= BeginLine+1 to EndLine-1 do
    begin
      Line := Page.GetString(i);
      Line := StringReplace(Line, '<br>', #13#10);
      Line := StringReplace(Line, #13#10#32, #13#10);
      HTMLRemoveTags(Line);
      Line := RemoveTabs(Line);
      Line := TranslateSpecial(Line);
      Languages := Languages + ', ' + Line;
    end;

    Languages := Copy(Languages, 3, Length(Languages));
    SetField(fieldLanguages, Languages);
  end

  // sottotitoli
  Languages :='';
  
  LineNr := FindLine('<H3>Sottotitoli</H3>', Page, 0);
  if LineNr > -1 then
  begin
    BeginLine := FindLine('<UL>', Page, LineNr);
    EndLine := FindLine('</UL>', Page, BeginLine);
    for i:= BeginLine+1 to EndLine-1 do
    begin
      Line := Page.GetString(i);
      Line := StringReplace(Line, '<br>', #13#10);
      Line := StringReplace(Line, #13#10#32, #13#10);
      HTMLRemoveTags(Line);
      Line := RemoveTabs(Line);
      Line := TranslateSpecial(Line);
      Languages := Languages + ', ' + Line;
    end;

    Languages := Copy(Languages, 3, Length(Languages));
    SetField(fieldSubtitles, Languages);
  end;

end;

procedure AddMoviesTitles(Page: TStringList);
var
  LineNr: Integer;
  Line: string;
  MovieTitle, MovieAddress, Description: string;
  BeginPos, EndPos: Integer;
  begin
  LineNr := 0;
  LineNr := FindLine('<DIV CLASS="description"><A CLASS="ProductDVDMovie" TITLE="',Page,LineNr);
while LineNr > -1 do
  begin
    MovieAddress := 'http://www.musicafilm.it/dvd-film/' + TextBetween((Page.GetString(LineNr)), 'HREF="/dvd-film/', '.') + '.html';
    Line := Page.GetString(LineNr);
    MovieTitle := TextAfter(Page.GetString(LineNr), 'html">');
    MovieTitle := TextBefore(MovieTitle, '</A>', '');
    Description := TextBefore(Line, '<DEL>', '</A>');
    if Description = '' then Description := TextBefore(Line, 'Non disponibile', '</A>');
    
    HTMLRemoveTags(Description);
    MovieTitle := MovieTitle + ' (' + Description + ')';

      
    HTMLRemoveTags(MovieTitle);
    HTMLDecode(Movietitle);
    LineNr := FindLine('<DIV CLASS="description"><A CLASS="ProductDVDMovie" TITLE="',Page,LineNr+1);
    PickTreeAdd(MovieTitle, MovieAddress);
    if TheMovieAddress='*' then
      TheMovieAddress := MovieAddress
    else
      TheMovieAddress := '';
  end;
  
  LineNr := FindLine('Pagine dei risultati:',Page,LineNr);
  Line := Page.GetString(LineNr);
  BeginPos := pos('HREF',Line);
  if BeginPos>0 then
  begin
    Delete(Line,1,BeginPos + 5);
    EndPos := pos('"',Line);
    MovieAddress := copy(Line,1,EndPos-1);
    PickTreeMoreLink(MovieAddress);
  end;
  if TheMovieAddress='*' then TheMovieAddress := '';
end;

// -----------------------------
// Questo è il main dello 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('MusicaFilm Importazione Film', 'Digitare il titolo del film:', MovieName) then
    begin
  
      AnalyzePage('http://www.musicafilm.it/ricerca/dvd-film/avanzata/?item_title='+UrlEncode(MovieName)+'&producer_name=&producer_surname=&director_name=&director_surname=&actor1_name=&actor1_surname=&actor2_name=&actor2_surname=&actor3_name=&actor3_surname=&character=&genre1=-1&genre2=-1&genre3=-1&audiotrack1=-1&audiotrack2=-1&audiotrack3=-1&series=&production_year=&release_year=&label=');
    end;
   end
  else
    ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.5.0)');
end.


Best regards! and ... sorry for my English!!! :ha:
antp
Site Admin
Posts: 9639
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks.
Post Reply