Re: [UPD ITA] Filmtv.it aggiornato
Posted: 2018-05-01 16:02:47
filmTv da me funziona.... https://postimg.cc/image/vqu8tevmz/
forse ho dimenticato di postare qualche variazione?
filmTv works for me .... https://postimg.cc/image/vqu8tevmz/
maybe I forgot to post some variation?
forse ho dimenticato di postare qualche variazione?
filmTv works for me .... https://postimg.cc/image/vqu8tevmz/
maybe I forgot to post some variation?
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.3 13.3.2018
Requires=4.2.0
Comments=
License=
GetInfo=1
RequiresMovies=1
[Options]
[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
var
searchUrl, MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr: string;
MoviesFound: 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 <> getfield(fieldTranslatedTitle) then
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: string;
filmSearched: string;
begin
PickTreeClear;
filmSearched := getfield(fieldFilePath);
if filmSearched = '' then
filmSearched := MovieName;
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 := '';
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 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;
until (partialUrl='');
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,0) 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;
// 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, '’', '´');
//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.0)');
end.