Page 1 of 1

Slightly modified DVDEmpire script based off of 2.0.3bugfix

Posted: 2007-03-10 22:24:46
by murkyl
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.

Posted: 2007-03-11 22:07:23
by antp
I added "code" tags to make the text more readable, but your script is missing the "header" part. You should open the script in a text editor (notepad, ...) to copy whole content.