Code: Select all
// DVDEmpire.com Script
// Version 2.0.3 bugfixed picturedownload (20070106/bad4u)
// Version 2.0.4 bugfixed description & medium type import (20080403/bad4u)
// bugfixed changed search results (20090217/deadeye)
program From_dvdempire;
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 : String;
LineNR, StartPos, EndPos, LineNrEnd, i, y : Integer;
LineCR: Boolean;
begin
//originální název
LineNr := FindLine('<title>', Page, 0);
if LineNr >-1 then begin
Line := Page.GetString(LineNr);
StartPos := Pos('<title>',Line);
EndPos := Pos('- DVD-Video | DVD Empire </title>', Line);
Value := Copy(Line, StartPos, EndPos-StartPos);
if Pos(' / ', Value) > 0 then
Value := Copy(Value, 0, Pos(' / ', Value));
HTMLRemoveTags(Value);
HTMLDecode(Value);
SetField(fieldOriginalTitle, Value);
end;
// Medium Type
if (LineNr >-1) and (Pos(' / ', Line) > 0) and (GetOption('SetMediumType')=1) then begin
StartPos := Pos(' / ',Line);
EndPos := Pos('</title>', Line);
Value := Copy(Line, StartPos+3,EndPos-StartPos-3);
HTMLRemoveTags(Value);
HTMLDecode(Value);
SetField(fieldMediaType, 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 + 1);
EndPos := Pos(' ',Line);
if EndPos > 0 then
Value := Trim( Copy(Line, 1, EndPos - 1) )
else
Value := Trim( Copy(Line, 1, 5));
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(fieldComments, 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(fieldLanguages, 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(fieldLanguages, 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(fieldLanguages, 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(fieldLanguages, 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(fieldLanguages, 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(fieldLanguages, 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(fieldLanguages, AudioFormat);
end;
// Description
LineNr := FindLine('<td width="100%" valign="top" class="fontsmall3">', Page, 0) + 1;
LineNrEnd := FindLine('</td>', Page, LineNR) - 1;
if LineNr > 0 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('<b><a href=''/Exec/v4_item.asp?item_id=', Page, LineNr + 1);
if LineNr >-1 then begin
Line := Trim( Page.GetString(LineNr) );
repeat
// find the item id
StartPos := Pos('<b><a href=''/Exec/v4_item.asp?item_id=', Line) + 38;
EndPos := StartPos;
if (EndPos < 1) then
break;
repeat
TempValue := Copy(Line, EndPos, 1);
if (TempValue = '>') then
break;
EndPos := EndPos + 1;
until(EndPos < 1);
EndPos := EndPos - 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 + 2;
Line := Copy(Line, EndPos, Length(Line) - EndPos - 1);
// find the movie name
StartPos := 1;
Line := Copy(Line, StartPos, Length(Line) - StartPos);
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);
L := L - 1;
until (L = 0);
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', '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.