[REL ITA] Filmup

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
fulvio53s03
Posts: 744
Joined: 2007-04-28 05:46:43
Location: Italy

[REL ITA] Filmup

Post by fulvio53s03 »

Code: Select all

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

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

[Infos]
Authors=L. Francisco, Pivello, Zandal, Fulvio53s03
Title=FilmUP
Description=Get movie info from Leonardo.FilmUP.it and shows years in picklist (Fulvio53s03)
Site=http://filmup.leonardo.it
Language=IT
Version=1.0.7 - 12.06.2011
Requires=3.5.0
Comments=**Changes**|Pivello: query URL changed|Zandal:  sistemato puntamento a COMMENTS|Pivello: Film site URL selectable instead of FilmUp page
License=
GetInfo=1

[Options]
AlternateURL=0|0|0=Use the FilmUP web site for FieldURL|1=Try to use ufficial movie web site for FieldURL
MezzoVoto=1|1|0=Integer Ratings|1=Ratings with ,5
ActorsPlusCast=0|0|0=Get Main Actors data (if present) otherwise get Cast field|1=Get Main Actors data (if present) and Cast data
TrailerURL=0|0|0=Normal URL page|1=Trailer URL page (if found)
Poster=1|0|1=Download full-res Poster|0=Download tiny Poster

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

program LeonardoFilmUP;
uses
  StringUtils7552;

var
  MovieName, MovieToSearch, MovieTitle: string;
  Pagina_Ricerca, TheMovieAddress, Pagestr: string;
  comm: String;
  lgth_title: integer;

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: integer;
  BeginPos: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  Pagestr := Page.Text;
  SetField(fieldURL, Address);
  LineNr := FindLine('Ordina risultati per', Page, 0);
  if LineNr = -1 then
  begin
    SetField(fieldURL, Address);
//fulvio
    AnalyzeMoviePage(Page);
  end
  else
  begin
    PickTreeClear;
    AddMoviesTitles;
    if TheMovieAddress='' then
    begin
      if PickTreeExec(Address) then AnalyzePage(Address);
    end
    else
    begin
      SetField(fieldURL, TheMovieAddress);
      Page.Text := GetPage(TheMovieAddress);
      Pagestr := Page.Text;
      AnalyzeMoviePage(Page);
    end;
  end;
  Page.Free;
end;

procedure AnalyzeMoviePage(Page: TStringList);
var
  Line, PreviousLine, NomeHtml, sTemp: string;
  AddrImage: string;
  LineNr,PrevLineNr, BeginPos, EndPos, Field: Integer;
  IsMainActors: boolean;
begin
  IsMainActors := false;
  sTemp := '';
//  SetField(fieldURL, Address);
  LineNr := FindLine('<font face="arial, helvetica" size="3"><b>', Page, 0);
  if LineNr > -1 then
  begin
   SetField(fieldDate, DateToStr(Date));
    //Translated Title
    Line := Page.GetString(LineNr);
    HTMLRemoveTags(Line);
    SetField(fieldTranslatedTitle, Line);

    repeat
      //Look for next info
      repeat
        LineNr := LineNr + 1;
        Line := Page.GetString(LineNr);
        HTMLRemoveTags(Line);
      until (Line<>'')  or (LineNr > Page.Count);

      // Test if 'Trama:' missing
      if ((PreviousLine = 'Data di uscita: ')
      or  (PreviousLine = 'Uscita prevista: ')) and (Line <> 'Trama:') then
        if (copy(Line,1,6)<>'Trama:') then
          Line := 'Trama:' + Line;
      PreviousLine := Line;

      //Look for type of line
      if Line = 'Titolo originale: ' then
        Field := fieldOriginalTitle
      else if Line = 'Regia: ' then
        Field := fieldDirector
      else if Line = 'Produzione: ' then
        Field := fieldProducer
      else if Line = 'Nazione: ' then
        Field := fieldCountry
      else if Line = 'Genere: ' then
        Field := fieldCategory
      else if Line = 'Anno: ' then
        Field := fieldYear
      else if Line = 'Durata: ' then
        Field := fieldLength //Special case: get number only
      else if Line = 'Sito ufficiale: ' then
        Field := fieldURL
      else if Line = 'Attori protagonisti: ' then
      begin
        Field := fieldActors;
        IsMainActors := true;
      end
      else if Line = 'Cast: ' then
        Field := fieldActors
      else if Line = 'Trama:' then
        begin
        Field := fieldDescription
        end
      else
        Field := 0;

      // I have to add this test, for sometimes the description
      // is on the same line as the tag 'Trama'
      if (copy(Line,1,6)='Trama:') and (length(Line)>6) then
         begin
         Field := fieldDescription;
         Line := Textbetween(Pagestr, 'Trama:<br>', '</font>');
//fs        Delete(Line,1,6);
        HTMLRemoveTags(Line);
        HTMLDecode(Line);
       end
      else
       begin
        //Get values
        LineNr := LineNr + 1;
        Line := Page.GetString(LineNr);
        HTMLRemoveTags(Line);
        HTMLDecode(Line);

        //Special case: Length
        if Field = fieldLength then Line := copy(Line,1,length(Line)-1);
       end;

       //Alternative URL case
       if (field = fieldURL) then
       begin
         if (Length(Line) = 0) or (GetOption('AlternateURL')=0) then      // if WEB url missing or explicitly requested...
           Line := GetField(fieldURL)  // ...restore FilmUp URL
         else
           Line := 'http://'+Line;
       end;

      if Field<>0 then
      begin
       if Field = fieldActors then
       begin
         if IsMainActors then // Remember Main Actors (if present)
         begin
           sTemp := Line;
           IsMainActors := false;
         end
         else
         begin
           if ((GetOption('ActorsPlusCast')=1) and (sTemp<>'')) then
             Line := sTemp + ' Cast: ' + Line
           else
             if sTemp <> '' then
               Line := sTemp;
           SetField(Field,Line);
         end;
       end
       else
         SetField(Field,Line);
      end;

    until (Field=fieldDescription) or (LineNr > Page.Count);
  end;

  PrevLineNr := LineNr;

   //Trailer
if GetOption('TrailerURL')=1 then begin
LineNr := FindLine('">Trailer</a>', Page, PrevLineNr);
  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    if Pos('size="2"><a', Line) <> 0 then Delete(Line,1,pos('size="2"><a',Line));
    //if Pos('DVD', Line) <> 0 then Delete(Line,1,pos('DVD',Line));
    Delete(Line,1,pos('href="',Line)+5);
    NomeHtml := Copy(Line,1,pos('"',Line)-1);
    if (copy(NomeHtml,1,1)<>'/') then
    begin
      NomeHtml := '/' + NomeHtml;
    end;
    NomeHtml :='http://filmup.leonardo.it' + NomeHtml;
    comm := textbetween(GetPage(NomeHtml),'<EMBED SRC="','"');
//HTMLRemoveTags(comm);
//Fulvio  SetField(fieldURL,comm);
    PrevLineNr := LineNr;
  end;
end;

  //Comments
  LineNr := FindLine('">Recensione</a>', Page, PrevLineNr);
  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    if Pos('Scheda', Line) <> 0 then Delete(Line,1,pos('Scheda',Line));
    if Pos('DVD', Line) <> 0 then Delete(Line,1,pos('DVD',Line));
    Delete(Line,1,pos('href="',Line)+5);
    NomeHtml :=Copy(Line,1,pos('"',Line)-1);
    if (copy(NomeHtml,1,1)<>'/') then
    begin
      NomeHtml := '/' + NomeHtml;
    end;
    comm := textbetween(GetPage(NomeHtml),'<font face="arial,helvetica" size="2"><b>','<a class="filmup" href="opinioni.htm">');
    comm := TextAfter(comm,'</b><br>'+#13#10);
    HTMLRemoveTags(comm);
//FS    comm := comm + crlf + Getfield(fieldComments);      atiivarew se si vuole aggiungere i coomenti a quelli già esistenti
    SetField(fieldComments,comm);
    PrevLineNr := LineNr;
  end;

  //Rating
  LineNr := FindLine('">Opinioni</a>', Page, PrevLineNr);
  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr);
    Delete(Line,1,pos('Recensione',Line));
    Delete(Line,1,pos('href="',Line)+5);
    Line := GetLineFromOtherPage(Copy(Line,1,pos('"',Line)-1),'</b> - <img src="');
    if Line <> '' then
    begin
      Line := Copy(Line,1,pos('</b> - <img src="',Line)-1);
      if GetOption('MezzoVoto')=0 then
 if pos('.',Line)>0 then Line := Copy(Line,1,pos('.',Line)-1);
      SetField(fieldRating,Line);
    end;
    PrevLineNr := LineNr;
  end;

  //Picture // start fulvio53s03 Code
    LineNr := FindLine('<img src="locand/', Page, PrevLineNr);
  if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      AddrImage := TextBetween(Line, '<img src="', '" width="');
      AddrImage := 'http://filmup.leonardo.it/' + AddrImage;
      GetPicture(AddrImage);
    end;

  if GetOption('Poster')=1 then
  begin
    LineNr := FindLine('href="posters/locp/', Page, PrevLineNr);  //cerca Poster grande
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      AddrImage := TextBetween(Line, 'href="posters/locp/', '" target="_blank"');
      AddrImage := 'http://filmup.leonardo.it/posters/loc/500/' + AddrImage;
      AddrImage := StringReplace(AddrImage, '.htm', '.jpg');
      GetPicture(AddrImage);

//      http://filmup.leonardo.it/posters/locp/toystory2.htm
//      http://filmup.leonardo.it/posters/loc/500/toystory2.jpg

//      Line := GetLineFromOtherPage('http://filmup.leonardo.it/'+Copy(Line,1,pos('"',Line)-1),'<img src="../loc/500/');
//      if Line <> '' then
//      begin
//        Delete(Line,1,pos('<img src="../',Line)+12);
//        GetPicture('http://filmup.leonardo.it/posters/'+Copy(Line,1,pos('"',Line)-1));
//      end;
    end;
  end;
//Picture // start fulvio53s03 Code
end;

function GetLineFromOtherPage(address: string; hint: string): string;
var
  Page: TStringList;
  LineNr: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  LineNr := FindLine(hint, Page, 0);
  if LineNr > -1 then result := Page.GetString(LineNr);
  Page.Free;
end;

procedure GetComments(address: string);
var
  Page: TStringList;
  BeginLine: integer;
  EndLine: integer;
  i: integer;
  Line, Comments: string;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  BeginLine := FindLine('RECENSIONI', Page, 0);
  BeginLine := FindLine('<font face="arial,helvetica" size="2"><b>', Page, BeginLine);
  EndLine := FindLine('<a href="opinioni.htm">Scrivi la tua recensione!</a></font><br><br>', 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);
    HTMLDecode(Line);
    Comments := Comments + Line;
  end;
  SetField(fieldComments, Comments);
  Page.Free;
end;

function MyTrim(Value: string):string;
var
  ExitLoop: Boolean;
  NewField, OldField: String;
  OldLgthValue, NewLgthValue: integer;
begin
    NewField := ' ';
    OldField := #9;
    value := StringReplace(Value, OldField, NewField);
    OldField := #10;
    value := StringReplace(Value, OldField, NewField);
    OldField := #13;
    value := StringReplace(Value, OldField, NewField);
    OldField := '  ';
    value := StringReplace(Value, OldField, NewField);
    Newfield := '&';
    OldField := '&';
    value := StringReplace(Value, OldField, NewField);
    ExitLoop := False;
    OldLgthValue := length(Value);
    repeat
      value := StringReplace(Value, OldField, NewField);
      NewLgthValue := length(Value);
    if  OldLgthValue = NewLgthValue then
        ExitLoop := True
    else
        OldLgthValue := NewLgthValue;
    until ExitLoop;

  Result := '';
  HTMLRemoveTags(Value);
  Result := Value;
end;


//
procedure AddMoviesTitles;
var
  LineNr, CharToDelete: Integer;
  Line, Blocco: string;
  MovieAddress, MovieAnno: string;
  BeginPos, EndPos: Integer;
  begin
//fulvio  LineNr := FindLine('FilmUP - Scheda: ',Page,LineNr);
    Pagestr := '<DL>' + Textbetween(Pagestr, '<DL>', 'Risultati della ricerca:<br>');     //estrae tabella dei risultati
    Blocco := Textbetween(Pagestr, '<DL>', '</DL>');         //estrae elemento della tabella
    CharToDelete := Length(Blocco) + 9;    //lgth dati estratti + lgth delimiters estrazione
  while CharToDelete > 9 do
    begin
    MovieAddress := TextBetween(Blocco, '<a class="filmup" href="', '" TARGET="_blank">');
//fs    MovieTitle := '<span' + TextBetween(Blocco, '<span', '</a>') + '</a>';
    MovieTitle := + TextBetween(Blocco, 'FilmUP - Scheda: ', '</a>');
    MovieTitle := Mytrim(MovieTitle);
//    HTMLRemoveTags(MovieTitle);
//    HTMLDecode(Movietitle);
//**************    //fs da verificare
  MovieAnno := TextBetween(Blocco, 'Anno: ', ' Genere');
  MovieTitle := MovieTitle + ' [' + MovieAnno + ']';
//fs  MovieTitle := StringReplace(MovieTitle, 'FilmUP - Scheda: ', '');
  HTMLRemoveTags(MovieTitle);
  HTMLDecode(MovieTitle);
  MovieTitle := StringReplace(MovieTitle, ' / FilmUP.com ', '');
  lgth_title := length(MovieTitle);
  If lgth_title > 3 then
     PickTreeAdd(MovieTitle, MovieAddress);
  if TheMovieAddress='*' then
     TheMovieAddress := MovieAddress
  else
     TheMovieAddress := '';
//**************

    delete(Pagestr, 1, CharTodelete)
    Blocco := Textbetween(Pagestr, '<DL>', '</DL>');
    CharToDelete := Length(Blocco) + 9;    //lgth dati estratti + lgth delimiters estrazione
//    delete(Pagestr, 1, CharTodelete)
//  end;

  end;
//Fulvio  LineNr := FindLine('Successivo',Page,LineNr);
//Fulvio  Line := Page.GetString(LineNr);
//Fulvio  BeginPos := pos('HREF',Line);
//Fulvio  if BeginPos>0 then
//Fulvio  begin
//Fulvio    Delete(Line,1,BeginPos + 5);
//Fulvio    EndPos := pos('"',Line);
//Fulvio    MovieAddress := copy(Line,1,EndPos-1);
//Fulvio    PickTreeMoreLink(MovieAddress);
//Fulvio  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('FilmUP Import', 'Digita il titolo del film:', MovieName) then
    begin
    MovieToSearch:=StringReplace(MovieName, ' ', '+');
//Fulvio  ricerca per 'Termini contenuti':
// &ul=%25%2Fsc_%25&x=60&y=11&m=all&wf=0020&wm=sub&sy=0
    Pagina_Ricerca := 'http://filmup.leonardo.it/cgi-bin/search.cgi?ps=100&fmt=long&q='+MovieToSearch+'&ul=%25%2Fsc_%25&x=60&y=11&m=all&wf=0020&wm=sub&sy=0';
    AnalyzePage(Pagina_Ricerca);
//Fulvio  ricerca per 'Termini esatti':
//    AnalyzePage('http://filmup.leonardo.it/cgi-bin/search.cgi?ps=100&fmt=long&q='+MovieToSearch+'&ul=%25%2Fsc_%25&x=31&y=12&m=all&wf=0020&wm=wrd&sy=0');
    end;
   end
  else
    ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.5.0)');
end.
Migliorata la ricerca dei film in catalogo, corretta l'estrazione della trama che era parziale.
Fatemi sapere.
:innocent:
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks
otreux
Posts: 194
Joined: 2008-10-22 16:55:46

Post by otreux »

It work's perfectly ;)
robgarib
Posts: 6
Joined: 2003-12-02 18:49:31

Post by robgarib »

Non prende il commento
fulvio53s03
Posts: 744
Joined: 2007-04-28 05:46:43
Location: Italy

Post by fulvio53s03 »

per quale film?
Nel corso del tempo hanno cambiato laqyout di pagina svariate volte..... :cry:
robgarib
Posts: 6
Joined: 2003-12-02 18:49:31

Post by robgarib »

Solamente per i films più recenti.
Se vai a cercare i film degli anni scorsi il commento appare, per gli ultimi invece no.
fulvio53s03
Posts: 744
Joined: 2007-04-28 05:46:43
Location: Italy

Post by fulvio53s03 »

robgarib wrote:Solamente per i films più recenti.
Se vai a cercare i film degli anni scorsi il commento appare, per gli ultimi invece no.
Spiacente ma non trovo esempi di corretta estrazione da titoli più datati.
Prego fornire titoli con estrazione corretta / errata (così correggiamo definitivamente).
Buon Natale!

Sorry, I can't find correct extractions. Please give us correct / wrong titles (so we can finally correct).
;)
Post Reply