環境
- mac OSX lion
- xampp mac os x版 1.7.3
php.iniの設定
amazonへのリクエストにServices_Amazonを用いる。そのため、php.iniのinclude_pathをあらかじめ修正しておく必要がある。
そこで、/usr/etc/php.iniに赤字部分を追加する。
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes:/usr/lib/php/pear"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
;
; PHP's default setting for include_path is ".;/path/to/php/pear"
; http://php.net/include-path
include_path = ".:/php/includes:/usr/lib/php/pear"
include_pathはphpファイルをinclude(あるいはrequire)する際に参照するフォルダである。/usr/lib/php/pearにServices_Amazonに関するファイルがあるため、これを追加することで'/Services/Amazon.php'を呼び出すことが可能になる。
参照:phpbook - インクルードパスの設定
データベースへの接続
上述の設定を行えば、amazonから情報を取得することができる。取得した情報をデータベースに保存する際に、注意する点がある。
$link = mysql_connect('localhost', 'ユーザ名', 'パスワード');
これだとなぜかエラーが出るので、これを下のように修正する。
$link = mysql_connect('127.0.0.1', 'ユーザ名', 'パスワード');
参照:stackoverflow
ソースコード
/* * amazon apiにリクエストを送信し書籍ランキング情報を取得 * 取得した情報をデータベースに格納 * */ // Services_Amazonの呼び出し require_once 'Services/Amazon.php'; // amazon apiリクエスト時に必要なデータ define('ACCESSKEY_ID', 'アクセスキーID'); define('SECRET_ACCESSKEY', 'シークレットアクセスキー'); define('ASSOCIATE_ID', 'アソシエイトID'); define('ECS_VERSION','2009-03-31'); define('RESPONSE_GROUP','Small,Images,ItemAttributes,OfferSummary,Reviews'); // main実行プログラム $nodelist = array( "business" => "466282", "finance" => "492054" ); foreach($nodelist as $key => $val){ for($i=1; $i<=3; $i++){ $ret = getItemRankingData($val, $i); saveItemRankingData($ret); } } function getItemRankingData($browse_node,$page){ $amazon = new Services_Amazon(ACCESSKEY_ID,SECRET_ACCESSKEY,ASSOCIATE_ID); $amazon->setLocale('JP'); $options = array(); $options['BrowseNode'] = $browse_node; $options['Sort'] = 'salesrank'; $options['ResponseGroup'] = RESPONSE_GROUP; $options['ItemPage'] = $page; $ret = $amazon->ItemSearch('Books',$options); return $ret; } function saveItemRankingData($ret){ $link = mysql_connect('127.0.0.1', 'ユーザ名', 'パスワード'); if (!$link) { die('miss!'.mysql_error()); } $db_selected = mysql_select_db('test', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } print('testデータベースを選択しました。'); mysql_set_charset('utf8'); for($i=0; $i<10;$i++){ $title = $ret['Item'][$i]['ItemAttributes']['Title']."¥n"; $sql = "INSERT INTO title (title) VALUES ('.$title.')"; $result_flag = mysql_query($sql); if (!$result_flag) { die('INSERTクエリーが失敗しました。'.mysql_error()); } } $close_flag = mysql_close($link); if ($close_flag){ print('success end'); } } ?>