アマゾンAPIを活用した蔵書管理システム(2)

November 16, 2008 – 2:20 pm

前回のエントリーでは、アマゾンAPIを活用し、書籍のタイトル、著者名を用いて検索操作を行い、該当する書籍データを抽出するphp関数BookSearch()の作成について記述した。この記事では、書籍コードASIN、ISBN、EAN(ISBN-13)のいずれかを用いて書籍データを取得する関数SetBookByBookID()について記述する。

SetBookByBookID()の基本的な構成: 今回紹介する関数SetBookByBookID()についても、前回のphp関数BookSearch()と同様、この関数の戻り値をDTO形式とした。ただ、個々の書籍には共著者あるいは翻訳本については翻訳者といったかたちで複数の著者名を取り扱うことになる。このため、著者名情報を除く書籍データと著者名データを独立したデータオブジェクトとした。

関数SetBookByBookID()の使用例: 前回の記述と同様に、ISBN,ASINなどの書籍コードから具体的な書籍データを取得する例を以下に示してみよう。なお、この関数とこれに関連するphpコードのソースは、記事の終わりに掲げる:

具体的な例として、我が家の本棚の書籍のひとつ「リチャード・ドーキンス著・利己的な遺伝子」について、ISBNコードから書籍データを取得してみる。なお、この書籍のISBNコードは、4314005564である。

<?php
      require_once('SetBookByBookID.php');
      $ISBN     = '4314005564';
      $BookCode = 'ISBN';
      $return = SetBookByBookID($ISBN, $BookCode);
//
      $book   = $return[0];
      $author_array = $return[1];
//
      echo "Title = ".$book->getTitle()."\n";
      echo "  ISBN=" .$book->getIsbn()." ASIN=" . $book->getAsin()." EAN=" . $book->getEan() . "\n";
      echo "  Publisher=".$book->getPublisher()."\n";
      echo "  Publication Date:".$book->getPubdate()."\n";
      echo "  No of Pages : " . $book->getPages() . "\n";
      echo "  Binding: " . $book->getBinding() . "\n";
      echo "  Price:   " . $book->getPrice() . "[". $book->getCurrency_cd() . "]\n";
      for ($i=0; $i<sizeof($author_array); $i++) {
             echo "  Author = " . $author_array[$i]->getAuthor() . "[" . $author_array[$i]->getRole() . "]\n";
      }
//
      $book = NULL;
      $author_array=NULL;
?>
        

これをコンソール上で実行すると:

% php Sample.php
Title = 利己的な遺伝子 (科学選書)
  ISBN=4314005564 ASIN=4314005564 EAN=9784314005562
  Publisher=紀伊國屋書店
  Publication Date:1991-02
  No of Pages : 548
  Binding: 単行本
  Price:   2854[JPY]
  Author = リチャード・ドーキンス[]
  Author = 日高 敏隆[翻訳]
  Author = 岸 由二[翻訳]
  Author = 羽田 節子[翻訳]
  Author = 垂水 雄二[翻訳]
        

となる。

上記の使用例に見られるように、php関数SetBookByBookID()は、二つの引数を持ち、第1引数で書籍コード、第2引数において書籍コード名(ISBN,ASIN,EAN)を与えることにより、アマゾンのデータベースから書籍データを取得し、書籍データと著書名データの2種類のデータオブジェクト(DTO)が配列として一纏めにされたものを返す。関数の実行後、これら二つのデータオブジェクトを展開することにより、目的とする書籍データを得ることになる。

アマゾンデータベースから、書籍コードを用いて、データベース化に必要な書籍データをオブジェクト(DTO)の形で取得する仕組みを作ることができた。次回は、書籍データベースの構成と、今回取得したデータの書籍データベースにセットする仕組みについて記述する。

SetBookByBookID.php:

<?php
function SetBookByBookID($ASIN,$BookCode )
{
    require_once("./Book.php");
    require_once("./Author.php");

    define('KEYID','----------------------');

    $request='http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService'
 . '&AWSAccessKeyId='.KEYID.'&Operation=ItemLookup'
 . '&ResponseGroup=Large&IdType=ASIN&Version=2008-08-19'
 . '&ItemId=';
//
    $request    = $request . '&IdType=' . $BookCode . '&ItemId=' . $ASIN;
    $response   = file_get_contents($request);
    $parsed_xml = simplexml_load_string($response);
// Get AWS 判定
    $IsValid    = $parsed_xml->Items->Request->IsValid;
    if( $IsValid != 'True' ) return -1;
//
    $Item       = $parsed_xml->Items->Item;
// Get Image URL
    $Image_URL  = $Item->MediumImage->URL;
// Get ASIN
    $ASIN       = $Item->ASIN;
// Get Book_Data
    $Attributes = $Item->ItemAttributes;
    $Binding      = $Attributes->Binding;
    $EAN          = $Attributes->EAN; 
    $ISBN         = $Attributes->ISBN;
    $Pub_Date     = $Attributes->PublicationDate;
    $Price        = $Attributes->ListPrice->Amount;
    $Currency_cd  = $Attributes->ListPrice->CurrencyCode;
    $Publisher    = $Attributes->Publisher;
    $Title        = $Attributes->Title;
    $Pages        = $Attributes->NumberOfPages;
// ---- Added on 22/11/08

       if      ( strlen($Pub_Date) == 7 ) $Pub_Date=$Pub_Date . '-00';
       else if ( strlen($Pub_Date) == 4 ) $Pub_Date=$Pub_Date . '-00-00';
       else if ( strlen($Pub_Date) < 4  ) $Pub_Date='0000-00-00'

//----- End Added
       $book = new Book();
       $book->setIsbn($ISBN);
       $book->setAsin($ASIN);
       $book->setEan($EAN);
       $book->setTitle($Title);
       $book->setImage_url($Image_URL);
       $book->setPubdate($Pub_Date);
       $book->setPrice($Price);
       $book->setPages($Pages);
       $book->setPublisher($Publisher);
       $book->setBinding($Binding);
       $book->setCurrency_cd($Currency_cd);
//
    $author_name = array();
    $ncr = 0;
    foreach( $Attributes->Author as $Author_name ) {
       $author_name[$ncr] = $Author_name;
       $ncr = $ncr + 1;
    }
    foreach( $Attributes->Creator as $Creator ) {
       $author_name[$ncr] = $Creator;
       $ncr = $ncr + 1;
    }
//
    $author_array = array();
    for ( $i=0; $i<sizeof($author_name); $i++ ) {
       $author = new Author();
       $author->setAuthor($author_name[$i]);
       $author->setRole($author_name[$i]['Role']);
       $author_array[] = $author;
    }
//
    $return_arguments = array();
       $return_arguments[] = $book;
       $return_arguments[] = $author_array;
//
    return $return_arguments;
}
?>
        

Author.php

<?php
Class Author {
        private $id     = "";
        private $author = "";
        private $role   = "";
        public function __toString() {
                return (string) ($this->id . "\t" . $this->author . "\t" . $this->role );
        }
        public function getId() {
            return $this->id;
        }
        public function setId($id) {
            $this->id = $id;
        }        public function getAuthor() {
            return $this->author;
        }
        public function setAuthor($author) {
            $this->author = $author;
        }
        public function getRole() {
           return $this->role;
        }
        public function setRole($role) {
           $this->role = $role;
        }
}
?>
        

Book.php

<?php
class Book {
        private $id           = "";
        private $isbn         = "";
        private $asin         = "";
        private $ean          = "";
        private $title        = "";
        private $image_url    = "";
        private $pubdate      = "";
        private $price        = "";
        private $page         = "";
        private $publisher    = "";
        private $binding      = "";
        private $currency_cd  = "";
        public function toString() {
           return (string) ($this->id ."\t" . $this->isbn . "\t" . $this->asin . "\t" .
                  $this->ean . "\t" . $this->title . "\t" . $this->image_url . "\t" .
                  $this->pubdate . "\t" . $this->price . "\t" . $this->pages . "\t" .
                  $this->publisher . "\t" . $this->binding . "\t" .
                  $this->currency_cd );
        }
        public function getId() {
            return $this->id;
        }
        public function setId($id) {
            $this->id = $id;
        }
        public function getIsbn() {
            return $this->isbn;
        }
        public function setIsbn($isbn) {
            $this->isbn = $isbn;
        }
        public function getAsin() {
            return $this->asin;
        }
        public function setAsin($asin) {
            $this->asin = $asin;
        }
        public function getEan() {
            return $this->ean;
        }
        public function setEan($ean) {
            $this->ean = $ean;
        }
        public function getTitle() {
            return $this->title;
        }
        public function setTitle($title) {
            $this->title = $title;
        }
        public function getImage_url() {
            return $this->image_url;
        }
        public function setImage_url($image_url) {
            $this->image_url = $image_url;
        }
        public function getPubdate() {
            return $this->pubdate;
        }
        public function setPubdate($pubdate) {
            $this->pubdate = $pubdate;
        }
        public function getPrice() {
            return $this->price;
        }
        public function setPrice($price) {
            $this->price = $price;
        }
        public function getPages() {
            return $this->pages;
        }
        public function setPages($pages) {
            $this->pages = $pages;
        }
        public function getPublisher() {
            return $this->publisher;
        }
        public function setPublisher($publisher) {
            $this->publisher = $publisher;
        }
        public function getBinding() {
           return $this->binding;
        }
        public function setBinding($binding) {
           $this->binding = $binding;
        }
        public function getCurrency_cd() {
           return $this->currency_cd;
        }
        public function setCurrency_cd($currency_cd) {
           $this->currency_cd = $currency_cd;
        }
}
?>
        


  1. 2 Trackback(s)

  2. Nov 22, 2008: アマゾンAPIを活用した蔵書管理システム(4) | Yama's Memorandum
  3. Mar 18, 2009: アマゾン書籍DB検索をAjaxでやってみた | Yama's Memorandum

Post a Comment