Slightly modified DVDEmpire script based off of 2.0.3bugfix
Posted: 2007-03-10 22:24:46
I've copied and pasted the code below. What I've changed is the addition of Subtitle languages, the Languages which used to hold the audio types has been moved to Audio Format, and Languages now have the correct Audio languages available for the title. This is my first attempt at a script modification and posting here so if you have any issues please let me know and I'll try to fix them.
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.