環境
- 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');
}
}
?>