Page 1 of 1

need help! dvdasian.com script (picture only)

Posted: 2005-03-17 17:14:44
by Vagnard
hi,
i tried myself on writing a picture import script.
thats the code so far, please could someone with more experience help me.
as i'm not really into programming there will be many errors in it, and it doesn't work yet.
so please could someone teach me how to get this one to work.

Code: Select all

program DVDasian;

// search pc-id

Function pcID:string;
var
 HomePageText:string;
begin
HomePageText := GetPage('http://www.dvdasian.com/');
pcID := TextBetween(HomePageText, 'ACTION="http://www.dvdasian.com/cgi-bin/dvdasian/search.html?', '">');
end;

// movie search

Procedure SearchMovie(Name:string; id:string);
var
 ResultsPage:string;
begin
PostPage('http://www.dvdasian.com/cgi-bin/dvdasian/search.html?' + 'id', URLEncode(Name));
Sleep(1000);
ResultsPage := GetPage('http://www.dvdasian.com/cgi-bin/dvdasian/search.html?' + 'pcID');

if Pos('No item is found for', ResultsPage) > 0 then
 begin
  ShowMessage('No movie found for this search');
 end
else
 begin
  PickTreeClear;
  until not AddMovieTitles(ResultsPage);
  if PickTreeExec(Address) then
   GetPicture(Address);
 end;
end;

// getting pictureaddress

function AddMovieTitles(List: string): Boolean;
var
 Value: string;
 Address: string;
 name: string;
begin
  Value := TextBetween(List, '<TD width="90" VALIGN="top">', 'BORDER="0"></A><BR>');
  List := RemainingText;
  while Value <> '' do
  begin
    name := TextBetween(Value, 'ALT="', '"');
    Address := TextBetween(Value, '<IMG SRC="', '.1.jpg"');
    PickTreeAdd(name, 'http://dvdasian.com' + Address + '.3.jpg');
    Value := TextBetween(List, '<TD width="90" VALIGN="top">', 'BORDER="0"></A><BR>');
    List := RemainingText;
  end;
 AddMovieTitles := True;
end;

// program

var
 MovieName:string;
 
begin
MovieName := '';
MovieName := GetField(fieldTranslatedTitle);
 if MovieName = '' then
 MovieName := GetField(fieldOriginalTitle);
 Input('DVDasian.com Import', 'Enter the title of the movie:', MovieName) Exit;
end
if MovieName <> '' then
begin
SearchMovie(MovieName, pcID);
end
thanks for any help,
Vagnard

Posted: 2005-03-23 11:04:59
by KaraGarga
Hi,

Yes, there are some bugs in your script but not much, keep try. :grinking:

You used "PCId" for serach but there's actualy no need this. Instead i use

Code: Select all

AnalyzePage('http://www.dvdasian.com/cgi-bin/dvdasian/search.html?mv_searchspec='+UrlEncode(MovieName));
code for the same purpose.

I made some changes and wrote a small script for this site.

Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=
Title=DVDAsian (Only Cover)
Description=Import big cover from dvd.asian.com
Site=http://www.dvdasian.com/
Language=EN
Version=0.1 / 03.2005
Requires=3.5.0
Comments=
License=
GetInfo=1

[Options]
CoverOptions=3|3|1=Small Cover|2=Middle Cover|3=Big Cover

***************************************************)

program DVDasian;
uses
  StringUtils1;
var
  MovieName: string;
  MovieURL: 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;

procedure CutAfter(var Str: string; Pattern: string);
begin
  Str := Copy(str, Pos(Pattern, Str) + Length(Pattern), Length(Str));
end;
procedure CutBefore(var Str: string; Pattern: string);
begin
  Str := Copy(Str, Pos(Pattern, Str), Length(Str));
end;

function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
begin
  Result := '';
  if Pos(StartTag, Page) > 0 then begin
    CutBefore(Page, StartTag);
    if Length(CutTag) > 0 then
      CutAfter(Page, CutTag);
    Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
    HTMLDecode(Result);
//  ShowMessage('DEBUG: GetStringFromHTML - StartTag "'+StartTag+'", CutTag "'+CutTag+'", EndTag "'+EndTag+'", Result "'+Result+'" ___ '+Page);
  end;
end;


procedure AnalyzePage(Address: string);
var
  Page: TStringList;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  if pos('<TABLE CELLPADDING="3" width="100%">', Page.Text) = 0 then
  begin
    ShowMessage('Sorry no cover available!');
  end else
  begin
      PickTreeClear;
      PickTreeAdd('Search results', '');
      AddMoviesTitles(Page);
    if PickTreeExec(Address) then
      begin
        if GetOption('ImageOptions')=1 then
          begin
            //Address := StringReplace(Address, '.1', '.2');
            GetPicture(Address);
          end;
        if GetOption('ImageOptions')=2 then
          begin
            Address := StringReplace(Address, '.1', '.2');
          end;
        if GetOption('ImageOptions')=3 then
          begin
            Address := StringReplace(Address, '.1', '.3');
          end;
      end;
  end;
  Page.Free;
end;

procedure AddMoviesTitles(ResultsPage: TStringList);
var
  Page: string;
  MovieTitle, MovieAddress: string;
begin
  Page := ResultsPage.Text;
  while Pos('<TABLE CELLPADDING="3" width="100%">', Page) > 0 do
  begin
    CutBefore(Page, '<TABLE CELLPADDING="3" width="100%">');
    MovieAddress := GetStringFromHTML(Page, '<IMG SRC="', 'SRC="', '" ALT=');
  end;
end;
begin
  if CheckVersion(3,5,0) then
  begin
    MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      MovieName := GetField(fieldTranslatedTitle);
    if Input('DVDAsian.com Cover Import 0.1', 'Enter English or Original title:', MovieName) then
    begin
      AnalyzePage('http://www.dvdasian.com/cgi-bin/dvdasian/search.html?mv_searchspec='+UrlEncode(MovieName));
    end;
  end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.