[UPD ITA] Filmtv.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
fulvio53s03
Posts: 765
Joined: 2007-04-28 05:46:43
Location: Italy

[UPD ITA] Filmtv.it

Post by fulvio53s03 »

Some minor changes to extract comments (Piccoli aggiustamenti per estrarre i commenti)

Code: Select all

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

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

[Infos]
Authors=Fulvio53s03 (based on Fiezul, PIvello, Valerino & others works).
Title=FilmTV
Description=Get movie info from Film TV
Site=www.Film.TV.it
Language=IT
Version=2.2.2    11.2.2013
Requires=3.5.1
Comments=
License=
GetInfo=1
RequiresMovies=1

[Options]

[Parameters]

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

program FilmTVIt;
uses
  StringUtils7552;   // Script needs external unit StringUtils7552.pas in scripts folder !
const
  //Query constants
  UrlBase = 'http://www.film.tv.it/';
  QueryBase = UrlBase + 'cerca.php?q=';
  QueryFilm = UrlBase + '';

  //Search page constants
  Apice       = #39;
  cStartFilmUrl = '<div class="thumb"><a href="/'; // ID start marker
  cEndFilmUrl = '"><span><img src=';           // ID end marker
  cStartTitle = 'title="';                      // Title start marker
  cEndTitle = '">';                     // Title end marker
  //Film page constants
  cStartTranslTitle = '<h1 itemprop="name">';                  // Translated title start marker
  cEndTranslTitle = '</h1>';                   // Translated title end marker
  cStartOrigTitle = '[<i>';     // Original title start marker
  cEndOrigTitle = '</i>';                   // Original title end marker
  cStartImgLink_ext = '<div id="filmScheda_sx">';               // Image start marker
  cStartImgLink_int = '<img src="';               // Image start marker
  cEndImgLink_int = '" width="';   // Image end marker
  cEndImgLink_ext = '<div class="hvenv">';   // Image end marker
  cStartListItem = ', ';
  cEndCountry = '<a href="/film/anno';
  cEndListItem = ', ';                           // Generic field marker
  cStartCategory = '/">';                        // Category start marker
  cEndCategory = '</a>';                         // Single Director end marker
  cEndDirectors = '<br />';                      // Directors end marker
  cStartDirector = 'Regia di ';               // Single Director start marker
  cEndDirector = '</a>';                         // Single Director end marker
  cStartCast = 'Con';                    // Cast start marker
  cEndCast = '</div>';                   // Cast end marker
  cStartActor = '">';                      // Actor start marker
  cEndActor = '</a>';                      // Actor end marker
  cEndGeneric2 = '</td>';                        // Generic end marker 2
  cStartDesc = '<p class="trama" itemprop="description">';              // Description start marker  //FS2012-11-11
//  cStartDesc = '<p class="trama">';              // Description start marker  //FS2012-11-11
  cEndDesc = '</p>';                             // Description end marker
//  cStartComm = '<p class="commento">';           // Comment start marker
//  cEndComm = '</p>';                         // Comment end marker
  cStartComm = '<div class="cx_opinione">';        //fs2013-02-11
  cEndComm = '</div>';                         // Comment end marker
  cStartURL='<li id="sel"><a href="/';
  cEndURL='" title="scheda"';
  InitYear = '<span>';
  EndYear = '</span>';
var
  searchUrl,MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr:  string;
  MoviesFound: integer;

// --------------------------------------------------
// PAGE PACKING (remove extra spaces, tabs & CR) by Pivello
// IN:  page Url     (string)
// OUT: compact page (string)
// --------------------------------------------------
function RemoveExtraChars(Url: string): string;
var
  Page: TStringList;
  TmpPageStr: string;
  Temp: string;
  PackedPage: string;
  CharPos: Integer;
  n: Integer;
begin
  Page := TStringList.Create;
  TmpPageStr := '';

  Page.Text := GetPage(Url);
  for n := 0 to Page.Count - 1 do
    PackedPage := PackedPage + ' ' + Page.GetString(n);
  repeat
    CharPos := pos('  ', PackedPage);
    if CharPos = 0 then
      CharPos := pos(#9, PackedPage);
    if CharPos <> 0 then
      begin
        Temp := copy(PackedPage, 1, CharPos - 1);
        Delete(PackedPage, 1, CharPos);
        PackedPage := Temp + PackedPage;
      end;
  until((pos('  ', PackedPage) = 0) and (pos(#9, PackedPage) = 0));
  result := PackedPage;
  Page.Free;

end;

// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN:  none
// OUT: set Ant fields
// -----------------------
procedure SetMovieFields (htmlStr: string);
var
  i, h, m: integer;
  Duration, Description, Cast, TempStr, TempImg, hh, mm,temp: string;
  tempDirector, director: string;
  PosParAperta, PosParChiusa: integer;
  anno: string;
  imageLink: string;
  sep1, sep2: string;
  SaveHtmlstr, tempvar : string;
begin
  SetField(fieldDate, DateToStr(Date));
  // General movie description fields
  anno := '';
  TranslatedStr := getTextDelimited(cStartTranslTitle, cEndTranslTitle,htmlStr);
  PosParAperta := pos('(', TranslatedStr);
  PosParChiusa := pos(')', TranslatedStr);
  if PosParChiusa = (PosparAperta + 5) then
     begin
     anno := copy(TranslatedStr, PosParAperta +1, (PosParchiusa - posParAperta -1));
     Setfield(fieldYear, anno);
     Delete(TranslatedStr, PosParAperta -1, PosParChiusa);
     end
  SetField(fieldTranslatedTitle, AnsiMixedCase(AnsiLowerCase(TranslatedStr), ' '));

  SetField(fieldOriginalTitle, getTextDelimited(cStartOrigTitle, cEndOrigTitle,htmlStr));

  if GetField(fieldOriginalTitle)='' then
    sep1:='['
  else
    sep1:= cStartListItem;

//fs2012-04-06  tempvar:= getTextDelimited(sep1, cEndListItem, htmlStr);
  tempvar := getTextDelimited(sep1, cEndCountry, htmlStr);          //fs2012-04-06
//fs2012-04-06  tempvar := getTextDelimited('>', '<',tempvar);
  HTMLRemoveTags(tempvar);                    //fs 2012-04-06
  HTMLDecode(tempvar);                        //fs 2012-04-06
  SetField(fieldCountry, tempvar);
 
  tempvar:= getTextDelimited(cStartListItem, cEndListItem, htmlStr);
  HTMLRemoveTags(tempvar);                    //fs 2012-04-03
  HTMLDecode(tempvar);                        //fs 2012-04-03
  SetField(fieldCategory, tempvar);           //fs 2012-04-03
//fs 2012-04-03  SetField(fieldCategory, getTextDelimited(cStartCategory,cEndCategory,tempvar));
  temp := Textbetween(htmlStr, 'durata ', apice);
  SetField(fieldLength, temp);
//Get Director
  temp:= TextBetween(htmlstr, cStartDirector,cEndDirectors);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);

  setfield(FieldDirector, Temp);

//Get Actors
  temp:= getTextDelimited(cStartCast,cEndCast ,htmlStr);
//fs 2012-04-03  SetField(fieldActors, getCSVField(cStartActor,cEndActor,temp));
  HTMLRemoveTags(temp);         //fs 2012-04-03
  HTMLDecode(temp);             //fs 2012-04-03
  SetField(fieldActors, trim(temp));  //fs 2012-04-03

  if length(anno) < 1 then
     SetField(fieldYear, getTextDelimited('>', '<',tempvar));
//Get comments
  SaveHtmlstr:= htmlstr;
  temp:= getTextDelimited(cStartDesc,cEndDesc ,htmlStr);
  SetField(fieldDescription, temp);

  temp := getTextDelimited(cStartComm,cEndComm ,htmlStr) + cEndComm;
  temp := getTextDelimited('Voto al film: ', cEndComm, temp);   //fs 2013-02-11
  HTMLRemoveTags(temp);         //fs 2012-04-03
  HTMLDecode(temp);             //fs 2012-04-03
  SetField(fieldComments, trim(temp));
  htmlstr:= SaveHtmlstr;

  //Get URL
  temp:=  URLBase + getTextDelimited(cStartURL, cEndURL, htmlStr);
  SetField(fieldURL, temp);

  //Get image
  imageLink:= getTextDelimited(cStartImgLink_ext, cEndImgLink_ext, htmlStr);
  imagelink := getTextDelimited(cStartImgLink_int,cEndImgLink_int, imagelink);
  if imagelink <> 'http://www.film.tv.it/imgbank/DUMMY/no_locandina.jpg'  then
     GetPicture(imageLink);

end;

//###############################################
//Returns a CSV list from an input string strIn where list items are
//separated by delIn and delOut strings
//##############################################
function getCSVField (delIn:string; delOut: string; Var strIn: string): string;
var
  tempOut: string;
begin
  result:='';
  repeat
    tempOut:=getTextDelimited(delIn, delOut,strIn);
    if tempOut<>'' then
      result:=result + tempOut + cStartListItem;
  until tempOut='';
  if length(result)>0 then result:=copy(result,1,1+length(result)-3);

end;

//###############################################
//##############################################
//Returns a text field from an input string strIn
//delIn and delOut: text field delimiters
//##############################################
function getTextDelimited(lIn:string; lOut:string;Var strIn:string): string;
var
  StartPos: integer;
  len:integer;
  tempStr: string;
begin
  StartPos := pos(lIn, strIn);
  if startPos<>0 then
  begin
    StartPos:=StartPos+Length(lIn);
    tempStr:= copy(strIn,StartPos,StartPos+length(strIn));
    len := pos(lOut, tempStr);

     if len=0 then
      result:=''
     else
      result := copy(strIn, StartPos, len-1); // get Text Out
  Delete(strIn, 1, StartPos-1 + len-1 + length(lOut)-2);
  end
  else
    result := '';
  HTMLDecode(result);
end;


// ------------------------------------------------------------------
// FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
// if OneFilm flag true return Film Id else populate PickTree
// IN:  OneFilm flag (bool)
// OUT: one page ID  (string)
// ------------------------------------------------------------------
procedure PopulatePickTree();
var
  filmUrl, partialUrl: string;
  filmTitle, filmYear: string;
  StartPos: integer;
  EndPos: integer;
begin
      PickTreeClear;
      repeat
        partialUrl:= getTextDelimited(cStartFilmUrl,cEndFilmUrl,PageStr);
        filmUrl:=UrlBase + partialUrl;
        filmTitle:=getTextDelimited(cStartTitle,cEndTitle,PageStr);
        filmYear:=getTextDelimited(InitYear, EndYear,PageStr);
        filmTitle := filmtitle + ' ' + filmYear;
        MoviesFound := MoviesFound + 1;
        if partialUrl<>'' then
          begin
          PickTreeAdd(filmTitle, filmUrl);
          end;
      until(partialUrl='');
end;


// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  html of search page (string)
// OUT: movie url
// ---------------------------------
function getMovieUrl(htmlSearchPage: string): string;
var
  FilmId: string;
begin
  result:='';
  if pos('Non ho trovato nulla!', htmlSearchPage) > 0 then
    ShowMessage('Title not found / Nessun film trovato.')
  else
    begin
      PopulatePickTree();
      if  MoviesFound > 1 then
          begin
          if not PickTreeExec(result) then
             begin
                MoviesFound := 0;
                exit;
             end
          end;
      if  MoviesFound <= 1 then
//          begin
//          if not PickTreeExec(result) then
             exit;                    //Select one title
//          end;
    end;
end;


// ----------
// MAIN:
// IN:  none
// OUT: none
// ----------
begin
  if CheckVersion(3,5,1) then
    begin
      TranslatedStr := GetField(fieldTranslatedTitle);
      OriginalStr := GetField(fieldOriginalTitle);
      if (TranslatedStr <> '') then
        MovieName := TranslatedStr
      else
        MovieName := OriginalStr;
      if(Input('Film.TV.It', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
        begin
          //Get search page
          MoviesFound := 0;
          searchUrl := QueryBase + UrlEncode(MovieName);
          PageStr := RemoveExtraChars(searchUrl);
          PageStr := UTF8Decode(PageStr);
          //Analyze search page and get movie url (user choice)
          MovieUrl:=getMovieUrl(PageStr);

          // Get movie page
          if  MoviesFound = 0 then
              exit;
          PageStr := RemoveExtraChars(MovieUrl);
          PageStr := UTF8Decode(PageStr);
          Pagestr := Stringreplace(Pagestr, '’', '´');
          //Analyze movie page and set movie fields
          SetMovieFields(PageStr);
        end;
    end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.1)');
end.
antp
Site Admin
Posts: 9665
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Thanks ;)
Post Reply