[REL ITA] film.tv.it updated script version 2.0
Posted: 2011-12-15 08:39:58
New script's fix, checked with more than 20 movies (from 1950's to 2011's) it looks to be OK.
This script requires at least the version 3.5.1 of Ant Movie Catalog

This script requires at least the version 3.5.1 of Ant Movie Catalog
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Fulvio53s03 (based on Fiezul, PIvello, Valerino & others works).
Title=FilmTV
Description=Get movie info from Film TV
Site=www.Film.TV.it
Language=IT
Version=2.0.0 15.12.2011
Requires=3.5.1
Comments=15.12.2011 FilmTV site restyling
License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program
GetInfo=1
[Options]
***************************************************)
program FilmTVIt;
uses
StringUtils7552; // Script needs external unit StringUtils7552.pas in scripts folder !
const
//Query constants
UrlBase = 'http://www.film.tv.it/';
QueryBase = UrlBase + 'cerca.php?q=';
QueryFilm = UrlBase + '';
//Search page constants
Apice = #39;
cStartFilmUrl = '<div class="thumb"><a href="/'; // ID start marker
cEndFilmUrl = '"><span><img src='; // ID end marker
cStartTitle = 'title="'; // Title start marker
cEndTitle = '">'; // Title end marker
//Film page constants
cStartTranslTitle = '<h1>'; // Translated title start marker
cEndTranslTitle = '</h1>'; // Translated title end marker
cStartOrigTitle = '[<i>'; // Original title start marker
cEndOrigTitle = '</i>'; // Original title end marker
cStartImgLink = '<div id="filmScheda_sx">'; // Image start marker
cEndImgLink = 'width='; // Image end marker
cStartListItem = ', ';
cEndListItem = ', '; // Generic field marker
cStartCategory = '/">'; // Director start marker
cEndCategory = '</a>'; // Single Director end marker
cEndDirectors = '<br />'; // Directors end marker
cStartDirector = 'Regia di '; // Single Director start marker
cEndDirector = '</a>'; // Single Director end marker
cStartCast = 'Con'; // Cast start marker
cEndCast = '</div>'; // Cast end marker
cStartActor = '">'; // Actor start marker
cEndActor = '</a>'; // Actor end marker
cEndGeneric2 = '</td>'; // Generic end marker 2
cStartDesc = '<p class="trama">'; // Description start marker
cEndDesc = '</p>'; // Description end marker
cStartComm = '<p class="commento">'; // Comment start marker
cEndComm = '</p>'; // Comment end marker
cStartURL='<li id="sel"><a href="/';
cEndURL='" title="scheda"';
InitYear = '<span>';
EndYear = '</span>';
var
searchUrl,MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr: string;
// --------------------------------------------------
// PAGE PACKING (remove extra spaces, tabs & CR) by Pivello
// IN: page Url (string)
// OUT: compact page (string)
// --------------------------------------------------
function RemoveExtraChars(Url: string): string;
var
Page: TStringList;
TmpPageStr: string;
Temp: string;
PackedPage: string;
CharPos: Integer;
n: Integer;
begin
Page := TStringList.Create;
TmpPageStr := '';
Page.Text := GetPage(Url);
for n := 0 to Page.Count - 1 do
PackedPage := PackedPage + ' ' + Page.GetString(n);
repeat
CharPos := pos(' ', PackedPage);
if CharPos = 0 then
CharPos := pos(#9, PackedPage);
if CharPos <> 0 then
begin
Temp := copy(PackedPage, 1, CharPos - 1);
Delete(PackedPage, 1, CharPos);
PackedPage := Temp + PackedPage;
end;
until((pos(' ', PackedPage) = 0) and (pos(#9, PackedPage) = 0));
result := PackedPage;
Page.Free;
end;
// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN: none
// OUT: set Ant fields
// -----------------------
procedure SetMovieFields (htmlStr: string);
var
i, h, m: integer;
Duration, Description, Cast, TempStr, TempImg, hh, mm,temp: string;
tempDirector, director: string;
PosParAperta, PosParChiusa: integer;
anno: string;
imageLink: string;
sep1, sep2: string;
SaveHtmlstr, tempvar : string;
begin
SetField(fieldDate, DateToStr(Date));
// General movie description fields
anno := '';
TranslatedStr := getTextDelimited(cStartTranslTitle, cEndTranslTitle,htmlStr);
PosParAperta := pos('(', TranslatedStr);
PosParChiusa := pos(')', TranslatedStr);
if PosParChiusa = (PosparAperta + 5) then
begin
anno := copy(TranslatedStr, PosParAperta +1, (PosParchiusa - posParAperta -1));
Setfield(fieldYear, anno);
Delete(TranslatedStr, PosParAperta -1, PosParChiusa);
end
SetField(fieldTranslatedTitle, TranslatedStr);
SetField(fieldOriginalTitle, getTextDelimited(cStartOrigTitle, cEndOrigTitle,htmlStr));
if GetField(fieldOriginalTitle)='' then
sep1:='['
else
sep1:= cStartListItem;
tempvar:= getTextDelimited(sep1, cEndListItem, htmlStr);
SetField(fieldCountry, getTextDelimited('>', '<',tempvar));
tempvar:= getTextDelimited(cStartListItem, cEndListItem, htmlStr);
SetField(fieldCategory, getTextDelimited(cStartCategory,cEndCategory,tempvar));
temp := Textbetween(htmlStr, 'durata ', apice);
SetField(fieldLength, temp);
//Get actors
temp:= TextBetween(htmlstr, cStartDirector,cEndDirector);
temp:= Textafter(temp, '/">');
setfield(FieldDirector, Temp);
temp:= getTextDelimited(cStartCast,cEndCast ,htmlStr);
SetField(fieldActors, getCSVField(cStartActor,cEndActor,temp));
if length(anno) < 1 then
SetField(fieldYear, getTextDelimited('>', '<',tempvar));
//Get comments
SaveHtmlstr:= htmlstr;
temp:= getTextDelimited(cStartDesc,cEndDesc ,htmlStr);
SetField(fieldDescription, temp);
SetField(fieldComments, getTextDelimited(cStartComm,cEndComm ,htmlStr));
htmlstr:= SaveHtmlstr;
//Get URL
temp:= URLBase + getTextDelimited(cStartURL, cEndURL, htmlStr);
SetField(fieldURL, temp);
//Get image
imageLink:= getTextDelimited(cStartImgLink,cEndImgLink,htmlStr);
imagelink := getTextDelimited('<img src="', '"', imagelink);
if imagelink <> 'http://www.film.tv.it/imgbank/DUMMY/no_locandina.jpg' then
GetPicture(imageLink);
end;
//###############################################
//Returns a CSV list from an input string strIn where list items are
//separated by delIn and delOut strings
//##############################################
function getCSVField (delIn:string; delOut: string; Var strIn: string): string;
var
tempOut: string;
begin
result:='';
repeat
tempOut:=getTextDelimited(delIn, delOut,strIn);
if tempOut<>'' then
result:=result + tempOut + cStartListItem;
until tempOut='';
if length(result)>0 then result:=copy(result,1,1+length(result)-3);
end;
//###############################################
//##############################################
//Returns a text field from an input string strIn
//delIn and delOut: text field delimiters
//##############################################
function getTextDelimited(lIn:string; lOut:string;Var strIn:string): string;
var
StartPos: integer;
len:integer;
tempStr: string;
begin
StartPos := pos(lIn, strIn);
if startPos<>0 then
begin
StartPos:=StartPos+Length(lIn);
tempStr:= copy(strIn,StartPos,StartPos+length(strIn));
len := pos(lOut, tempStr);
if len=0 then
result:=''
else
result := copy(strIn, StartPos, len-1); // get Text Out
Delete(strIn, 1, StartPos-1 + len-1 + length(lOut)-2);
end
else
result := '';
HTMLDecode(result);
end;
// ------------------------------------------------------------------
// FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
// if OneFilm flag true return Film Id else populate PickTree
// IN: OneFilm flag (bool)
// OUT: one page ID (string)
// ------------------------------------------------------------------
procedure PopulatePickTree();
var
filmUrl, partialUrl: string;
filmTitle, filmYear: string;
StartPos: integer;
EndPos: integer;
begin
PickTreeClear;
repeat
partialUrl:= getTextDelimited(cStartFilmUrl,cEndFilmUrl,PageStr);
filmUrl:=UrlBase + partialUrl;
filmTitle:=getTextDelimited(cStartTitle,cEndTitle,PageStr);
filmYear:=getTextDelimited(InitYear, EndYear,PageStr);
filmTitle := filmtitle + ' ' + filmYear;
if partialUrl<>'' then
PickTreeAdd(filmTitle, filmUrl);
until(partialUrl='');
end;
// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN: html of search page (string)
// OUT: movie url
// ---------------------------------
function getMovieUrl(htmlSearchPage: string): string;
var
FilmId: string;
begin
result:='';
if pos('Non ho trovato nulla!', htmlSearchPage) > 0 then
ShowMessage('Title not found / Nessun film trovato.')
else
begin
PopulatePickTree();
if not PickTreeExec(result) then exit; //Select one title
end;
end;
// ----------
// MAIN:
// IN: none
// OUT: none
// ----------
begin
if CheckVersion(3,5,1) then
begin
TranslatedStr := GetField(fieldTranslatedTitle);
OriginalStr := GetField(fieldOriginalTitle);
if (TranslatedStr <> '') then
MovieName := TranslatedStr
else
MovieName := OriginalStr;
if(Input('Film.TV.It', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
begin
//Get search page
searchUrl := QueryBase + UrlEncode(MovieName);
PageStr := RemoveExtraChars(searchUrl);
PageStr := UTF8Decode(PageStr);
//Analyze search page and get movie url (user choice)
MovieUrl:=getMovieUrl(PageStr);
// Get movie page
PageStr := RemoveExtraChars(MovieUrl);
PageStr := UTF8Decode(PageStr);
Pagestr := Stringreplace(Pagestr, '’', '´');
//Analyze movie page and set movie fields
SetMovieFields(PageStr);
end;
end
else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.1)');
end.