Code: Select all
// DVDEmpire.com Script Version 2.0.3 bugfixed picturedownload (20070106/bad4u)
program From_dvdempire2;
var
MovieName: string;
MovieName2: string;
// -------------------------------------------------------------------------------------------------------
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;
// -------------------------------------------------------------------------------------------------------
function GetValues(Line : String; UseCommaDelimiter : Boolean): String;
var
Value : String;
StartPos : Integer;
EndPos : Integer;
Delimiter : String;
begin
Result := '';
Line := StringReplace(Line, '•', '');
if (UseCommaDelimiter) then
Delimiter := ','
else
Delimiter := #13 + #10;
while(true) do
begin
StartPos := Pos('">', Line) + 2;
EndPos := Pos('</a>', Line);
Value := Copy(Line, StartPos, EndPos - StartPos);
Line := Copy(Line, EndPos + 1, Length(Line) - EndPos);
if (EndPos < StartPos) then
break;
Value := Trim(Value);
HTMLDecode(Value);
HTMLRemoveTags(Value);
if (Length(Result) > 0) then
Result := Result + Delimiter;
Result := Result + Value;
end;
end;
// -------------------------------------------------------------------------------------------------------
procedure GetInfo(Page: TStringList; ItemID: String);
var Line, Value, Text, AudioFormat, Subtitles, Search, Search2 : String;
LineNr, StartPos, EndPos, LineNrEnd, i, y : Integer;
LineCR: Boolean;
begin
//originální název
LineNr := FindLine('<title>DVD Empire - Item -', Page, 0);
if LineNr >-1 then begin
Line := Page.GetString(LineNr);
StartPos := Pos('DVD Empire - Item -',Line)+5;
Value := Copy(Line, StartPos+15,Length(Line));
HTMLRemoveTags(Value);
HTMLDecode(Value);
SetField(fieldOriginalTitle, Value);
end;
// URL
SetField(fieldURL,'http://www.dvdempire.com/Exec/v4_item.asp?item_id=' + ItemID);
//Rating
LineNr := FindLine('<b>Rating:</b>', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Rating:</b>',Line) + Length('<b>Rating:</b>');
Line := copy(Line, StartPos, Length(Line) - StartPos);
Value := trim( copy(Line, 1, pos('<br />', Line) - 1) );
SetField(fieldRating, Value);
end;
// Year
LineNr := FindLine('<b>Production Year:</b>', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Production Year:</b>', Line) + Length('<b>Production Year:</b>');
Line := Copy(Line, StartPos, Length(Line) - StartPos);
EndPos := Pos(' ',Line);
Value := Trim( Copy(Line, 1, EndPos - 1) );
SetField(fieldYear, Value);
end;
// Runtime
LineNr := FindLine('<b>Length:</b>', Page, 0);
if LineNr >-1 then begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Length:</b>', Line) + Length('<b>Length:</b>');
Line := Copy(Line, StartPos, Length(Line) - StartPos);
EndPos := Pos('mins',Line);
Value := Trim( Copy(Line, 1, EndPos - 1) );
SetField(fieldLength, trim(Value));
end;
// Director
LineNr := FindLine('<b>Directors:</b>', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Directors:</b>', Line) + Length('<b>Directors:</b>');;
Line := Copy(Line, StartPos, Length(Line) - StartPos - 1);
EndPos := Pos('</td>', Line);
Line := Copy(Line, 1, EndPos - 1);
Value := GetValues(Line, true);
SetField(fieldDirector, Value);
end;
// Producer
LineNr := FindLine('<b>Producers:</b>', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Producers:</b>', Line) + Length('<b>Producers:</b>');
Line := Copy(Line, StartPos, Length(Line) - StartPos - 1);
EndPos := Pos('</td>', Line);
Line := Copy(Line, 1, EndPos - 1);
Value := GetValues(Line, true);
SetField(fieldProducer, Value);
end;
// Actors
LineNr := FindLine('<b>Actors:</b>', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos('<b>Actors:</b>', Line) + Length('<b>Actors:</b>');;
Line := Copy(Line, StartPos, Length(Line) - StartPos - 1);
EndPos := Pos('</td>', Line);
Line := Copy(Line, 1, EndPos - 1);
Value := GetValues(Line, false);
SetField(fieldActors, Value);
end;
// Picture
LineNr := FindLine('http://images.dvdempire.com/gen/movies/', Page, 0);
if LineNr > -1 then
begin
Line := 'http://images.dvdempire.com/gen/movies/' + ItemID + 'h.jpg';
GetPicture(Line);
end
else
LineNr := FindLine('http://images2.dvdempire.com/gen/movies/', Page, 0);
if LineNr > -1 then
begin
Line := 'http://images2.dvdempire.com/gen/movies/' + ItemID + 'h.jpg';
GetPicture(Line);
end;
// AudioFormat
LineNr := FindLine('PCM Stereo', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'PCM Stereo';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('Dolby Digital Stereo', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'Dolby Digital Stereo';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('Dolby Digital 5.0', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'Dolby Digital 5.0';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('Dolby Digital 5.1', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'Dolby Digital 5.1';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('Dolby Digital Surround', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'Dolby Digital Surround';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('DTS Stereo', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'DTS Stereo';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('DTS Surround', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'DTS Surround';
SetField(fieldAudioFormat, AudioFormat);
end;
LineNr := FindLine('DTS 5.1', Page, 0);
if LineNr > -1 then
begin
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+'DTS 5.1';
SetField(fieldAudioFormat, AudioFormat);
end;
// Subtitles
Search := '<b>Subtitles:</b>';
LineNr := FindLine(Search, Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos(Search, Line) + Length(Search);
EndPos := Length(Line) - StartPos + 1;
Value := Copy(Line, StartPos, EndPos);
HTMLRemoveTags(Value);
SetField(fieldSubtitles, trim(Value));
end;
// Genres
Search := '<b>Genre</b>:';
LineNr := FindLine(Search, Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
StartPos := Pos(Search, Line) + Length(Search);
EndPos := Length(Line) - StartPos + 1;
Value := Copy(Line, StartPos, EndPos);
HTMLRemoveTags(Value);
SetField(fieldCategory, trim(Value));
end;
// Audio languages extracted from the audio tracks
Search := '<b>Audio:</b>';
Search2 := '<b>Subtitles:</b>';
LineNr := FindLine(Search, Page, 0);
LineNrEnd := FindLine(Search2, Page, 0);
AudioFormat := '';
if LineNr > -1 then if LineNrEnd > -1 then
begin
for i := LineNr to LineNrEnd - 1 do
begin
Line := Page.GetString(i);
if i = LineNr then
begin
StartPos := Pos(Search, Line) + Length(Search);
EndPos := Length(Line) - StartPos + 1;
Value := Copy(Line, StartPos, EndPos);
HTMLRemoveTags(Value);
end
else
begin
Value := Copy(Line, 0, Length(Line));
HTMLRemoveTags(Value);
end
EndPos := Pos(':', Value) - 1;
Line := Copy(Value, 1, 1);
Value := Copy(Value, 2, EndPos - 1);
Value := LowerCase(Value);
Line := Line + Value;
If Length(AudioFormat)<>0 then AudioFormat := AudioFormat+', ';
AudioFormat := AudioFormat+trim(Line);
end
SetField(fieldLanguages, AudioFormat);
end
// Description
LineNr := FindLine('<td width="100%" valign="top" class="fontsmall3">', Page, 0) + 1;
LineNrEnd := FindLine('</td>', Page, LineNR) - 1;
if LineNr > -1 then
begin
for i := LineNR to LineNrEnd do begin
LineCR:=false;
Value := Page.GetString(i);
If Pos('<br><br>', Value) <> 0 then LineCR:=true;
Value:=StringReplace(Value, '>i<', '> <');
HTMLRemoveTags(Value);
HTMLDecode(Value);
for y := 1 to Length(Value) do begin
If Ord(Copy(Value, y, 1))=9 then begin
Value:=Copy(Value, 1, y-1)+' '+Copy(Value, y+1, Length(Value));
end;
end;
Value := Trim(Value);
Text:=Text+Value+Chr(13)+Chr(10);
If LineCR=true then Text:=Text+Chr(13)+Chr(10);
end;
SetField(fieldDescription,Copy(Text, 1, Length(Text)-4));
end;
end;
// -------------------------------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr, StartPos, EndPos, L, EndPos2: Integer;
Line, TempValue: string;
ItemID, MovieAddress, MovieTitle : string;
AddItem : Boolean;
begin
PickTreeClear;
Page := TStringList.Create;
Page.Text := GetPage(Address);
LineNr := FindLine('<title>DVD Empire - Item -', Page, 0);
if LineNr >-1 then
begin
LineNr := FindLine('javascript:itemHelp(', Page, 0);
Line := Trim(Page.GetString(LineNr));
// parameters are separated by ', '
StartPos := pos(''', ''', Line) + 4; // move past the delimiter
Line := copy(Line, StartPos, length(Line) - StartPos + 1); // skip the starting quotes
ItemID := copy(Line, 0, pos(''', ''', Line) - 1);
GetInfo(Page,ItemID);
end
else
begin
LineNr := FindLine('</strong> Matches Found', Page, 0);
if LineNr >-1 then
begin
Line := Page.GetString(LineNr);
StartPos := pos('<strong>', Line) + Length('<strong>');
L := StrToInt('0'+ Copy(Line, StartPos, pos('</strong>', Line) - StartPos),1);
PickTreeAdd(IntToStr(L)+' Matches found', '');
If L>0 Then
begin
// Find Films
LineNr := FindLine('&searchID=', Page, LineNr + 1);
if LineNr >-1 then begin
Line := Trim( Page.GetString(LineNr) );
repeat
// find the item id
EndPos := Pos('&searchID=', Line);
StartPos := EndPos;
if (EndPos < 1) then
break;
repeat
TempValue := Copy(Line, StartPos, 1);
if (TempValue = '=') then
break;
StartPos := StartPos - 1;
until(StartPos < 1);
StartPos := StartPos + 1;
ItemID := Copy(Line, StartPos, EndPos - StartPos);
MovieAddress := 'http://www.dvdempire.com/Exec/v4_item.asp?item_id=' + ItemID;
// discard the stuff we've already processed
EndPos := EndPos + Length('&searchID=');
Line := Copy(Line, EndPos, Length(Line) - EndPos - 1);
// find the movie name
StartPos := Pos('''>', Line) + 2;
Line := Copy(Line, StartPos, Length(Line) - StartPos - 1);
EndPos := Pos('</a>', Line);
MovieTitle := Copy(Line, 1, EndPos - 1);
// add it to the tree
HTMLDecode(Movietitle);
HTMLRemoveTags(MovieTitle);
// exclusion list -- these are false positives, not really titles
AddItem := true;
if (MovieTitle = 'Only Used Available') then
AddItem := false;
if (AddItem) then
PickTreeAdd(MovieTitle, MovieAddress);
until (LineNr <1 );
end;
end;
end;
Page.Free;
if PickTreeExec(Address) then
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
ItemID :=copy(Address, 51, 8);
GetInfo(Page,ItemID);
end;
end;
//DisplayResults;
end;
// -------------------------------------------------------------------------------------------------------
// Begin program
begin
if CheckVersion(3,5,0) then
begin
PickListClear;
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then MovieName := GetField(fieldTranslatedTitle);
if Input('Import from www.dvdempire.com (Modified)', 'Enter the title of the movie:', MovieName) then begin
MovieName2:=MovieName;
MovieName:=StringReplace(MovieName, '’', Chr(39));
MovieName:=AnsiLowerCase(MovieName);
MovieName:=AnsiUpFirstLetter(MovieName);
if pos('The ', MovieName)=1 then MovieName:=StringReplace(MovieName, 'The ', '');
// the &pp=5 makes sure we display all results in one page!
AnalyzePage('http://www.dvdempire.com/Exec/v5_search_item.asp?string='+UrlEncode(MovieName)+'&pp=5');
end
end
else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.