Page 1 of 1

Amazon Large Pic Import Script

Posted: 2003-04-08 07:00:05
by facts
Hello, i'm new to the forums, and never have written anything in pascal, but here is my first go at it. This should import pictures from amazon, the nice large ones ;), and it stores them internally. It could be buggy, dunno, but it has worked so far for me, enjoy.

Posted: 2003-04-08 07:47:26
by antp
thanks :)

Posted: 2003-04-08 20:16:46
by facts
Here is an updated, less buggy version.

Code: Select all

//GETINFO SCRIPTING
//AMAZON PICTURE IMPORT (large picture)

(*  Author: facts (jfacts1731@yahoo.com)
    Script for the importation of pictures from amazon, FindLine code taken from
    IMDB (large pic).ifs, GetToken code from SWAG archive
    For use with Ant Movie Catalog 3.4.0
    www.ant.be.tf/moviecatalog ··· www.buypin.com
*)
program AmazonImport;

var
  AmazonPage, AmazonPageNOHTML: TStringList;
  TempHold, THolder, MovieName : string;
  LineNr, I: Integer;

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 GetToken(aString, SepChar: String; TokenNum: Integer):String;
var
   Token     : string;
   StrLen    : Integer;
   TNum      : Integer;
   TEnd      : Integer;

begin
     StrLen := Length(aString);
     TNum   := 1;
     TEnd   := StrLen;
     while ((TNum <= TokenNum) and (TEnd <> 0)) do
     begin
          TEnd := Pos(SepChar,aString);
          if TEnd <> 0 then
          begin
               Token := Copy(aString,1,TEnd-1);
               Delete(aString,1,TEnd);
               TNum := TNum + 1;
          end
          else
          begin
               Token := aString;
          end;
     end;
     if TNum >= TokenNum then
     begin
          GetToken := Token;
     end
     else
     begin
          GetToken := '';
     end;
end;

function AsinParse(Line : string): string;
begin
  Result := GetToken(GetToken(Line,'.',2),Chr(34),1);
end;

begin
  MovieName := GetField(fieldOriginalTitle);
  if Input('IMDb Import', 'Enter the title of the movie:', MovieName) = False then
    MovieName := GetField(fieldOriginalTitle);
  AmazonPage := TStringList.Create;
  AmazonPage.Text := GetPage('http://www.amazon.com/exec/obidos/search-handle-url/index=dvd&field-title=' + StringReplace(UrlEncode(MovieName),'+', '%20'));
  {* debugging stuff AmazonPageNOHTML := TStringList.Create;
  AmazonPageNOHTML.Text := AmazonPage.Text;
  TempHold := AmazonPageNOHTML.Text;
  HTMLRemoveTags(TempHold);
  AmazonPageNOHTML.Text := TempHold;
  AmazonPageNOHTML.SaveToFile('d:\rips\nohtmlized.txt');
  AmazonPage.SaveToFile('d:\rips\htmlized.txt');   *}
  if FindLine('Amazon.com: DVD:',AmazonPage,1) <> -1 then
    begin
      LineNr := FindLine('<input type="hidden" name="asin.',AmazonPage,1);
      GetPicture('http://images.amazon.com/images/P/' + AsinParse(AmazonPage.Getstring(LineNr)) + '.01.LZZZZZZZ.jpg',False);
      exit;
    end
   else
   if FindLine('DVD Search Results: we were unable to find exact matches for your search for',AmazonPage,1) <> -1 then
    begin
      exit;
    end
   else
    if (FindLine('Below are results for',AmazonPage,1) <> -1) OR (FindLine('All results',AmazonPage,1) <> -1) OR (FindLine('Most popular results for',AmazonPage,1) <> -1) then
        begin
        I := 1;
        PickTreeClear;
        PickTreeAdd('Movies','');
        while (i <= AmazonPage.Count-1) do
        begin
          THolder := AmazonPage.GetString(i);
          HTMLRemoveTags(THolder);
          if (Pos('/exec/obidos/ASIN/',AmazonPage.GetString(i)) <> 0) and (THolder <> '') and (Pos('Buy new',AmazonPage.GetString(i)) = 0) and (Pos('Used & new from',AmazonPage.GetString(i)) = 0) and (Pos('THUMBZZZ',AmazonPage.GetString(i)) = 0) then
            PickTreeAdd(THolder,GetToken(AmazonPage.GetString(i),'/',5));
          if (Pos('/exec/obidos/tg/detail/',AmazonPage.GetString(i)) <> 0) and (THolder <> '') and (Pos('Buy new',AmazonPage.GetString(i)) = 0) and (Pos('Used & new from',AmazonPage.GetString(i)) = 0) and (Pos('THUMBZZZ',AmazonPage.GetString(i)) = 0) and (Pos('http://www.amazon.com',AmazonPage.GetString(i)) = 0) and (Pos('In-store Pickup',AmazonPage.GetString(i)) = 0) then
            PickTreeAdd(THolder,GetToken(AmazonPage.GetString(i),'/',7));
          i := i + 1;
        end
        if PickTreeExec(THolder) then
        begin
          GetPicture('http://images.amazon.com/images/P/' + THolder + '.01.LZZZZZZZ.jpg',False);
          exit;
        end
        exit;
      end
    else
end.

Posted: 2003-04-08 20:46:50
by antp
Thanks :)
I removed it from your first post so the script is not repeated several times on the page ;)

Posted: 2003-06-02 08:09:16
by WhiteRabbit
Your Script is great! :D
But i need the Big Pics from the german Site www.amazon.de
I've tried to change your script, but i failed.
It seems to me that the index part of the search url don't work on the german site.
How can i explorer the syntax of the search url from amazon.de?
If i use the web "frontend", i can't see the syntax.

I hope someone can help me.

WhitRabbit

PS: Sorry about my evil englich but i'm only a kraut :hihi:

Posted: 2003-06-02 14:08:23
by WhiteRabbit
I got it. Pics from Amazon.de
Here it is:

Code: Select all

//GETINFO SCRIPTING
//AMAZON PICTURE IMPORT (large picture)

(*  Author: facts (jfacts1731@yahoo.com)
    Script for the importation of pictures from amazon, FindLine code taken from
    IMDB (large pic).ifs, GetToken code from SWAG archive
    For use with Ant Movie Catalog 3.4.0
    www.ant.be.tf/moviecatalog ··· www.buypin.com
*)
program AmazonImport;

var
  AmazonPage, AmazonPageNOHTML: TStringList;
  TempHold, THolder, MovieName : string;
  LineNr, I: Integer;

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 GetToken(aString, SepChar: String; TokenNum: Integer):String;
var
   Token     : string;
   StrLen    : Integer;
   TNum      : Integer;
   TEnd      : Integer;

begin
     StrLen := Length(aString);
     TNum   := 1;
     TEnd   := StrLen;
     while ((TNum <= TokenNum) and (TEnd <> 0)) do
     begin
          TEnd := Pos(SepChar,aString);
          if TEnd <> 0 then
          begin
               Token := Copy(aString,1,TEnd-1);
               Delete(aString,1,TEnd);
               TNum := TNum + 1;
          end
          else
          begin
               Token := aString;
          end;
     end;
     if TNum >= TokenNum then
     begin
          GetToken := Token;
     end
     else
     begin
          GetToken := '';
     end;
end;

function AsinParse(Line : string): string;
begin
  Result := GetToken(GetToken(Line,'.',2),Chr(34),1);
end;

begin
  MovieName := GetField(fieldOriginalTitle);
  if Input('IMDb Import', 'Enter the title of the movie:', MovieName) = False then
    MovieName := GetField(fieldOriginalTitle);
  AmazonPage := TStringList.Create;
  AmazonPage.Text := GetPage('http://www.amazon.de/exec/obidos/search-handle-url/index=dvd-de&field-title=' + StringReplace(UrlEncode(MovieName),'+', '%20'));
  {* debugging stuff AmazonPageNOHTML := TStringList.Create;
  AmazonPageNOHTML.Text := AmazonPage.Text;
  TempHold := AmazonPageNOHTML.Text;
  HTMLRemoveTags(TempHold);
  AmazonPageNOHTML.Text := TempHold;
  AmazonPageNOHTML.SaveToFile('d:\rips\nohtmlized.txt');
  AmazonPage.SaveToFile('d:\rips\htmlized.txt');   *}
  if FindLine('Infos zu diesem Titel',AmazonPage,1) <> -1 then
    begin
      LineNr := FindLine('<input type="hidden" name="asin.',AmazonPage,1);
      GetPicture('http://images-eu.amazon.com/images/P/' + AsinParse(AmazonPage.Getstring(LineNr)) + '.03.LZZZZZZZ.jpg',False);
      exit;
    end
   else
   if FindLine('Wir haben keine genauen Treffer für Ihre Suche für ',AmazonPage,1) <> -1 then
    begin
      exit;
    end
   else
    if (FindLine('Die besten Treffer',AmazonPage,1) <> -1) OR (FindLine('Alle Ergebnisse für',AmazonPage,1) <> -1) then
        begin
        I := 1;
        PickTreeClear;
        PickTreeAdd('Movies','');
        while (i <= AmazonPage.Count-1) do
        begin
          THolder := AmazonPage.GetString(i);
          HTMLRemoveTags(THolder);
          if (Pos('/exec/obidos/ASIN/',AmazonPage.GetString(i)) <> 0) and (THolder <> '') and (Pos('Preis: EUR',AmazonPage.GetString(i)) = 0) and (Pos('THUMBZZZ',AmazonPage.GetString(i)) = 0) then
            PickTreeAdd(THolder,GetToken(AmazonPage.GetString(i),'/',5));
          i := i + 1;
        end
        if PickTreeExec(THolder) then
        begin
          GetPicture('http://images-eu.amazon.com/images/P/' + THolder + '.03.LZZZZZZZ.jpg',False);
          exit;
        end
        exit;
      end
    else
end.

Posted: 2003-06-02 14:42:00
by antp
I added "

Code: Select all

" tags to make it more readable, try to not forget them next time ;)