unit FilmTvPas; { Main var, constants and functions } uses ItalianSharedPas; const FT_UnitVersion = 3; //Query constants FT_UrlBase = 'https://www.filmtv.it'; FT_QueryBase = FT_UrlBase + '/cerca/?titolo='; FT_QueryFilm = FT_UrlBase + ''; //Search page constants FT_Apice = #39; FT_xFilmSearchStart = ' 0) then // Analyze movie page and set movie fields FilmTvSetMovieFields(); result := SharedSerializeMe(); end; // -------------------------------- // ANALYZE FIRST SEARCH RESULT PAGE // IN: none // -------------------------------- procedure FilmTvSearchResults; var myUrl: string; pageNumberMovies: integer; begin pageNumberMovies := 0; repeat SharedSetMovieUrl(''); SharedSetMoviesFound(0); pageNumberMovies := pageNumberMovies + 1; myUrl := AnsiLowerCaseNoAccents(SharedGetMovieName()); myUrl := FT_QueryBase + SharedAdvancedUrlEncode(myUrl, false); if (SharedGetYearDate() <> '') then myUrl := myUrl + '&dal=' + IntToStr(StrToInt(SharedGetYearDate(), 0) - 5) + '&al=' + IntToStr(StrToInt(SharedGetYearDate(), 0) + 5); myUrl := myUrl + '&p=' + IntToStr(pageNumberMovies); SharedHTTPGetPage(myUrl); if (pos('Non hai trovato nulla!', SharedGetLatestPageHtml()) > 0) then exit; FilmTvPopulatePickTree(); SharedPickTreeExec(); until (copy(SharedGetMovieUrl(), 1, 5) <> 'next:'); end; // ----------------------- // ANALYZE MOVIE DATA PAGE // IN: none // ----------------------- procedure FilmTvSetMovieFields; var originalTitle, translatedTitle, rating, year, producers, directors, actors, duration, categories, certification, countries, description, comments, picture: string; i, h, m: integer; CharPos, lungo, posbar: integer; TempStr, TempImg, hh, mm, temp: string; PosParAperta, PosParChiusa: integer; imageLink: string; sep1, sep2: string; htmlStr, tempvar: string; dati_generali, Title_Orig, Title_Transl, Paese, Anno, Categoria, durata, voto: string; begin SharedHTTPGetPage(SharedGetMovieUrl()); htmlStr := Stringreplace(SharedGetLatestPageHtml(), '’', '´'); Title_Transl := RemoveHTML(TextBetween(htmlStr, FT_cTranslTitleStart, FT_cTranslTitleEnd)); Title_Transl := AnsiMixedCase(AnsiLowerCase(FullTrim(Title_Transl)), ' '); if (copy(Title_Transl, (Length(Title_Transl) - 3), 4) = ' (i)') then Title_Transl := copy(Title_Transl, 1, (Length(Title_Transl) - 4)) else if (copy(Title_Transl, (Length(Title_Transl) - 4), 5) = ' (ii)') then Title_Transl := copy(Title_Transl, 1, (Length(Title_Transl) - 5)) else if (copy(Title_Transl, (Length(Title_Transl) - 5), 6) = ' (iii)') then Title_Transl := copy(Title_Transl, 1, (Length(Title_Transl) - 6)); //get Translated title translatedTitle := Title_Transl; //Get original title Dati_generali := FullTrim(TextBetween(htmlStr, '')); //fs2016.09.28 Title_Orig := TextBetween(Dati_generali, '
  • ', '

  • '); lungo := (length(Title_Orig) + 18); Title_Orig := FullTrim(Title_Orig); originalTitle := AnsiMixedCase(AnsiLowerCase(Title_Orig), ''); //Get Rating, duration, countries, categories, country, year if (length(Title_Orig) > 0) then //altri paesi begin Delete(Dati_generali, 1, lungo); Paese := TextBetween(Dati_generali, '
  • ', '
  • ')); durata := FullTrim(Textbetween(Dati_generali, 'durata', '')); end else begin //Italia Paese := TextBetween(Dati_generali, '
  • ', '
  • ')); durata := FullTrim(Textbetween(Dati_generali, 'durata', '')); end; HTMLRemoveTags(Paese); PosBar := AnsiLastPosEx(',', Paese, true, true); if PosBar > 0 then Delete(Paese, (posbar), (length(Paese) - PosBar)); //cut old filename countries := FullTrim(Paese); voto := FT_cRatingStart + TextBetween(htmlStr, FT_cRatingStart, '') + FT_cRatingEnd; rating := TextBetween(Voto, ' 0) then temp := '' else // Check if it's a valid JPEG image and not a WEBP or invalid image if (copy(GetPage(temp), 0, 4) <> (Chr(195) + Chr(191) + Chr(195) + Chr(152))) then temp := ''; picture := temp; SharedSecureSetAllFields(originalTitle, translatedTitle, rating, year, '', '', '', directors, actors, duration, categories, '', countries, description, comments, SharedGetMovieUrl(), picture); end; // -------------------------------------------------------------------------------------------------------------------------------------- // "private" functions e procedures // -------------------------------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------- // Returns a text field from an input string strIn (html page) // delIn and delOut: text field delimiters // ----------------------------------------------------------- function FilmTvGetTextDelimited(lIn: string; lOut: string; var strIn: string): string; var StartPos, 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 // IN: none // ----------------------------------------- procedure FilmTvPopulatePickTree(); var filmHTML, filmHTMLfull, filmUrl, partialUrl, resultType: string; filmTitle, filmOriginalTitle, filmYear, filmDirectors: string; nextPageAvailable: boolean; begin SharedPickTreeCreate(); filmHTMLfull := SharedGetLatestPageHtml(); repeat filmHTML := FilmTvGetTextDelimited(FT_xFilmSearchStart, FT_xFilmSearchEnd, filmHTMLfull); resultType := FilmTvGetTextDelimited(FT_xResultTypeStart, FT_xResultTypeEnd, filmHTML); if ((resultType <> 'RECENSIONE') and (resultType <> 'POST') and (resultType <> 'NICKNAME')) then begin partialUrl := FilmTvGetTextDelimited(FT_xFilmUrlStart, FT_xFilmUrlEnd, filmHTML); if (partialUrl <> '') then begin filmUrl := FT_UrlBase + partialUrl; filmTitle := FilmTvGetTextDelimited(FT_xTitleStart, FT_xTitleEnd, filmHTML); filmOriginalTitle := FilmTvGetTextDelimited(FT_xOriginalTitleStart, FT_xOriginalTitleEnd, filmHTML); filmYear := FilmTvGetTextDelimited(FT_xYearStart, FT_xYearEnd, filmHTML); filmDirectors := FilmTvGetTextDelimited(FT_xDirectorsStart, FT_xDirectorsEnd, filmHTML); if pos('/nick/', filmUrl) = 0 then if SharedPickTreeMatching(filmOriginalTitle, filmTitle, filmYear, filmDirectors) then SharedSetMovieUrl(filmUrl) else SharedPickTreeAdd(filmTitle, filmOriginalTitle, filmDirectors, filmYear, filmUrl); end; end; until ((partialUrl = '') OR (SharedGetMovieUrl() <> '')); nextPageAvailable := (pos('"Vai alla prossima pagina"', filmHTMLfull) > 0); SharedPickTreeClose(nextPageAvailable); end; end.