Script for 35mm.it
Posted: 2003-09-17 10:42:54
Can I have some suggestions for a script grabbing on 35mm.it?
Thanks
vinz
Thanks
vinz
Code: Select all
// GETINFO SCRIPTING
// 35mm.it
(***************************************************
* Movie importation script for: *
* 35mm.it, http://www.35mm.it *
* *
* (c) 2003 Ivan Saorin ivan.saorin@email.it *
* *
* For use with Ant Movie Catalog 3.4.1 *
* www.ant.be.tf/moviecatalog ··· www.buypin.com *
* *
* 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 *
***************************************************)
program www35mm;
var
OriginalMovieName: string;
TranslatedMovieName: string;
TheMovieAddress: string;
FirstUrl: string;
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;
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;
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineStart: integer;
BeginPos: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
if (FindLine('35mm.it - Problema temporaneo di connessione', Page, 0) <> -1) then
begin
ShowMessage('35mm.it - Problema temporaneo di connessione.' + #13#10 + 'Servizio momentaneamente non disponibile.');
exit;
end;
LineStart := FindLine('<select ', Page, 0);
if LineStart = -1 then
begin
LineStart := FindLine('Film trovati:<b>0</b>', Page, 0);
if LineStart <> -1 then
begin
ShowMessage('Nessun film trovato');
end
else
begin
ShowMessage('Errore nell''esecuzione dello script!');
end;
end
else
begin
PickTreeClear;
AddMoviesTitles(Page);
if TheMovieAddress='' then
begin
if PickTreeExec(Address) then
begin
SetField(fieldURL, Address);
Page.Text := GetPage(Address);
AnalyzeMoviePage(Page);
end;
end
else
begin
SetField(fieldURL, TheMovieAddress);
Page.Text := GetPage(TheMovieAddress);
AnalyzeMoviePage(Page);
end;
end;
Page.Free;
end;
function getFieldValues(marker, markerend: string; Page: TStringList; var LineNr: integer): string;
var
temp: string;
idx: integer;
begin
result := '';
LineNr := FindLine(marker, Page, LineNr);
if (LineNr > -1) then
begin
temp := Page.getString(LineNr);
idx := Pos(marker, temp);
idx := idx + length(marker);
temp := copy(temp, idx, length(temp) - idx);
LineNr := LineNr + 1;
while (Pos(markerend, Page.getString(LineNr)) = 0) do
begin
temp := temp + Page.getString(LineNr);
LineNr := LineNr + 1;
end;
temp := StringReplace(temp, '- ', '- ');
temp := StringReplace(temp, '<br>', #13#10);
HTMLRemoveTags(temp);
result := temp;
end;
end;
function getFieldValue(marker, markerend: string; Page: TStringList; var LineNr: integer; mantainMarker: boolean): string;
var
Line: string;
markerEndLength: integer;
idx1: integer;
l: integer;
begin
result := '';
l := LineNr;
markerEndLength := length(MarkerEnd);
LineNr := FindLine(marker, Page, LineNr);
//ShowMessage(marker + '=' + IntToStr(LineNr));
if (LineNr = -1) then
begin
LineNr := l;
exit;
end;
Line := Page.GetString(LineNr);
idx1 := Pos(marker, Line);
while (idx1 = -1) do
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
idx1 := Pos(marker, Line);
end;
if (mantainMarker) then
idx1 := idx1 + length(marker);
while (copy(Line, idx1, markerEndLength) <> markerEnd) do
begin
result := result + copy(Line, idx1, 1);
idx1 := idx1 + 1;
end;
idx1 := idx1 + markerEndLength;
end;
function parseDuration(value: string): string;
var
idx: integer;
hours, minutes: string;
h, m: integer;
begin
result := '';
if (length(value) = 0) then
exit;
idx := Pos('e', value);
hours := copy(value, 1, idx - 3);
minutes := copy(value, idx + 2, Length(value) - idx - 2);
h := StrToInt(hours, 2);
m := StrToInt(minutes, 2);
result := IntToStr(h * 60 + m);
end;
procedure getBigImage(Address: string; var result: string);
var
Page: TStringList;
idx: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
idx := 0;
result := 'http://www.35mm.it' + trim(getFieldValue('<img name="img_pers" src="', '"', Page, idx, true));
Page.Free;
end;
procedure AnalyzeMoviePage(Page: TStringList);
var
Fine: Integer;
Line: string;
LineNr: Integer;
Field: integer;
imgSmall: string;
temp, marker: string;
cnt, idx: integer;
multimedialink, duration: string;
begin
Fine := 0;
LineNr := 0;
// ImmagineSmall
imgSmall := trim(getFieldValue('/immagini/film/', '"', Page, LineNr, false));
// Translated Title
SetField(fieldTranslatedTitle, trim(getFieldValue('<span class="titolorosso">', '</span>', Page, LineNr, true)));
// Original Title
SetField(fieldOriginalTitle, trim(getFieldValue('<b>', '</b>', Page, LineNr, true)));
LineNr := LineNr + 1;
// Country
SetField(fieldCountry, trim(getFieldValue(' ', '<br>', Page, LineNr, true)));
LineNr := LineNr + 1;
// Duration
duration := parseDuration(trim(getFieldValue(' ', '<br>', Page, LineNr, true)));
SetField(fieldLength, duration);
LineNr := LineNr + 1;
// Type
SetField(fieldCategory, trim(getFieldValue('<b>', '</b>', Page, LineNr, true)));
LineNr := LineNr + 1;
// Direction
temp := trim(getFieldValue('">', ' ', Page, LineNr, true)) + ' ';
LineNr := LineNr + 1;
temp := temp + trim(getFieldValue(' ', '</a>', Page, LineNr, true));
SetField(fieldDirector, temp);
LineNr := LineNr + 1;
// Year
SetField(fieldYear, trim(getFieldValue('Anno: ', ' ', Page, LineNr, true)));
LineNr := LineNr + 1;
cnt := 0;
while (cnt < 2) do
begin
temp := trim(Page.getString(LineNr));
if (temp <> '') then
while ((copy(temp,1,1) = ' ') or (copy(temp,1,1) = #9)) do
delete(temp, 1, 1);
if ((temp <> '<br>') and (temp <> '</td>'))then
cnt := 0
else if (temp = '</td>') then
cnt := 10
else
cnt := cnt + 1;
LineNr := LineNr + 1;
end;
// Producer
if (cnt < 5) then
begin
SetField(fieldProducer, trim(Page.getString(LineNr)));
LineNr := LineNr + 1;
end;
// Description
temp := getFieldValues('<img src="/img/trama.gif" width="54" height="12" border="0"><br><br>', '</td>', Page, LineNr);
if (temp <> '') then
begin
temp := StringReplace(temp, #9, '');
if (copy(temp, length(temp) - 14, 15) = 'Leggi il finale') then
temp := copy(temp, 1, length(temp) - 15);
SetField(fieldDescription, trim(temp));
LineNr := LineNr + 1;
end;
// Stars
marker := 'Attori Protagonisti' + #13#10;
temp := getFieldValues('<img src="/img/protagonisti.gif" width="138" height="12" border="0"><br><br>', '</td>', Page, LineNr);
if (temp <> '') then
begin
temp := StringReplace(temp, #9, '');
LineNr := LineNr + 1;
end;
marker := marker + temp + #13#10;
// Cast
marker := marker + 'Cast' + #13#10;
temp := getFieldValues('<img src="/img/cast.gif" width="42" height="12" border="0"><br><br>', '</td>', Page, LineNr);
if (temp <> '') then
begin
temp := StringReplace(temp, #9, '');
LineNr := LineNr + 1;
end;
marker := marker + temp + #13#10;
// Crew
temp := getFieldValues('<img src="/img/crew.gif" width="46" height="12" border="0"><br><br>', '</td>', Page, LineNr);
if (temp <> '') then
begin
temp := StringReplace(temp, #9, '');
LineNr := LineNr + 1;
end;
marker := marker + temp + #13#10;
SetField(fieldActors, trim(marker));
// Review
temp := getFieldValues('<a class="link" href="/magazine/recensioni/vedi_recensione_film.xtml?id=7951">', '</a><br><br>', Page, LineNr);
if (temp <> '') then
begin
while (copy(temp,1,1) = #9) do
delete(temp,1,1);
marker := temp;
LineNr := LineNr + 2;
temp := Page.getString(LineNr);
HTMLRemoveTags(temp);
while (copy(temp,1,1) = #9) do
delete(temp,1,1);
marker := marker + #13#10 + temp;
SetField(fieldComments, marker);
end;
// Multimedia link
multimedialink := 'http://www.35mm.it' + trim(getFieldValue('/film/tuttiifilm/multimedia.xtml?id=', '"', Page, LineNr, false));
if (multimedialink <> 'http://www.35mm.it') then
begin
getBigImage(multimedialink, temp);
GetPicture(temp, False);
end
else
GetPicture(imgSmall, False);
DisplayResults;
end;
procedure AddMoviesTitles(Page: TStringList);
var
LineNr: Integer;
Line: string;
MovieTitle, MovieAddress: string;
BeginPos, EndPos: Integer;
template, completeCode, ch: string;
code0, code1: string;
cnt, idx, idx1: integer;
begin
template := '<option value="';
TheMovieAddress := '*';
LineNr := 0;
LineNr := FindLine('name="id_f"',Page,LineNr);
if (LineNr = -1) then
begin
ShowMessage('Errore nell''esecuzione dello script!');
exit;
end;
LineNr := LineNr + 1;
completeCode := '';
cnt := 0;
while (true) do
begin
MovieTitle := '';
completeCode := '';
while (Line = '') do
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
if (FindLine('</select>',Page,LineNr) = LineNr) then break;
idx := pos(template, Line);
idx := idx + length(template);
ch := copy(Line, idx, 1);
while (ch <> '"') do
begin
completeCode := completeCode + ch;
idx := idx + 1;
ch := copy(Line, idx, 1);
end;
while (copy(Line, idx, 1) <> '>') do
begin
idx := idx + 1;
end;
MovieTitle := copy(Line, idx + 1, length(Line) - idx);
idx1 := Pos('!', completeCode);
if (idx1 > 0) then
begin
code0 := copy(completeCode, 1, idx1 - 1);
code1 := copy(completeCode, idx1+1, length(Line) - idx1 + 1);
end
else
code0 := completeCode;
if (code1 <> '') then
MovieAddress := code1
else
MovieAddress := 'http://www.35mm.it/film/tuttiifilm/schedafilm.xtml?id=' + code0 + '&';
PickTreeAdd(MovieTitle, MovieAddress);
Line := '';
if (cnt = 0) then
TheMovieAddress := MovieAddress;
cnt := cnt + 1;
end;
if (cnt > 1) then
TheMovieAddress := '';
end;
begin
if CheckVersion(3,4,1) then
begin
TranslatedMovieName := GetField(fieldTranslatedTitle);
OriginalMovieName := GetField(fieldOriginalTitle);
if (Input('35mm.it', 'Immetti il titolo italiano del film:', TranslatedMovieName) and
Input('35mm.it', 'Immetti il titolo originale del film:', OriginalMovieName)) then
begin
FirstUrl := 'http://www.35mm.it/ricerca/avanzata/ricerca_avanzata_film.xtml?homepage=yes&ricerca=yes';
if (TranslatedMovieName <> '') then
FirstUrl := FirstUrl + '&titolo=' + UrlEncode(TranslatedMovieName);
if (OriginalMovieName <> '') then
FirstUrl := FirstUrl + '&titoloriginale=' + UrlEncode(OriginalMovieName)
else
FirstUrl := FirstUrl + '&titoloriginale=' + UrlEncode(TranslatedMovieName);
AnalyzePage(FirstUrl);
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
end.