Page 3 of 4

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2018-05-04 17:05:14
by otreux
ok, grazie Fulvio. Speriamo di beccare un sito serio che abbia ancora le locandine grandi :/
Per ora è rimasto solo comingsoon ma non è fornitissimo

ok, thanks Fulvio. We hope to catch a serious site that still has big posters :/
For now only camingsoon remained but it is not well stocked

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-02 18:43:39
by mrobama
Hi,

in attachment an updated version. There is a little improvement: if you write a title like MovieTitle (DirectorName, Year)UnusefulText if I find a movie with the same year and director I will not show the picker but I get directly that movie. It works also if you look for MovieTitle and you have director and year filled fields. If you write only the surname of director it still works (it check DirectorName is inside the director name result).

Try this search:
Jurassic World (Trevorrow, 2015)
Or try this other one (after compiling director and year field in Ant):
Jurassic World

Note: I set Title as "FilmTV Test" only for testing purpose, so you can test it without overwriting (save it as "Film.tv Test.it.ifs" in your Scripts directory)

I'll wait your feedbacks some days before publishing this update.

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 Test
Description=Get movie info from Film TV
Site=www.Film.TV.it
Language=IT
Version=3.4.5    02.02.2020
Requires=4.2.0
Comments=
License=
GetInfo=1
RequiresMovies=1

[Options]

[Parameters]
MaxPreview=1|1|Show more info in search results list (0 = false, 1 = true)

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

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

  //Search page constants
  debug_search = false;
  folder = 'd:\';
  Apice = #39;
  xFilmSearchStart = '<article';                              // HTML start marker movie block
  xFilmSearchEnd = '</article>';                              // HTML end marker movie block
  xResultTypeStart = '<div class="etichetta-serp">';          // Block type start marker. Possible blocks: FILM, RECENSIONE, POST ...
  xResultTypeEnd = '<';                                       // Block type end marker
  xFilmUrlStart = '<h2 class="title-item-scheda"><a href="';  // URL start marker
  xFilmUrlEnd = '"';                                          // URL end marker
  xTitleStart = ' title="';                                   // Title start marker
  xTitleEnd = '"';                                            // Title end marker
  xOriginalTitleStart = '<li>Titolo originale: <span>';       // Original title start marker
  xOriginalTitleEnd = '<span>';                               // Original title end marker
  xCategoryStart = '<li>Genere: <span>';                      // Category start marker
  xCategoryEnd = '</span>';                                   // Category end marker
  xDirectorsStart = 'Regia: <span>';                          // Directors start marker
  xDirectorsEnd = '</span>';                                  // Directors end marker
  xYearStart = '<span class="anno">';                         // Year start marker
  xYearEnd = '</span>';                                       // Year end marker
  
  //Film page constants
  cTranslTitleStart = '<div class="wrap-head">';    // Translated title start marker
  cTranslTitleEnd = '<div class=';                  // Translated title end marker
  cOrigTitleStart = '[<i>';                         // Original title start marker
  cOrigTitleEnd = '</i>';                           // Original title end marker
  cImgLinkExtStart = '<figure class="locandina">';  // Image start marker
  cImgLinkExtEnd = '</figure>';                     // Image end marker  
  cImgLinkIntStart = '<img src="';                  // Image start marker
  cImgLinkIntEnd = '"';                             // Image end marker
  cDirectorStart = 'Regia di';                      // Single Director start marker
  cDirectorEnd = '</p>';                            // Single Director end marker
  cCastStart = 'Con</span>';                        // Cast start marker
  cCastEnd = '<strong>';                            // Cast end marker
  cDescStart = '<h2>Trama</h2>';                    // Description start marker  //FS2012-11-11
  cDescEnd = '</p>';                                // Description end marker
  cCommStart = '<blockquote>';                      //fs2013-02-11
  cCommEnd = '</blockquote>';                       // Comment end marker
  
var
  searchUrl, MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr, DirectorName, YearDate:  string;
  MoviesFound, ParenthesisOpenedPos, ParenthesisClosedPos, CommaPos: integer;

// --------------------------------non più usato post versione 3.3.2 per velocizzare ricerca ------------------
// 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;
  CharPos, lungo, posbar: integer;
  Duration, Description, Cast, TempStr, TempImg, hh, mm,temp: string;
  tempDirector, director: string;
  PosParAperta, PosParChiusa: integer;
  imageLink: string;
  sep1, sep2: string;
  SaveHtmlstr, tempvar : string;
  dati_generali, Title_orig, Paese, Anno, Categoria, durata : string;
begin
  SetField(fieldDate, DateToStr(Date));
  // General movie description fields
  anno := '';
  TranslatedStr := TextBetween(htmlStr, cTranslTitleStart, cTranslTitleEnd);
  TranslatedStr := TextBetween(TranslatedStr, '<h1>', '</h1>');
  if length(Translatedstr) < 1 then
    begin
    TranslatedStr := TextBetween(htmlStr, cTranslTitleStart, cTranslTitleEnd);
    TranslatedStr := TextBetween(TranslatedStr, '<h1 >', '</h1>');
    end;
  SetField(fieldTranslatedTitle, AnsiMixedCase(AnsiLowerCase(TranslatedStr), ' '));    //Titolo Tradotto

//Dati Generali (tit.orig, paese, anno, genere, durata ecc.)
//  Dati_generali := TextBetween(htmlStr, '<div class="wrap-head-content cf"', '<div class="visione cf">');
  Dati_generali := FullTrim(TextBetween(htmlStr, '<ul class="info cf">', '</ul>'));          //fs2016.09.28
  Title_orig := TextBetween(Dati_generali, '<li><h2>', '</h2></li>');
  lungo := (length(Title_orig) + 18);
  Title_orig := FullTrim(TextBetween(Dati_generali, '<li><h2>', '</h2></li>'));
  Title_orig := AnsiMixedCase(AnsiLowerCase(Title_orig), ' ');
  if  Title_orig = '' then
      SetField(fieldOriginalTitle, getField(fieldTranslatedTitle))
  else
      SetField(fieldOriginalTitle, Title_orig);

//Delete(Line,1,pos('size="2"><a',Line))
  if length(Title_orig) > 0 then          //altri paesi
     begin
     Delete(Dati_generali, 1, lungo);
     Paese := TextBetween(Dati_generali, '<li>', '<time>');                //fs2016.09.29
     Anno := TextBetween(Dati_generali, '<time>', '</time>');
     Categoria := fulltrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
     durata := fulltrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end
     else
     begin                                              //Italia
     Paese := TextBetween(Dati_generali, '<li>', '<time>');
     Anno := TextBetween(Dati_generali, '<time>', '</time>');
     Categoria := fulltrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
     durata := fulltrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end;

  HTMLRemoveTags(Paese);
  PosBar := AnsiLastPosEx(',', Paese, true, true);
  if   PosBar > 0 then
       delete(Paese, (posbar), (length(Paese) - PosBar));           //cut old filename

  Paese := Fulltrim(Paese);
  SetField(fieldCountry, Paese);
  SetField(fieldYear, Anno);
  HTMLRemoveTags(Categoria);
  SetField(fieldCategory, Categoria);
  temp := Textbefore(durata, apice, '');
  SetField(fieldLength, temp);

//Get Director
  temp := TextBetween(htmlstr, cDirectorStart, cDirectorEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  temp := fulltrim(temp);
  setfield(FieldDirector, Temp);

//Get Actors
  temp := TextBetween(htmlStr, cCastStart,cCastEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SetField(fieldActors, FullTrim(temp))

//Get comments
  SaveHtmlstr := htmlstr;
  if debug_search then
      DumpPage(folder+'FilmTvTrama.txt', SaveHtmlstr);                // debug
  temp := Textbetween(htmlStr, cDescStart, cDescEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SetField(fieldDescription, FullTrim(temp));

  temp := TextBetween(HtmlStr, cCommStart, cCommEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  SetField(fieldComments, FullTrim(temp));
  htmlstr := SaveHtmlstr;

  //Get URL
  SetField(fieldURL, movieurl);

  //Get image     https://ftv01.stbm.it/imgbank/GALLERYXL/R201404/the_english_teacher_poster_ita.jpg
  imagelink := TextBetween(htmlStr, cImgLinkExtStart, cImgLinkExtEnd);
  imagelink := TextBetween(imagelink, cImgLinkIntStart, cImgLinkIntEnd);
//  setfield(FieldSubTitles, imagelink);
//  if imagelink <> 'https://www.film.tv.it/imgbank/DUMMY/no_locandina.jpg'  then
    if imagelink <> 'https://ftv01.stbm.it/imgbank/DUMMY/no_locandina.jpg'  then
       GetPicture2(imagelink, movieurl);

//     GetPicture(imagelink);

end;

//###############################################
//##############################################
//Returns a text field from an input string strIn (pagestr)
//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 AND RETURNS LAST FILM LINK
// ------------------------------------------------------------------
function PopulatePickTree(): string;
var
  filmHTML, filmUrl, partialUrl, resultType: string;
  filmTitle, filmOriginalTitle, filmCategory, filmYear, filmDirectors, wantedDirectorName, wantedYearDate: string;
  filmSearched: string;
  perfectMatch: Integer;
begin
      PickTreeClear;
      filmSearched := getfield(fieldFilePath);
      if filmSearched = '' then
         filmSearched := MovieName;
	  if YearDate = '' then
	    wantedYearDate := GetField(fieldYear)
	  else
        wantedYearDate := YearDate;  
	  if DirectorName = '' then
	    wantedDirectorName := GetField(fieldDirector)
	  else
	    wantedDirectorName := DirectorName;
      if ((GetParam('MaxPreview') <> '0') AND ((wantedYearDate <> '') OR (wantedDirectorName <> '') OR (GetField(fieldCategory) <> ''))) then
        filmSearched := filmSearched + ' (stored fields: ' + wantedYearDate + ', ' + wantedDirectorName + ', ' + GetField(fieldCategory) + ')';
      PickTreeAdd('Risultati ricerca per "' + filmSearched + '":', '');
      filmUrl := '';
	  perfectMatch := 0;
      repeat
        filmHTML := getTextDelimited(xFilmSearchStart, xFilmSearchEnd, PageStr);
        resultType := getTextDelimited(xResultTypeStart, xResultTypeEnd, filmHTML);
        if ((resultType <> 'RECENSIONE') AND (resultType <> 'POST')) then
        begin
          partialUrl := getTextDelimited(xFilmUrlStart, xFilmUrlEnd, filmHTML);
          if partialUrl<>'' then
          begin
            filmUrl := UrlBase + partialUrl;
            filmTitle := getTextDelimited(xTitleStart, xTitleEnd, filmHTML);
            filmOriginalTitle := getTextDelimited(xOriginalTitleStart, xOriginalTitleEnd, filmHTML);
            filmCategory := getTextDelimited(xCategoryStart, xCategoryEnd, filmHTML);
            filmYear := getTextDelimited(xYearStart, xYearEnd, filmHTML);
            filmDirectors := getTextDelimited(xDirectorsStart, xDirectorsEnd, filmHTML);
			if ((filmYear=wantedYearDate) and ((filmDirectors=wantedDirectorName) or (pos(wantedDirectorName, filmDirectors)<>0))) then
			  begin
			    PickTreeClear;
				MoviesFound := 1;
				perfectMatch := 1;
			  end
			else
			  begin
                if GetParam('MaxPreview') = '0' then
                  begin
                    filmTitle := filmTitle + ' (' + filmYear + ')';
                  end
                else
                  begin
                    if filmOriginalTitle<>'' then
                      filmTitle := filmTitle + ' - ' + filmOriginalTitle;
                    filmTitle := filmTitle + ' (' + filmYear;
                    if filmDirectors<>'' then
                      filmTitle := filmTitle + ' - ' + filmDirectors;
                    if filmCategory<>'' then
                      filmTitle := filmTitle + ' - ' + filmCategory;
                    filmTitle := filmTitle + ')';
                  end;
                MoviesFound := MoviesFound + 1;
                PickTreeAdd(filmTitle, filmUrl);
			  end;
          end;
        end;
      until ((partialUrl='') or (perfectMatch=1));
      PopulatePickTree := filmUrl;
end;


// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  html of search page (string)
// OUT: movie url
// ---------------------------------
function analyzePage(htmlSearchPage: string): string;
var
  FilmId: string;
begin
  result := '';
  if pos('Non ho trovato nulla!', htmlSearchPage) > 0 then
    begin
      ShowMessage('Title not found / Nessun film trovato.');
      analyzePage := ''
    end
  else
    begin
      analyzePage := 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(4,2,2) then
    begin
      TranslatedStr := GetField(fieldTranslatedTitle);
      OriginalStr := GetField(fieldOriginalTitle);
      if (TranslatedStr <> '') then
        MovieName := TranslatedStr
      else
        MovieName := OriginalStr;
	
      ParenthesisOpenedPos := pos(' (', MovieName);
	  ParenthesisClosedPos := pos(')', MovieName);
	  CommaPos := pos(', ', MovieName);
	  DirectorName := '';
	  YearDate := '';
      if ((ParenthesisOpenedPos <> 0) and (CommaPos > ParenthesisOpenedPos) and (ParenthesisClosedPos <> CommaPos)) then
		begin
		  DirectorName := copy(MovieName, ParenthesisOpenedPos + 2, CommaPos - ParenthesisOpenedPos - 2);
		  YearDate := copy(MovieName, CommaPos + 2, ParenthesisClosedPos - CommaPos - 2);
          MovieName := copy(MovieName, 1, ParenthesisOpenedPos - 1);
		end;
		
      if (Input('Film.TV.It', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
        begin
          //Get search page
          MoviesFound := 0;
// https://www.filmtv.it/cerca/?q=dalle+9+alle+5+orario+continuato
//          searchUrl := QueryBase + UrlEncode(MovieName);
            searchUrl := QueryBase + Stringreplace(MovieName, ' ', '+');
            searchUrl := AnsiLowerCaseNoAccents(searchurl);       //fs 2016.09.05
//FS 2016.02.24                    PageStr := RemoveextraChars(searchUrl);
          Pagestr := GetPage(searchUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          //Analyze search page and get movie url (user choice)
          MovieUrl := analyzePage(PageStr);
          // Get movie page
          if MoviesFound = 0 then
              exit;
//FS 2016.02.24          PageStr := RemoveextraChars(MovieUrl);
          Pagestr := GetPage(MovieUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          Pagestr := Stringreplace(Pagestr, '&rsquo;', '´');
          //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 4.2.2)');
end.

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-06 05:26:02
by fulvio53s03
@mrobama: ci siamo messi a modificare lo script in contemporanea ed io ho:
- gestito il titolo tradotto (che in alcuni casi riportava degli spazi all'inizio e alla fine),
- migliorato la ricerca della locandina
- estratto il voto attribuito
per non fare troppa confusione, se lo ritieni, ti mando in privato il mio script aggiornato con le variazioni indicate; in questo momento non riesco a testare il tuo aggiornamento e se tu volessi riunire le nostre versioni ne sarei felice.
grazie.

p.s per confrontare le versioni io uso spesso pspad portabile (h__p://www.pspad.com/it/download.htm)

@mrobama: we started editing the script at the same time and I have:
- managed the translated title (which in some cases reported spaces at beginning and end),
- improved the poster search
- extracted rating assigned
in order not to make too much confusion, if you think so, privately I will send you my script updated with the indicated variations; at this moment I can't test your update and if you want to bring together our versions I would be happy.
thank you.

p.s. to compare versions I often use pspad portable (h__p://www.pspad.com/it/download.htm)
:innocent:

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-15 20:09:52
by mrobama
Hi, I was too busy these days, I'm so sorry for this late response. I'll work on it to add my features and I'll publish here asap. I got your pm with your script.

Sorry, again.

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-15 22:23:17
by fulvio53s03
don't worry, my friend.
:grinking:

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-16 22:55:00
by mrobama
you have a pm with merged script :naughty:

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-17 19:48:59
by fulvio53s03
mrobama wrote: 2020-02-16 22:55:00 you have a pm with merged script :naughty:
PM not received. :??:
Please, send it again.

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-18 23:41:22
by mrobama
Sent

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-20 16:50:15
by fulvio53s03
Mi pare OK, procedi pure con l'Update.
Se qualcosa non va.... ce lo diranno! ;)

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-21 19:15:02
by mrobama
@antp : please update the script with this code:

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=3.4.5    16.02.2020
Requires=4.2.2
Comments=
License=
GetInfo=1
RequiresMovies=1

[Options]
Update fields=1|1|0=Don't overwrite field values|1=Update fields values (default)
Use director & year values=1|1|0=Standard search|1=Limit search results using director and year values set in fields or in title (default)

[Parameters]
MaxPreview=|1|Show more info in search results list (0 = false, 1 = true)


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

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

  //Search page constants
  debug_search = false;
  folder = 'D:\';
  Apice = #39;
  xFilmSearchStart = '<article';                              // HTML start marker movie block
  xFilmSearchEnd = '</article>';                              // HTML end marker movie block
  xResultTypeStart = '<div class="etichetta-serp">';          // Block type start marker. Possible blocks: FILM, RECENSIONE, POST ...
  xResultTypeEnd = '<';                                       // Block type end marker
  xFilmUrlStart = '<h2 class="title-item-scheda"><a href="';  // URL start marker
  xFilmUrlEnd = '"';                                          // URL end marker
  xTitleStart = ' title="';                                   // Title start marker
  xTitleEnd = '"';                                            // Title end marker
  xOriginalTitleStart = '<li>Titolo originale: <span>';       // Original title start marker
  xOriginalTitleEnd = '<span>';                               // Original title end marker
  xCategoryStart = '<li>Genere: <span>';                      // Category start marker
  xCategoryEnd = '</span>';                                   // Category end marker
  xDirectorsStart = 'Regia: <span>';                          // Directors start marker
  xDirectorsEnd = '</span>';                                  // Directors end marker
  xYearStart = '<span class="anno">';                         // Year start marker
  xYearEnd = '</span>';                                       // Year end marker
  
  //Film page constants
  cTranslTitleStart = '<div class="wrap-head">';    // Translated title start marker
  cTranslTitleEnd = '<div class=';                  // Translated title end marker
  cOrigTitleStart = '[<i>';                         // Original title start marker
  cOrigTitleEnd = '</i>';                           // Original title end marker
  cImgLinkExtStart = '<figure class="locandina">';  // Image start marker
  cImgLinkExtEnd = '</figure>';                     // Image end marker  
  cImgLinkIntStart = '<img src="';                  // Image start marker
  cImgLinkIntEnd = '"';                             // Image end marker
  cDirectorStart = 'Regia di';                      // Single Director start marker
  cDirectorEnd = '</p>';                            // Single Director end marker
  cCastStart = 'Con</span>';                        // Cast start marker
  cCastEnd = '<strong>';                            // Cast end marker
  cDescStart = '<h2>Trama</h2>';                    // Description start marker  //FS2012-11-11
  cDescEnd = '</p>';                                // Description end marker
  cCommStart = '<blockquote>';                      //fs2013-02-11
  cCommEnd = '</blockquote>';                       // Comment end marker
  start_voto = '<a class="vedi-voti"';
  end_voto   = '</a>';
  
var
  searchUrl, MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr, DirectorName, YearDate:  string;
  MoviesFound, ParenthesisOpenedPos, ParenthesisClosedPos, CommaPos, OverwriteOriginalTitle: integer;

// --------------------------------non più usato post versione 3.3.2 per velocizzare ricerca ------------------
// 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;


// -----------------------
// SET MOVIE FIELDS
// IN:  field name and field value
// OUT: set Ant field
// -----------------------
procedure SecureSetField (fieldname: integer; fieldvalue: string);
begin
	if ((GetOption('Update fields') = 1) OR (FullTrim(GetField(fieldname)) = '')) then
		SetField(fieldname, fieldvalue);
	
end;


// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN:  none
// OUT: set Ant fields
// -----------------------
procedure SetMovieFields (htmlStr: string);
var
  i, h, m: integer;
  CharPos, lungo, posbar, pos_loca: integer;
  Duration, Description, Cast, TempStr, TempImg, hh, mm,temp: string;
  tempDirector, director: string;
  PosParAperta, PosParChiusa: integer;
  imageLink: string;
  sep1, sep2: string;
  SaveHtmlstr, tempvar : string;
  dati_generali, Title_orig, Paese, Anno, Categoria, durata, voto : string;
begin
  SecureSetField(fieldDate, DateToStr(Date));
  // General movie description fields
  anno := '';
  TranslatedStr := TextBetween(htmlStr, cTranslTitleStart, cTranslTitleEnd);
  TranslatedStr := TextBetween(TranslatedStr, '<h1>', '</h1>');
  if length(TranslatedStr) < 1 then
    begin
      TranslatedStr := TextBetween(htmlStr, cTranslTitleStart, cTranslTitleEnd);
      TranslatedStr := TextBetween(TranslatedStr, '<h1 >', '</h1>');
    end;
  TranslatedStr:= AnsiMixedCase(AnsiLowerCase(FullTrim(TranslatedStr)), ' ');
  // Titolo Tradotto
  SecureSetField(fieldTranslatedTitle, TranslatedStr);  

//Dati Generali (tit.orig, paese, anno, genere, durata ecc.)
//  Dati_generali := TextBetween(htmlStr, '<div class="wrap-head-content cf"', '<div class="visione cf">');
  Dati_generali := FullTrim(TextBetween(htmlStr, '<ul class="info cf">', '</ul>'));          //fs2016.09.28
  Title_orig := TextBetween(Dati_generali, '<li><h2>', '</h2></li>');
  lungo := (length(Title_orig) + 18);
  Title_orig := FullTrim(TextBetween(Dati_generali, '<li><h2>', '</h2></li>'));
  Title_orig := AnsiMixedCase(AnsiLowerCase(Title_orig), '');  
  if (Title_orig = '') then
      Title_orig := TranslatedStr;
  if (OverwriteOriginalTitle = 0) then
    // inserimento/aggiornamento "sicuro" 
    SecureSetField(fieldOriginalTitle, Title_orig)    
  else
    // forzo l'aggiornamento perche' il titolo originale l'ho usato e poi modificato in fase di input, presumibilmente contiene qualche carattere "sporco"
    SetField(fieldOriginalTitle, Title_orig);

//Delete(Line,1,pos('size="2"><a',Line))
  if (length(Title_orig) > 0) then          //altri paesi
     begin
       Delete(Dati_generali, 1, lungo);
       Paese := TextBetween(Dati_generali, '<li>', '<time>');                //fs2016.09.29
       Anno := TextBetween(Dati_generali, '<time>', '</time>');
       Categoria := FullTrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
       durata := FullTrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end
   else
     begin                                              //Italia
       Paese := TextBetween(Dati_generali, '<li>', '<time>');
       Anno := TextBetween(Dati_generali, '<time>', '</time>');
       Categoria := FullTrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
       durata := FullTrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end;

  HTMLRemoveTags(Paese);
  PosBar := AnsiLastPosEx(',', Paese, true, true);
  if   PosBar > 0 then
       delete(Paese, (posbar), (length(Paese) - PosBar));           //cut old filename

  voto := start_voto + TextBetween(htmlStr, start_voto, '</a>') + end_voto;
  voto := TextBetween(Voto, '<meter max="10" min="0" value="', '"');
//  Htmlremovetags(voto);
  SecureSetField(fieldrating, voto);

  Paese := FullTrim(Paese);
  SecureSetField(fieldCountry, Paese);
  SecureSetField(fieldYear, Anno);
  HTMLRemoveTags(Categoria);
  SecureSetField(fieldCategory, Categoria);
  temp := Textbefore(durata, apice, '');
  SecureSetField(fieldLength, temp);

//Get Director
  temp := TextBetween(htmlstr, cDirectorStart, cDirectorEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  temp := FullTrim(temp);
  SecureSetField(FieldDirector, Temp);

//Get Actors
  temp := TextBetween(htmlStr, cCastStart,cCastEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SecureSetField(fieldActors, FullTrim(temp))

//Get comments
  SaveHtmlstr := htmlstr;
  if debug_search then
      DumpPage(folder+'FilmTvTrama.txt', SaveHtmlstr);                // debug
  temp := Textbetween(htmlStr, cDescStart, cDescEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SecureSetField(fieldDescription, FullTrim(temp));

  temp := TextBetween(HtmlStr, cCommStart, cCommEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  SecureSetField(fieldComments, FullTrim(temp));
  htmlstr := SaveHtmlstr;

  //Get URL
  SecureSetField(fieldURL, movieurl);

  //Get image     https://ftv01.stbm.it/imgbank/GALLERYXL/R201404/the_english_teacher_poster_ita.jpg
  imagelink := TextBetween(htmlStr, cImgLinkExtStart, cImgLinkExtEnd);
  imagelink := TextBetween(imagelink, cImgLinkIntStart, cImgLinkIntEnd);
//  SecureSetField(FieldSubTitles, imagelink);
  pos_loca := pos('/no_locandina.jpg', imagelink);
  if pos_loca = 0  then
      GetPicture2(imagelink, movieurl);
end;

//###############################################
//##############################################
//Returns a text field from an input string strIn (pagestr)
//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 AND RETURNS LAST FILM LINK
// ------------------------------------------------------------------
function PopulatePickTree(): string;
var
  filmHTML, filmUrl, partialUrl, resultType: string;
  filmTitle, filmOriginalTitle, filmCategory, filmYear, filmDirectors, wantedDirectorName, wantedYearDate: string;
  filmSearched: string;
  perfectMatch: Integer;  
begin
      PickTreeClear;
      filmSearched := GetField(fieldFilePath);
      if filmSearched = '' then
         filmSearched := MovieName;

	  if (GetOption('Use director & year values') = 1) then
	    begin
	      if YearDate = '' then
	        wantedYearDate := GetField(fieldYear)
	      else
	        wantedYearDate := YearDate;  
	      if DirectorName = '' then
	        wantedDirectorName := GetField(fieldDirector)
	      else
  	        wantedDirectorName := DirectorName;
		end;

		 
	  if ((GetParam('MaxPreview') <> '0') AND ((GetField(fieldYear) <> '') OR (GetField(fieldDirector) <> '') OR (GetField(fieldCategory) <> ''))) then
        filmSearched := filmSearched + ' (stored fields: ' + GetField(fieldYear) + ', ' + GetField(fieldDirector) + ', ' + GetField(fieldCategory) + ')';
      PickTreeAdd('Risultati ricerca per "' + filmSearched + '":', '');
      filmUrl := '';
	  perfectMatch := 0;
      repeat
        filmHTML := getTextDelimited(xFilmSearchStart, xFilmSearchEnd, PageStr);
        resultType := getTextDelimited(xResultTypeStart, xResultTypeEnd, filmHTML);
        if ( (resultType <> 'RECENSIONE') AND (resultType <> 'POST') AND (resultType <> 'NICKNAME') ) then
        begin
          partialUrl := getTextDelimited(xFilmUrlStart, xFilmUrlEnd, filmHTML);
          if (partialUrl <> '') then
          begin
            filmUrl := UrlBase + partialUrl;
            filmTitle := getTextDelimited(xTitleStart, xTitleEnd, filmHTML);
            filmOriginalTitle := getTextDelimited(xOriginalTitleStart, xOriginalTitleEnd, filmHTML);
            filmCategory := getTextDelimited(xCategoryStart, xCategoryEnd, filmHTML);
            filmYear := getTextDelimited(xYearStart, xYearEnd, filmHTML);
            filmDirectors := getTextDelimited(xDirectorsStart, xDirectorsEnd, filmHTML);
			if ((GetOption('Use director & year values') = 1) AND (filmYear=wantedYearDate) AND ((filmDirectors=wantedDirectorName) OR (pos(wantedDirectorName, filmDirectors)<>0))) then
			  begin
			    PickTreeClear;
				MoviesFound := 1;
				perfectMatch := 1;
			  end
			else
			  begin			  
                if GetParam('MaxPreview') = '0' then
                  begin
                    filmTitle := filmTitle + ' (' + filmYear + ')';
                  end
                else
                  begin
                    if filmOriginalTitle<>'' then
                      filmTitle := filmTitle + ' - ' + filmOriginalTitle;
                    filmTitle := filmTitle + ' (' + filmYear;
                    if filmDirectors<>'' then
                      filmTitle := filmTitle + ' - ' + filmDirectors;
                    if filmCategory<>'' then
                      filmTitle := filmTitle + ' - ' + filmCategory;
                    filmTitle := filmTitle + ')';
                  end;
                if pos('/nick/', filmUrl) = 0 then
                   begin
                   MoviesFound := MoviesFound + 1;
                   PickTreeAdd(filmTitle, filmUrl);
                   end
			  end;
          end;
        end;
      until ((partialUrl='') or (perfectMatch=1));
      PopulatePickTree := filmUrl;
end;


// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  html of search page (string)
// OUT: movie url
// ---------------------------------
function analyzePage(htmlSearchPage: string): string;
var
  FilmId: string;
begin
  result := '';
  if pos('Non ho trovato nulla!', htmlSearchPage) > 0 then
    begin
      ShowMessage('Title not found / Nessun film trovato.');
      analyzePage := ''
    end
  else
    begin
      analyzePage := 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(4,2,2) then
    begin
      TranslatedStr := FullTrim(GetField(fieldTranslatedTitle));
      OriginalStr := FullTrim(GetField(fieldOriginalTitle));
      OverwriteOriginalTitle := 1;
      if (TranslatedStr <> '') then
	  	begin
          MovieName := TranslatedStr;
		end		
      else
	    begin
          MovieName := OriginalStr;
		  if (OriginalStr <> '') then
		    OverwriteOriginalTitle := 0;		  
		end;

      // Retrieve director name and year from title. Accepted title example "nome film (director, year) other text". Example: "Junkyard dog (Bass, 2010) dvdrip ita ac3 eng aac"
      ParenthesisOpenedPos := pos('(', MovieName);
	  if (ParenthesisOpenedPos > 0) then
	    begin
		  CommaPos := pos(',', TextAfter(MovieName, '(')) + ParenthesisOpenedPos;
		  ParenthesisClosedPos := pos(')', TextAfter(MovieName, '(')) + ParenthesisOpenedPos;
		end  
	  else
        begin	  
	      CommaPos := 0;
	      ParenthesisClosedPos := 0;		  
		end;  
	  DirectorName := '';
	  YearDate := '';
      if ((GetOption('Use director & year values') = 1) AND (ParenthesisOpenedPos <> 0) AND (CommaPos > ParenthesisOpenedPos) AND (ParenthesisClosedPos <> CommaPos)) then
		begin
		  DirectorName := FullTrim(copy(MovieName, ParenthesisOpenedPos + 1, CommaPos - ParenthesisOpenedPos - 1)); 
		  YearDate := FullTrim(copy(MovieName, CommaPos + 1, ParenthesisClosedPos - CommaPos - 1));
          MovieName := FullTrim(copy(MovieName, 1, ParenthesisOpenedPos - 1));  
		  OverwriteOriginalTitle := 1;
		end;
		
      if (Input('Film.TV.It', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
        begin
		  if ((OverwriteOriginalTitle = 0) AND (MovieName <> OriginalStr)) then
		    // Used 'Original title' field value but it was manually changed in input field, so field 'Original title' will be overwritten in any case		  
		    OverwriteOriginalTitle := 1;
          //Get search page
          MoviesFound := 0;
//        searchUrl := QueryBase + UrlEncode(MovieName);
          searchUrl := QueryBase + Stringreplace(MovieName, ' ', '+');
          searchUrl := AnsiLowerCaseNoAccents(searchurl);       //fs 2016.09.05
//FS 2016.02.24                    PageStr := RemoveextraChars(searchUrl);
          Pagestr := GetPage(searchUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          //Analyze search page and get movie url (user choice)
          MovieUrl := analyzePage(PageStr);
          // Get movie page
          if MoviesFound = 0 then
              exit;
//FS 2016.02.24          PageStr := RemoveextraChars(MovieUrl);
          Pagestr := GetPage(MovieUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          Pagestr := Stringreplace(Pagestr, '&rsquo;', '´');
          //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 4.2.2)');
end.

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-21 20:06:58
by antp
Thanks, updated

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-02-22 13:02:44
by fulvio53s03
antp wrote: 2020-02-21 20:06:58Thanks, updated
Thanks both of you, MrObama and Antp!
:clapping:

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-04-25 17:42:56
by aiolocuzio1969
Ciao,
ho installato Ant Movie Catalog, ho dei film nominati con Titolo - Regista - Anno quando provo ad acquisire le informazioni da internet sembra elaborare ma poi non aggiunge nessuna informazione, ho aggiornato con l'ultimo script trovate su questo forum ed anche aggiornando automaticamente gli scripts dalla sua stessa pagina.
Potresti aiutarmi a capire se faccio qualcosa di sbagliato...
Ho anche provato a mettere solo il titolo del film nel nome del file.
la versione installata è la 4.2.2.2
grazie
Aio

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-04-27 12:16:47
by fulvio53s03
aiolocuzio1969 wrote: 2020-04-25 17:42:56 ..... solo il titolo del film......
puoi fornire il titolo del film e un dettaglio delle opzioni impostate (finestrella a destra della videata di lancio dello script)?
grazie :)

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-05-19 20:40:42
by Atlantic
Buonasera a tutti. Ho notato che lo script di film tv non funziona più...
Me ne sono accorto oggi, dopo averlo utilizzato senza problemi domenica pomeriggio.

Qualcuno sta riscontrando lo stesso problema?

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-05-21 05:02:39
by fulvio53s03
Variazioni non me ne risultano.
Che film stai cercando?
Qual'è il messaggio di errore?
Quali sono le release dello script, di AMC, ecc?
:??:

Variations are not apparent to me.
What movie are you looking for?
What is the error message?
What are the script releases, AMCs, etc.?
:??:

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-06-23 18:20:12
by mrobama
New release, what's new:
- fixed category (previous behaviour: always missing, now is recognized if present)
- fixed translated title (previous behaviour: sometime missing, now is recognized if present)

@fulvio53s03 : enjoy the new version ;)

@antp : please update the script with this code:

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=3.4.6    23.06.2020
Requires=4.2.2
Comments=
License=
GetInfo=1
RequiresMovies=1

[Options]
Update fields=1|1|0=Don't overwrite field values|1=Update fields values (default)
Use director & year values=1|1|0=Standard search|1=Limit search results using director and year values set in fields or in title (default)

[Parameters]
MaxPreview=|1|Show more info in search results list (0 = false, 1 = true)


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

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

  //Search page constants
  debug_search = false;
  folder = 'D:\';
  Apice = #39;
  xFilmSearchStart = '<article';                              // HTML start marker movie block
  xFilmSearchEnd = '</article>';                              // HTML end marker movie block
  xResultTypeStart = '<div class="etichetta-serp">';          // Block type start marker. Possible blocks: FILM, RECENSIONE, POST ...
  xResultTypeEnd = '<';                                       // Block type end marker
  xFilmUrlStart = '<h2 class="title-item-scheda"><a href="';  // URL start marker
  xFilmUrlEnd = '"';                                          // URL end marker
  xTitleStart = ' title="';                                   // Title start marker
  xTitleEnd = '"';                                            // Title end marker
  xOriginalTitleStart = '<li>Titolo originale: <span>';       // Original title start marker
  xOriginalTitleEnd = '<span>';                               // Original title end marker
  xCategoryStart = '<span>Genere:</span>';                    // Category start marker
  xCategoryEnd = '</li>';                                     // Category end marker
  xDirectorsStart = 'Regia: <span>';                          // Directors start marker
  xDirectorsEnd = '</span>';                                  // Directors end marker
  xYearStart = '<span class="anno">';                         // Year start marker
  xYearEnd = '</span>';                                       // Year end marker
  
  //Film page constants
  cTranslTitleStart = '<div class="wrap-head">';    // Translated title start marker
  cTranslTitleEnd = '<div class=';                  // Translated title end marker
  cOrigTitleStart = '[<i>';                         // Original title start marker
  cOrigTitleEnd = '</i>';                           // Original title end marker
  cImgLinkExtStart = '<figure class="locandina">';  // Image start marker
  cImgLinkExtEnd = '</figure>';                     // Image end marker  
  cImgLinkIntStart = '<img src="';                  // Image start marker
  cImgLinkIntEnd = '"';                             // Image end marker
  cDirectorStart = 'Regia di';                      // Single Director start marker
  cDirectorEnd = '</p>';                            // Single Director end marker
  cCastStart = 'Con</span>';                        // Cast start marker
  cCastEnd = '<strong>';                            // Cast end marker
  cDescStart = '<h2>Trama</h2>';                    // Description start marker  //FS2012-11-11
  cDescEnd = '</p>';                                // Description end marker
  cCommStart = '<blockquote>';                      //fs2013-02-11
  cCommEnd = '</blockquote>';                       // Comment end marker
  start_voto = '<a class="vedi-voti"';
  end_voto   = '</a>';
  
var
  searchUrl, MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr, DirectorName, YearDate:  string;
  MoviesFound, ParenthesisOpenedPos, ParenthesisClosedPos, CommaPos, OverwriteOriginalTitle: integer;

// --------------------------------non più usato post versione 3.3.2 per velocizzare ricerca ------------------
// 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;


// -----------------------
// SET MOVIE FIELDS
// IN:  field name and field value
// OUT: set Ant field
// -----------------------
procedure SecureSetField (fieldname: integer; fieldvalue: string);
begin
	if ((GetOption('Update fields') = 1) OR (FullTrim(GetField(fieldname)) = '')) then
		SetField(fieldname, fieldvalue);
	
end;


// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN:  none
// OUT: set Ant fields
// -----------------------
procedure SetMovieFields (htmlStr: string);
var
  i, h, m: integer;
  CharPos, lungo, posbar, pos_loca: integer;
  Duration, Description, Cast, TempStr, TempImg, hh, mm,temp: string;
  tempDirector, director: string;
  PosParAperta, PosParChiusa: integer;
  imageLink: string;
  sep1, sep2: string;
  SaveHtmlstr, tempvar : string;
  dati_generali, Title_orig, Paese, Anno, Categoria, durata, voto : string;
begin
  SecureSetField(fieldDate, DateToStr(Date));
  // General movie description fields
  anno := '';
  TranslatedStr := RemoveHTML(TextBetween(htmlStr, cTranslTitleStart, cTranslTitleEnd));
  TranslatedStr := AnsiMixedCase(AnsiLowerCase(FullTrim(TranslatedStr)), ' ');
  // Titolo Tradotto
  SecureSetField(fieldTranslatedTitle, TranslatedStr);  

//Dati Generali (tit.orig, paese, anno, genere, durata ecc.)
//  Dati_generali := TextBetween(htmlStr, '<div class="wrap-head-content cf"', '<div class="visione cf">');
  Dati_generali := FullTrim(TextBetween(htmlStr, '<ul class="info cf">', '</ul>'));          //fs2016.09.28
  Title_orig := TextBetween(Dati_generali, '<li><h2>', '</h2></li>');
  lungo := (length(Title_orig) + 18);
  Title_orig := FullTrim(TextBetween(Dati_generali, '<li><h2>', '</h2></li>'));
  Title_orig := AnsiMixedCase(AnsiLowerCase(Title_orig), '');  
  if (Title_orig = '') then
      Title_orig := TranslatedStr;
  if (OverwriteOriginalTitle = 0) then
    // inserimento/aggiornamento "sicuro" 
    SecureSetField(fieldOriginalTitle, Title_orig)    
  else
    // forzo l'aggiornamento perche' il titolo originale l'ho usato e poi modificato in fase di input, presumibilmente contiene qualche carattere "sporco"
    SetField(fieldOriginalTitle, Title_orig);

//Delete(Line,1,pos('size="2"><a',Line))
  if (length(Title_orig) > 0) then          //altri paesi
     begin
       Delete(Dati_generali, 1, lungo);
       Paese := TextBetween(Dati_generali, '<li>', '<time>');                //fs2016.09.29
       Anno := TextBetween(Dati_generali, '<time>', '</time>');
       Categoria := FullTrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
       durata := FullTrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end
   else
     begin                                              //Italia
       Paese := TextBetween(Dati_generali, '<li>', '<time>');
       Anno := TextBetween(Dati_generali, '<time>', '</time>');
       Categoria := FullTrim(Textbetween(Dati_generali, '<span>Genere:</span>', '</li>'));
       durata := FullTrim(Textbetween(Dati_generali, '<span>durata</span>', '</li>'));
     end;

  HTMLRemoveTags(Paese);
  PosBar := AnsiLastPosEx(',', Paese, true, true);
  if   PosBar > 0 then
       delete(Paese, (posbar), (length(Paese) - PosBar));           //cut old filename

  voto := start_voto + TextBetween(htmlStr, start_voto, '</a>') + end_voto;
  voto := TextBetween(Voto, '<meter max="10" min="0" value="', '"');
//  Htmlremovetags(voto);
  SecureSetField(fieldrating, voto);

  Paese := FullTrim(Paese);
  SecureSetField(fieldCountry, Paese);
  SecureSetField(fieldYear, Anno);
  HTMLRemoveTags(Categoria);
  SecureSetField(fieldCategory, Categoria);
  temp := Textbefore(durata, apice, '');
  SecureSetField(fieldLength, temp);

//Get Director
  temp := TextBetween(htmlstr, cDirectorStart, cDirectorEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  temp := FullTrim(temp);
  SecureSetField(FieldDirector, Temp);

//Get Actors
  temp := TextBetween(htmlStr, cCastStart,cCastEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SecureSetField(fieldActors, FullTrim(temp))

//Get comments
  SaveHtmlstr := htmlstr;
  if debug_search then
      DumpPage(folder+'FilmTvTrama.txt', SaveHtmlstr);                // debug
  temp := Textbetween(htmlStr, cDescStart, cDescEnd);
  HTMLRemoveTags(temp);                       //fs 2012-04-03
  HTMLDecode(temp);
  SecureSetField(fieldDescription, FullTrim(temp));

  temp := TextBetween(HtmlStr, cCommStart, cCommEnd);
  HTMLRemoveTags(temp);
  HTMLDecode(temp);
  SecureSetField(fieldComments, FullTrim(temp));
  htmlstr := SaveHtmlstr;

  //Get URL
  SecureSetField(fieldURL, movieurl);

  //Get image     https://ftv01.stbm.it/imgbank/GALLERYXL/R201404/the_english_teacher_poster_ita.jpg
  imagelink := TextBetween(htmlStr, cImgLinkExtStart, cImgLinkExtEnd);
  imagelink := TextBetween(imagelink, cImgLinkIntStart, cImgLinkIntEnd);
//  SecureSetField(FieldSubTitles, imagelink);
  pos_loca := pos('/no_locandina.jpg', imagelink);
  if pos_loca = 0  then
      GetPicture2(imagelink, movieurl);
end;

//###############################################
//##############################################
//Returns a text field from an input string strIn (pagestr)
//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 AND RETURNS LAST FILM LINK
// ------------------------------------------------------------------
function PopulatePickTree(): string;
var
  filmHTML, filmUrl, partialUrl, resultType: string;
  filmTitle, filmOriginalTitle, filmCategory, filmYear, filmDirectors, wantedDirectorName, wantedYearDate: string;
  filmSearched: string;
  perfectMatch: Integer;  
begin
      PickTreeClear;
      filmSearched := GetField(fieldFilePath);
      if filmSearched = '' then
         filmSearched := MovieName;

	  if (GetOption('Use director & year values') = 1) then
	    begin
	      if YearDate = '' then
	        wantedYearDate := GetField(fieldYear)
	      else
	        wantedYearDate := YearDate;  
	      if DirectorName = '' then
	        wantedDirectorName := GetField(fieldDirector)
	      else
  	        wantedDirectorName := DirectorName;
		end;

		 
	  if ((GetParam('MaxPreview') <> '0') AND ((GetField(fieldYear) <> '') OR (GetField(fieldDirector) <> '') OR (GetField(fieldCategory) <> ''))) then
        filmSearched := filmSearched + ' (stored fields: ' + GetField(fieldYear) + ', ' + GetField(fieldDirector) + ', ' + GetField(fieldCategory) + ')';
      PickTreeAdd('Risultati ricerca per "' + filmSearched + '":', '');
      filmUrl := '';
	  perfectMatch := 0;
      repeat
        filmHTML := getTextDelimited(xFilmSearchStart, xFilmSearchEnd, PageStr);
        resultType := getTextDelimited(xResultTypeStart, xResultTypeEnd, filmHTML);
        if ( (resultType <> 'RECENSIONE') AND (resultType <> 'POST') AND (resultType <> 'NICKNAME') ) then
        begin
          partialUrl := getTextDelimited(xFilmUrlStart, xFilmUrlEnd, filmHTML);
          if (partialUrl <> '') then
          begin
            filmUrl := UrlBase + partialUrl;
            filmTitle := getTextDelimited(xTitleStart, xTitleEnd, filmHTML);
            filmOriginalTitle := getTextDelimited(xOriginalTitleStart, xOriginalTitleEnd, filmHTML);
            filmCategory := RemoveHTML(getTextDelimited(xCategoryStart, xCategoryEnd, filmHTML));
            filmYear := getTextDelimited(xYearStart, xYearEnd, filmHTML);
            filmDirectors := getTextDelimited(xDirectorsStart, xDirectorsEnd, filmHTML);
			if ((GetOption('Use director & year values') = 1) AND (filmYear=wantedYearDate) AND ((filmDirectors=wantedDirectorName) OR (pos(wantedDirectorName, filmDirectors)<>0))) then
			  begin
			    PickTreeClear;
				MoviesFound := 1;
				perfectMatch := 1;
			  end
			else
			  begin			  
                if GetParam('MaxPreview') = '0' then
                  begin
                    filmTitle := filmTitle + ' (' + filmYear + ')';
                  end
                else
                  begin
                    if filmOriginalTitle<>'' then
                      filmTitle := filmTitle + ' - ' + filmOriginalTitle;
                    filmTitle := filmTitle + ' (' + filmYear;
                    if filmDirectors<>'' then
                      filmTitle := filmTitle + ' - ' + filmDirectors;
                    if filmCategory<>'' then
                      filmTitle := filmTitle + ' - ' + filmCategory;
                    filmTitle := filmTitle + ')';
                  end;
                if pos('/nick/', filmUrl) = 0 then
                   begin
                   MoviesFound := MoviesFound + 1;
                   PickTreeAdd(filmTitle, filmUrl);
                   end
			  end;
          end;
        end;
      until ((partialUrl='') or (perfectMatch=1));
      PopulatePickTree := filmUrl;
end;


// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  html of search page (string)
// OUT: movie url
// ---------------------------------
function analyzePage(htmlSearchPage: string): string;
var
  FilmId: string;
begin
  result := '';
  if pos('Non ho trovato nulla!', htmlSearchPage) > 0 then
    begin
      ShowMessage('Title not found / Nessun film trovato.');
      analyzePage := ''
    end
  else
    begin
      analyzePage := 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(4,2,2) then
    begin
      TranslatedStr := FullTrim(GetField(fieldTranslatedTitle));
      OriginalStr := FullTrim(GetField(fieldOriginalTitle));
      OverwriteOriginalTitle := 1;
      if (TranslatedStr <> '') then
	  	begin
          MovieName := TranslatedStr;
		end		
      else
	    begin
          MovieName := OriginalStr;
		  if (OriginalStr <> '') then
		    OverwriteOriginalTitle := 0;		  
		end;

      // Retrieve director name and year from title. Accepted title example "nome film (director, year) other text". Example: "Junkyard dog (Bass, 2010) dvdrip ita ac3 eng aac"
      ParenthesisOpenedPos := pos('(', MovieName);
	  if (ParenthesisOpenedPos > 0) then
	    begin
		  CommaPos := pos(',', TextAfter(MovieName, '(')) + ParenthesisOpenedPos;
		  ParenthesisClosedPos := pos(')', TextAfter(MovieName, '(')) + ParenthesisOpenedPos;
		end  
	  else
        begin	  
	      CommaPos := 0;
	      ParenthesisClosedPos := 0;		  
		end;  
	  DirectorName := '';
	  YearDate := '';
      if ((GetOption('Use director & year values') = 1) AND (ParenthesisOpenedPos <> 0) AND (CommaPos > ParenthesisOpenedPos) AND (ParenthesisClosedPos <> CommaPos)) then
		begin
		  DirectorName := FullTrim(copy(MovieName, ParenthesisOpenedPos + 1, CommaPos - ParenthesisOpenedPos - 1)); 
		  YearDate := FullTrim(copy(MovieName, CommaPos + 1, ParenthesisClosedPos - CommaPos - 1));
          MovieName := FullTrim(copy(MovieName, 1, ParenthesisOpenedPos - 1));  
		  OverwriteOriginalTitle := 1;
		end;
		
      if (Input('Film.TV.It', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
        begin
		  if ((OverwriteOriginalTitle = 0) AND (MovieName <> OriginalStr)) then
		    // Used 'Original title' field value but it was manually changed in input field, so field 'Original title' will be overwritten in any case		  
		    OverwriteOriginalTitle := 1;
          //Get search page
          MoviesFound := 0;
//        searchUrl := QueryBase + UrlEncode(MovieName);
          searchUrl := QueryBase + Stringreplace(MovieName, ' ', '+');
          searchUrl := AnsiLowerCaseNoAccents(searchurl);       //fs 2016.09.05
//FS 2016.02.24                    PageStr := RemoveextraChars(searchUrl);
          Pagestr := GetPage(searchUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          //Analyze search page and get movie url (user choice)
          MovieUrl := analyzePage(PageStr);
          // Get movie page
          if MoviesFound = 0 then
              exit;
//FS 2016.02.24          PageStr := RemoveextraChars(MovieUrl);
          Pagestr := GetPage(MovieUrl);      //FS 2016.02.24
          PageStr := UTF8Decode(PageStr);
          Pagestr := Stringreplace(Pagestr, '&rsquo;', '´');
          //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 4.2.2)');
end.

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-06-24 03:48:33
by fulvio53s03
OK, grazie.
:)

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-06-24 05:38:48
by antp
Thanks, it is updated on the server

Re: [UPD ITA] Filmtv.it aggiornato

Posted: 2020-06-24 08:56:42
by mrobama
@fulvio53s03 : sono a "lavoro" su un nuovo script multisito che interroga a cascata i principali siti italiani in caso di ricerca infruttuosa, quindi se non trova qualcosa su FilmTV (ad esempio) allora lo ricerca su MyMovies, se neanche lì trova nulla continua con FilmScoop e poi su ComingSoon. E' tutto a livello progettuale, non so neanche se è fattibile, al momento sto procedendo così: prendo i 4 script di questi 4 siti e li trasformo in file ips principale e file pas. Porto tutto nel file pas, variabili, costanti, funzioni e il file principale si limita a lanciare il tutto nel file pas. Il vantaggio di questa soluzione dovrebbe essere che i file pas (le unit) funzionano un po' da classi, ogni unit è specifica di un sito e così il codice è più facile da manutenere. Lo svantaggio di questa soluzione, temo, è che i file pas non passano per l'UPDATE SCRIPT (devo verificare). Ovviamente è un lavoro lungo e non ho idea di quando finirò ...

-----------------------

I'm at work on a multisite script. The script will look for a title on an italian site (FilmTV) then if the searching fails the script will find on another site (MyMovies) and so on. This is a huge project, I'll use existing scripts and I'll save their ips files as ips (with only the main inside) and pas (the unit with all the code, constants, variables, functions and procedures). I have to check if UPDATE SCRIPT works fine with new and updated pas files, I hope so or we have to update they manually. It's a long work and I don't know when and if I'll finish it ...