(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Andrea Cristaudo (achris@tiscalinet.it) & Stefano Mora (stefano.mora@libero.it) & Necrodeath & AttSta (supertramp7@gmail.com) & Fulvio53s03 & MrObama
Title=Cinematografo.it
Description=Script per il sito Cinematografo.it
Site=http://www.cinematografo.it
Language=IT
Version=1.19 - 17.03.2018 MrObama
Requires=3.5.0
Comments=(c) 2003 Andrea Cristaudo (achris@tiscalinet.it)|(c) 2005 Necrodeath|(c) 2009 Stefano Mora (stefano.mora@libero.it)|(c) 2012 AttSta (supertramp7@gmail.com)|(c) 2012 Fulvio53s03
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
GetInfo=1
RequiresMovies=1
[Options]
NoPersonaggio=1|1|1=Non riporto il nome del personaggio|0=Riporto il nome del personaggio
NoTrattoDa=0|0|1=Non inserisco la descrizione 'Tratto da'|0=Includo l'eventuale descrizione 'Tratto da'
NoNote=0|0|1=Non riporto le 'Note'|0=Riporto le 'Note'
[Parameters]
***************************************************)
program Cinematografo;
var
MovieName, titolo_tradotto, titolo_originale: string;
idx : integer;
const
PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\Cinematografo\';
//MOVIE = '';
SITE = 'http://www.cinematografo.it';
SITE1 = 'http://wwwd.cinematografo.glauco.it/bancadati/consultazione/';
SITE3 = '&completa=si';
// -- Formatta la stringa cercando le prime lettere rendendole maiuscole
function PrimeMaiu(str: string): string;
begin
str := AnsiLowerCase(str);
str := AnsiMixedCase(str, ' -/');
Result := str;
end;
// ---
function RemoveTabs(Pattern: string): string;
begin
repeat
Delete(Pattern, 1, 1);
until ord(copy(Pattern, 1, 1)) <> 9;
result := Pattern;
end;
function Space2html(Url: string): string;
var
Temp : string;
SpacePos : Integer;
begin
repeat
SpacePos := pos(' ', Url);
if SpacePos <> 0 then
begin
Temp := copy(Url, 1, SpacePos -1);
Delete(Url, 1, SpacePos);
Temp := Temp + '%20' + Url;
Url := Temp;
end;
until pos(' ', Url) = 0;
result := Url;
end;
//Elimina il personaggio interpretato dall'attore --- Necrodeath (2005)
Function TogliPersonaggio(Line : string) : string;
var
lunghezza, i : integer;
tmp, t: string;
elimino : boolean;
Begin
lunghezza := length(Line);
i := 0;
while i <= lunghezza do
Begin
i := i+1;
tmp := copy(Line, i, 1);
elimino := false;
if (tmp = ':') then
Begin
elimino := true;
while elimino = true do
Begin
tmp := copy(Line, i, 1);
i := i+1;
if (tmp = '@') then
Begin
if (i <> lunghezza + 1) then
begin
t := t + tmp;
end
elimino := false;
end;
end;
end
else
Begin
t := t + tmp;
end;
end;
TogliPersonaggio := t;
end;
// ---
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
result := i;
Break;
end;
end;
// ----
// Analizza la lista dei risultati ricerca
procedure AnalyzeResults(Address: string);
var
Page: TStringList;
LineNr: integer;
BeginPos: integer;
Line: string;
xPos: integer;
yPos: integer;
begin
//ShowMessage(Address);
Page := TStringList.Create;
Page.Text := GetPage(Address);
idx := 0;
// Debug
//Page.SaveToFile(PATHLOG+MovieName+'.lst');
//Page.LoadFromFile(PATHLOG+MOVIE+'.res0');
//AnalyzeMoviePage(Page);
//exit procedure;
// Debug
LineNr := FindLine('>0 risultati per ricerca', Page, 0);
if LineNr <> -1 then
begin
ShowError('Spiacente, nessun film trovato');
end
else // Trovati film ! Nota: possono esserci + pagine -> non ancora gestito !
begin
// Crea la lista di film
PickTreeClear;
PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
Address := AddMoviesTitles(Page);
// Se Address non è una stringa vuota vuol dire che ho trovato un unico risultato la cui url è memorizzata proprio dentro Address
// diversamente ho trovato 0 risultati o più di un risultati e quindi procedo col PickTreeExec(Address) e richiedo all'utente di fare la scelta
if Address = '' then PickTreeExec(Address);
if Address <> '' then
begin
// Elimina il jsessionid dall'URL --- AttSta (2010)
xPos := pos(';', Address);
yPos := pos('?', Address);
if (xPos > 0) then
begin
if xPos < yPos then
begin
Address := copy(Address,1,xPos-1) + copy(Address,yPos,length(Address));
end
else
begin
Address := copy(Address,1,xPos-1);
end;
end;
// ---
SetField(fieldURL, Address); // Memorizza il campo URL
// La pagina viene ridiretta quindi costruisco il nuovo Address
Page.Text := GetPage(Address); // Richiede la pagina che verrà ridiretta
// Page.SaveToFile(PATHLOG+MovieName+'Redir.page');
LineNr := FindLine('sch=', Page, 0);
if LineNr = -1 then
begin
ShowError('Errore nella pagina rediretta');
Page.Free;
exit;
end
Line := Page.GetString(LineNr); // Recupera il codice del film
BeginPos := pos('sch=', Line)+3;
Delete(Line, 1, BeginPos);
BeginPos := pos('"', Line);
Line := copy(Line, 1, BeginPos - 1);
Address := SITE1+'/schedafilm_2009.jsp?codice='+Line+SITE3;
// ShowMessage(Address);
Page.Text := GetPage(Address); // Richiede la pagina del film
AnalyzeMoviePage(Page); // Analizza la pagina del film
end;
end;
Page.Free;
end;
// ---
// Analisi ed estrazione dati dalla pagina del film
procedure AnalyzeMoviePage(Page: TStringList);
var
Line: string;
Line2: string;
Line3: string;
Line4: string;
act: string;
LineNr: Integer;
BeginPos, EndPos: Integer;
Field: integer;
ErrorMsg: string;
begin
ErrorMsg := '';
//Debug
//Page.SaveToFile(PATHLOG+MovieName+'.film');
//Page.LoadFromFile(PATHLOG+Movie+'.film');
// Immagine
LineNr := FindLine('class="imgScheda"', Page, 0);
if LineNr>-1 then
begin
Line := Page.GetString(LineNr);
if pos('src="', Line) <> 0 then
begin
BeginPos := pos('src="', Line);
Delete(Line, 1, BeginPos + 4);
EndPos := pos('" ', Line);
Line := SITE1 + copy(Line, 1, EndPos - 1);
Line := Space2html(Line);
// ShowMessage(Line);
GetPicture(Line);
// Verifica eventuali scarti --- AttSta (2010)
if length(Line)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Immagine';
end;
// ---
end;
end;
// Cerca il titolo
LineNr := FindLine('"td_titolo"', Page, 0);
if LineNr > -1 then
begin
//Estrae titolo
Line := Page.GetString(LineNr+1);
//ShowMessage(Line);
HTMLRemoveTags(Line);
Line := Trim(Line);
titolo_tradotto := AnsiMixedCase(AnsiLowerCase(Line), ' ');
titolo_originale := titolo_tradotto;
SetField(fieldTranslatedTitle, titolo_tradotto);
SetField(fieldOriginalTitle, titolo_tradotto);
end;
// Cerca il titolo originale
LineNr := FindLine('>Titolo Originale<', Page, 0);
if LineNr > -1 then
begin
//Estrae titolo originale
Line2 := Page.GetString(LineNr+3);
HTMLRemoveTags(Line2);
Line := Trim(Line2);
// ShowMessage(Line2);
titolo_originale := AnsiMixedCase(AnsiLowerCase(Line), ' ');
end;
if titolo_originale <> titolo_tradotto then
SetField(fieldOriginalTitle, titolo_originale)
else
SetField(fieldOriginalTitle, '');
// Cerca l'anno
LineNr := FindLine('>Anno<', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr+3);
HTMLRemoveTags(Line);
SetField(fieldYear, Line);
// Verifica eventuali scarti --- AttSta (2010)
if length(Line)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Anno';
end;
// ---
end;
// Cerca la durata
LineNr := FindLine('>Durata<', Page, 0);
if LineNr > -1 then
begin
Line2 := Page.GetString(LineNr+3);
// ShowMessage('Dur:'+Line2);
HTMLRemoveTags(Line2);
line2 := trim(line2);
SetField(fieldLength, Line2);
// Verifica eventuali scarti --- AttSta (2010)
if length(Line2)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Durata';
end;
// ---
end;
// Nazione
LineNr := FindLine('>Origine<', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr+3);
HTMLRemoveTags(Line);
SetField(fieldCountry, PrimeMaiu(Trim(Line)));
end;
// Cerca genere
LineNr := FindLine('>Genere<', Page, 0);
if LineNr > -1 then
begin
Line2 := Page.GetString(LineNr+3);
//ShowMessage(Line2);
HTMLRemoveTags(Line2);
Line2 := Trim(Line2);
SetField(fieldCategory, PrimeMaiu(Line2));
// Verifica eventuali scarti --- AttSta (2010)
if length(Line2)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Genere';
end;
// ---
end;
LineNr := FindLine('>Produzione<', Page, 0);
if LineNr > -1 then
begin
// Produzione/Distribuzione
Line := Page.GetString(LineNr+3);
HTMLRemoveTags(line);
line := Trim(line);
//ShowMessage('Distr:'+Line);
SetField(fieldProducer, PrimeMaiu(Line));
// Verifica eventuali scarti --- AttSta (2010)
if length(Line)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Produzione/Distribuzione';
end;
// ---
end;
// Tratto da ... (opzionale)
Line3 := '';
if GetOption('NoTrattoDa')=0 then
begin
LineNr := FindLine('>Tratto da<', Page, 0);
if LineNr > -1 then
begin
line := Page.GetString(LineNr+3);
// ShowMessage(line);
line3 := trim(line);
// line3 := 'Tratto da: ' + line3 + #13#10;
line3 := line3 + #13#10;
// Verifica eventuali scarti --- AttSta (2010)
if length(line3)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Tratto da';
end;
// ---
end;
end;
// Aggiunge Note ai Commenti --- AttSta (2010)
// Note ... (opzionale)
Line4 := '';
if GetOption('NoNote')=0 then
begin
LineNr := FindLine('>Note<', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
// ShowMessage (Line);
BeginPos := pos('>Note<', Line)+35;
Delete(Line, 1, BeginPos);
BeginPos := 1;
EndPos := pos('', Line);
Line := copy(Line,BeginPos,EndPos-BeginPos);
Line4 := trim(Line);
Line4 := StringReplace(Line4, '
', #13#10);
if copy(Line4,1,1)='-' then
begin
Line4 := #13#10 + Line4;
end;
HTMLRemoveTags(Line4);
HTMLDecode(Line4);
Line4 := 'Note: ' + Line4;
//ShowMessage ('['+Line4+']');
// Verifica eventuali scarti --- AttSta (2010)
if length(Line4)=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Note';
end;
// ---
end;
end;
// Cerca regia
LineNr := FindLine('>Regia<', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := pos('_top', Line)+5;
delete( line, 1, beginpos); beginpos:=1;
EndPos := pos('<', Line);
Line2 := copy(Line,BeginPos,EndPos-BeginPos);
HTMLDecode(Line2);
//fs2012.04.02 line2 := copy(Line,BeginPos,EndPos-BeginPos);
//fs2012.04.02 Line2 := StringReplace(Line2, ' ', '');
//Line2 := line; //fs2012.04.02
//HTMLRemoveTags(Line2);
//HTMLDecode(Line2);
//Line2 := StringReplace(Line2, ' ', ' ');
//Line2 := StringReplace(Line2, '")', '"), ');
SetField(fieldDirector, Trim(Line2));
// Verifica eventuali scarti --- AttSta (2010)
if length(Trim(Line2))=0 then
begin
ErrorMsg := ErrorMsg + #13#10 + 'Regia';
end;
// ---
end;
// Attori
LineNr := FindLine('>Attori<', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
//ShowMessage ('ATT:'+Line);
BeginPos := pos('>Attori<', Line)+6; //fs era +78
Delete(Line, 1, BeginPos);
BeginPos := 1;
EndPos := pos('