
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
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, '’', '´');
//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.
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, '’', '´');
//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.
puoi fornire il titolo del film e un dettaglio delle opzioni impostate (finestrella a destra della videata di lancio dello script)?
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, '’', '´');
//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.