AmazonAPIでテキストファイルの商品を自動検索する方法(PHP)

概要

テキストファイルから検索する商品を自動取得

AmazonAPIへのパラメータとして自動検索

サンプル

※例:~\search.txt
PHP
Amazon
Oracle

“;
$load[0] = “XXXXXXX”;
}
?>


‘;
$index++;;
}
?>


$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1);

/* 1.タイムスタンプを付ける */
$params[“Timestamp”] = gmdate(“Y-m-d\TH:i:s\Z”);
$base_request .= “&Timestamp=” . $params[‘Timestamp’];

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= ‘&’ . $k . ‘=’ . rawurlencode($v);
$params[$k] = rawurlencode($v);
}
$base_request = $baseurl . “?” . substr($base_request, 1);

$base_request = preg_replace(“/.*\?/”, “”, $base_request);
$base_request = str_replace(“&”, “\n”, $base_request);

ksort($params);

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace(“&”, “\n”, $base_request);

$base_request = str_replace(“\n”, “&”, $base_request);

$parsed_url = parse_url($baseurl);
$base_request = “GET\n” . $parsed_url[‘host’] . “\n” . $parsed_url[‘path’] . “\n” . $base_request;

$signature = base64_encode(hash_hmac(‘sha256’, $base_request, Secret_Access_Key, true));
$signature = rawurlencode($signature);

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1) . “&Signature=” . $signature;

echo “検索” . $index . “:結果
“;

$loopCnt=0; //Loop集計用
$amazon_xml=simplexml_load_string(@file_get_contents($base_request));
foreach((object)$amazon_xml->Items->Item as $item_a=>$item){
$title=$item->ItemAttributes->Title; //商品名
$newprice=$item->ItemAttributes->ListPrice->FormattedPrice; //New価格
$oldprice=$item->OfferSummary->LowestUsedPrice->FormattedPrice; //Old価格
$detail=$item->DetailPageURL; //商品のURL
$image=$item->MediumImage->URL; //画像のURL
print ‘

‘.$title.”
. ‘
‘ . ‘新品価格:’ . $newprice
. ‘
‘ . ‘中古価格:’ . $oldprice
. ‘

‘;

print ‘

‘;
unset($item);

// Loop抜け
$loopCnt+=1;
if($loopCnt==2){
echo “

“;
break;
};
}
}
?>

コード

※例:~\search.txt
PHP
Amazon
Oracle

<?php
  $mypath = "~/search.txt";
  if (file_exists($mypath)){
    $load = file($mypath);
  }else{
    echo "ファイルがありません。<br/><br/>";
    $load[0] = "XXXXXXX";
  }
?>
<form name="myForm" action="#" method="POST">
  <?php
    $index = 1;
    // 読み込んだテキストを全行Loop
    foreach($load as $elm)
    {
      // 各行をテキストボックスに表示
      echo '検索'. $index
        . ':<input type="text" name="box"' . $index
        .' value="' . $elm . '" /><br/>';
      $index++;;
    }
  ?>
  <br/>
  <input type="submit" value="検索" /><br/><br/>
</form>
<?php
  $index = 1;
  // 読み込んだテキストを全行Loop
  foreach($load as $elm)
  {
    // 各行を「商品検索&表示処理」へ渡す
    getprice($index, "Books", $elm);
    $index++;;
    // 検索指示が速すぎると失敗する(気がする)ので1秒待機
    sleep(1);
  }
  
  // 商品検索&表示処理 を定義
  function getprice($index, $searchIndex, $keywords)
  {
    // Amazonへのリクエスト作成
    「AmazonAPIで商品を自動検索する方法(PHP)」参照
    
    echo "検索" . $index . ":結果<br/>";
    
    //Loop集計用
    $loopCnt=0;
    
    // 取得したXMLデータから価格データの抽出&表示
    「AmazonAPIで中古商品を自動検索する方法(PHP)/中古品価格の表示」参照
    
    
    // 商品を2つ表示するとLoopを抜ける
    $loopCnt+=1;
    if($loopCnt==2){
    echo "<br/><br/><br/><br/><br/>";
      break;
    };
  }
?>

AmazonAPIで複数の中古商品を自動検索する方法(PHP)

概要

テキストボックスの入力値を取得

AmazonAPIへのパラメータとして自動検索

サンプル

検索1:

$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1);

/* 1.タイムスタンプを付ける */
$params[“Timestamp”] = gmdate(“Y-m-d\TH:i:s\Z”);
$base_request .= “&Timestamp=” . $params[‘Timestamp’];

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= ‘&’ . $k . ‘=’ . rawurlencode($v);
$params[$k] = rawurlencode($v);
}
$base_request = $baseurl . “?” . substr($base_request, 1);

$base_request = preg_replace(“/.*\?/”, “”, $base_request);
$base_request = str_replace(“&”, “\n”, $base_request);

ksort($params);

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace(“&”, “\n”, $base_request);

$base_request = str_replace(“\n”, “&”, $base_request);

$parsed_url = parse_url($baseurl);
$base_request = “GET\n” . $parsed_url[‘host’] . “\n” . $parsed_url[‘path’] . “\n” . $base_request;

$signature = base64_encode(hash_hmac(‘sha256’, $base_request, Secret_Access_Key, true));
$signature = rawurlencode($signature);

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1) . “&Signature=” . $signature;

echo “検索” . $index . “:結果
“;

$loopCnt=0; //Loop集計用
$amazon_xml=simplexml_load_string(@file_get_contents($base_request));
foreach((object)$amazon_xml->Items->Item as $item_a=>$item){
$title=$item->ItemAttributes->Title; //商品名
$newprice=$item->ItemAttributes->ListPrice->FormattedPrice; //New価格
$oldprice=$item->OfferSummary->LowestUsedPrice->FormattedPrice; //Old価格
$detail=$item->DetailPageURL; //商品のURL
$image=$item->MediumImage->URL; //画像のURL
print ‘


‘.$title.’

. ‘
‘ . ‘新品価格:’ . $newprice
. ‘
‘ . ‘中古価格:’ . $oldprice
. ‘

‘;

print ‘

‘;
unset($item);

// Loop抜け
$loopCnt+=1;
if($loopCnt==2){
echo “

“;
break;
};
}
}
?>

コード

<form name="myForm" action="#" method="POST">
    検索1:<input type="text" name="box1"
      value="<?= $_REQUEST['box1'] ?>" /><br/>
    検索2:<input type="text" name="box2"
      value="<?= $_REQUEST['box2'] ?>" /><br/>
    検索3:<input type="text" name="box3"
      value="<?= $_REQUEST['box3'] ?>" /><br/><br/>
    <input type="submit" value="検索" /><br/><br/>
</form>
<?php
  // フォームより読み取ったデータを取得
  if(isset($_POST['box1'])) {
    $keywords1 = $_POST['box1'];
  }
  
  if(isset($_POST['box2'])) {
    $keywords2 = $_POST['box2'];
  }
  
  if(isset($_POST['box3'])) {
    $keywords3 = $_POST['box3'];
  }
  

  // ↑テキストボックスの入力値を引数として「商品検索&表示処理」を呼び出し
  getprice(1, "Books", $keywords1);
  getprice(2, "Books", $keywords2);
  getprice(3, "Books", $keywords3);
  
  // 商品検索&表示処理 を定義
  function getprice($index, $searchIndex, $keywords)
  {
    // Amazonへのリクエスト作成
    「AmazonAPIで商品を自動検索する方法(PHP)」参照
    
    echo "検索" . $index . ":結果<br/>";
    
    //Loop集計用
    $loopCnt=0;
    
    // 取得したXMLデータから価格データの抽出&表示
    「AmazonAPIで中古商品を自動検索する方法(PHP)/中古品価格の表示」参照
    
    
    // 商品を2つ表示するとLoopを抜ける
    $loopCnt+=1;
    if($loopCnt==2){
    echo "<br/><br/><br/><br/><br/>";
      break;
    };
  }
?>

AmazonAPIで中古商品を自動検索する方法(PHP)

概要

AmazonAPIを使用して商品を検索する方法は
AmazonAPIで商品を自動検索する方法(PHP)
を参照。
さらにパラメーターを変更してAmazonマーケットプレイスより中古品の価格を検索する。

” . $baseurl;

define(“Associate_tag”, “meraver2-22”); // アソシエイトタグ
define(“Access_Key_ID”, “AKIAIIPLFDQDRG7ZCWGA”); // アクセスキー
define(“Secret_Access_Key”, “4hVw2oeB5lAq9fJMfLrb90p2X7JSGuKjGW5fUvAb”); // シークレットキー
?>

中古品を検索する場合のパラメーター

通常のパラメーターは、
AmazonAPIで商品を自動検索する方法(PHP)/パラメータ付加
を参照。
$params = array();
$params[“Service”] = “AWSECommerceService”;
$params[“AWSAccessKeyId”] = Access_Key_ID;
$params[“Version”] = “2013-08-01”;
$params[“Operation”] = “ItemSearch”;
$params[“SearchIndex”] = “Books”;
$params[“Keywords”] = “PHP”;
$params[“AssociateTag”] = Associate_tag;

// 中古品データを含む
$params[“ResponseGroup”] = "ItemAttributes,OfferFull,OfferSummary,Medium";
// Kindoleを除く
$params[“Power”] = "binding:not kindle";

$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1);

//echo “↓
” . $base_request;

/* 1.タイムスタンプを付ける */
$params[“Timestamp”] = gmdate(“Y-m-d\TH:i:s\Z”);
$base_request .= “&Timestamp=” . $params[‘Timestamp’];

//echo “↓
” . $base_request;

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= ‘&’ . $k . ‘=’ . rawurlencode($v);
$params[$k] = rawurlencode($v);
}
$base_request = $baseurl . “?” . substr($base_request, 1);

//echo “↓
” . $base_request;

$base_request = preg_replace(“/.*\?/”, “”, $base_request);
$base_request = str_replace(“&”, “\n”, $base_request);

//echo “↓
” . $base_request;

ksort($params);

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace(“&”, “\n”, $base_request);

//echo “↓
” . $base_request;

$base_request = str_replace(“\n”, “&”, $base_request);

//echo “↓
” . $base_request;

$parsed_url = parse_url($baseurl);
$base_request = “GET\n” . $parsed_url[‘host’] . “\n” . $parsed_url[‘path’] . “\n” . $base_request;

//echo “↓
” . $base_request;

$signature = base64_encode(hash_hmac(‘sha256’, $base_request, Secret_Access_Key, true));
$signature = rawurlencode($signature);

//echo “↓
” . $signature;

$base_request = “”;
foreach ($params as $k => $v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1) . “&Signature=” . $signature;

//echo “↓
” . $base_request;

?>

中古品価格の表示

$amazon_xml=simplexml_load_string(@file_get_contents($base_request));
foreach((object)$amazon_xml->Items->Item as $item_a=>$item){
  //商品名
  $title=$item->ItemAttributes->Title;
  //New価格
  $newprice=$item->ItemAttributes->ListPrice->FormattedPrice;

  //Old価格
  $oldprice=$item->OfferSummary->LowestUsedPrice->FormattedPrice;
  //商品のURL
  $detail=$item->DetailPageURL;
  //画像のURL
  $image=$item->MediumImage->URL;
  print '<div style="clear:both;">
    <a href="'.$detail.'" target="_blank">
    <img src="'.$image.'" align="left" />'.$title.'</a>'
    . '<br/>' . '新品価格:' . $newprice

    . '<br/>' . '中古価格:' . $oldprice
    . '</div>';
  unset($item);
}

Items->Item as $item_a=>$item){
$title=$item->ItemAttributes->Title; //商品名
$newprice=$item->ItemAttributes->ListPrice->FormattedPrice; //New価格
$oldprice=$item->OfferSummary->LowestUsedPrice->FormattedPrice; //Old価格
$detail=$item->DetailPageURL; //商品のURL
$image=$item->MediumImage->URL; //画像のURL
print ‘

‘.$title.’
. ‘
‘ . ‘新品価格:’ . $newprice
. ‘
‘ . ‘中古価格:’ . $oldprice
. ‘

‘;

print ‘

‘;
unset($item);

// Loop抜け
$loopCnt+=1;
if($loopCnt==2){
break;
};
}
?>

AmazonAPIで商品を自動検索する方法(PHP)

概要

Amazonが公開している価格や商品の検索・購入をプログラムから行う為のAPI
各種パラメータ(下記、1~11)をAmazonのWebサーバーにリクエストするとXML形式でレスポンスが返ってくる。
XMLを解析、データを加工する事で独自のWebサービスの作成が可能。
なお、AmazonAPIを利用するには、
①アソシエイトID = Amazonアフィリエイト用アカウントの作成(無料)により付与される。
②AWSアクセスキー = Amazonアフィリエイト用アカウントの作成(無料)により作成可能(無料)。
③AWSシークレットキー = Amazonアフィリエイト用アカウントの作成(無料)により作成可能(無料)。
が必要。
※AmazonWebServiceについては「AWS① 主なサービス」を参照

(1)リクエスト先URI

$baseurl = "http://ecs.amazonaws.jp/onca/xml";
※日本の商品を検索する場合。他国は別。

(2)Amazon各種アカウント設定

// ①アソシエイトタグ
define("Associate_tag", "*****");
// ②アクセスキー
define("Access_Key_ID", "*****");
// ③シークレットキー
define("Secret_Access_Key", "*****");

(3)パラメータ付加

// リクエストのパラメータ作成
$params = array();
$params["Service"] = "AWSECommerceService"
$params["AWSAccessKeyId"] = Access_Key_ID;
$params["Version"] = "2013-08-01"
$params["Operation"] = "ItemSearch"
$params["SearchIndex"] = "All";
※All/Books/DVD/Electronics 等を指定
$params["Keywords"] = "Windowsプログラム";
※商品検索ワードを指定
$params["AssociateTag"] = Associate_tag;
$params["ResponseGroup"] = "ItemAttributes,Offers,Medium"
※画像無し:Small/画像有り:Medium/レビューや関連商品等も:Large を指定

↑ リクエスト先URIにパラメータを付加
$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = $baseurl . "?" . substr($base_request, 1);
$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1);
?>


Service=AWSECommerceService&
AWSAccessKeyId=*****&
Version=2013-08-01&
Operation=ItemSearch&
SearchIndex=Books&
Keywords=Windows&
AssociateTag=*****&
ResponseGroup=ItemAttributes,Offers,Medium

(4)タイムスタンプを付加

$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
$base_request .= "&Timestamp=" . $params['Timestamp'];



Service=AWSECommerceService&
AWSAccessKeyId=*****&
Version=2013-08-01&
Operation=ItemSearch&
SearchIndex=Books&
Keywords=Windows&
AssociateTag=*****&
ResponseGroup=ItemAttributes,Offers,Medium&
Timestamp=2015-04-27T21:30:35Z

(5)「RFC 3986」形式でエンコーディング

$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= '&' . $k . '=' . rawurlencode($v);
  $params[$k] = rawurlencode($v);
}
$base_request = $baseurl . "?" . substr($base_request, 1);
$v) {
$base_request .= ‘&’ . $k . ‘=’ . rawurlencode($v);
$params[$k] = rawurlencode($v);
}
$base_request = $baseurl . “?” . substr($base_request, 1);
?>


Service=AWSECommerceService&
AWSAccessKeyId=%2A%2A%2A%2A%2A&
Version=2013-08-01&
Operation=ItemSearch&SearchIndex=Books&
Keywords=Windows&
AssociateTag=%2A%2A%2A%2A%2A&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
Timestamp=2015-04-27T21%3A32%3A50Z

(6)「&」削除&改行

$base_request = preg_replace("/.*\?/", "", $base_request);
$base_request = str_replace("&", "\n", $base_request);



Service=AWSECommerceService
AWSAccessKeyId=%2A%2A%2A%2A%2A
Version=2013-08-01
Operation=ItemSearch
SearchIndex=Books
Keywords=Windows
AssociateTag=%2A%2A%2A%2A%2A
ResponseGroup=ItemAttributes%2COffers%2CMedium
Timestamp=2015-04-27T21%3A35%3A07Z

(7)パラメーター名で昇順ソート

ksort($params);
$base_request = “”;
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace("&", "\n", $base_request);

$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace(“&”, “\n”, $base_request);
?>


AWSAccessKeyId=%2A%2A%2A%2A%2A
AssociateTag=%2A%2A%2A%2A%2A
Keywords=Windows
Operation=ItemSearch
ResponseGroup=ItemAttributes%2COffers%2CMedium
SearchIndex=Books
Service=AWSECommerceService
Timestamp=2015-04-27T21%3A35%3A07Z
Version=2013-08-01

(8)「&」でつなぐ

$base_request = str_replace("\n", "&", $base_request);



AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01

(9)3行を頭に追加

$parsed_url = parse_url($baseurl);
$base_request =
  "GET" . "\n"
  . $parsed_url['host'] . "\n"
  . $parsed_url['path'] . "\n"
  . $base_request;



GET
webservices.amazon.com
/onca/xml

AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01

(10)署名を作成

$signature = base64_encode(hash_hmac('sha256', $base_request, Secret_Access_Key, true));
$signature = rawurlencode($signature);


5cqsDfQNvWujrBWtFjy8RYm4rXi%2B6OcmygkLILe1D8A%3D

(11)署名を付加

$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = $baseurl . "?" . substr($base_request, 1) . "&Signature=" . $signature;
$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1) . “&Signature=” . $signature;
?>


AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01&
Signature=5cqsDfQNvWujrBWtFjy8RYm4rXi%2B6OcmygkLILe1D8A%3D

(12)XMLから商品データを抜き出して表示

XMLから商品データを抜き出し
$amazon_xml=simplexml_load_string(@file_get_contents($base_request));
抜き出したデータを全件Loop
foreach((object)$amazon_xml->Items->Item as $item_a=>$item){
  //商品名
  $title=$item->ItemAttributes->Title;
  //商品のURL
  $detail=$item->DetailPageURL;
  //画像のURL
  $image=$item->MediumImage->URL;
  
  // ↑ をリンクにしてhtml表示
  print '<div style="clear:both;">
        <a href="'.$detail.'" target="_blank">
          <img src="'.$image.'" align="left"/>
          '.$title.'
        </a>
      </div>';
  unset($item);

Items->Item as $item_a=>$item){ //ここに注目
$title=$item->ItemAttributes->Title; //商品名
$detail=$item->DetailPageURL; //商品のURL
$image=$item->MediumImage->URL; //画像のURL
print ‘

‘;
print ‘

‘;
unset($item);
}
?>

GoogleAPI 位置情報・GoogleMap利用

GoogleAPI

位置取得

//getCurrentPosition(成功時コールバック関数)
navigator.geolocation.getCurrentPosition(
  function(pos){
    "緯度:" + pos.coords.latitude + " , " +
    "経度:" + pos.coords.longitude);
  }
);

//getCurrentPosition(①成功時コールバック関数, ②失敗時コールバック関数, ③オプション)

//①位置取得成功時のコールバック関数
function successCallback(pos) {
  window.alert(
    "緯度:" + pos.coords.latitude + " , " +
    "経度:" + pos.coords.longitude);
}

//②位置取得失敗時のコールバック関数
function errorCallback(positionError){
  window.alert(positionError.code + "," + positionError.message);
}

//③位置取得オプション(geolocation.getCurrentPosition()の引数)
var positionOption = {
  enableHighAccuracy: true,
  timeout: 60000,
  maximumAge: 0
};

//実行(①②③)
navigator.geolocation.getCurrentPosition(
  successCallback,
  errorCallback,
  positionOption);

→結果(=successCallbackの実行結果)
緯度:35.751165 , 経度:139.70924399999998

位置監視

//位置監視開始
var watchId = navigator.geolocation.watchPosition(
  successCallback,
  errorCallback,
  positionOption);

//位置監視終了
navigator.geolocation.clearWatch(watchId);

→結果(=successCallbackの実行結果)
緯度:35.751165 , 経度:139.70924399999998

GoogleMap表示




<head>
  <!—GoogleMapsAPI読込—>
  <script type="text/javascript"
    src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=true">
  </script>
</head>

<!–地図(html)–>
<div id="map" style="width: 320px; height: 240px;"></div>

<script type="text/javascript">

  //地図オプション
  var mapOptions = {
    zoom: 15,
    center: new google.maps.LatLng(35,135),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  
  //地図の作成(html上のmapを指定)
  var map = new google.maps.Map(
    document.getElementById("map"),
    mapOptions);
    
  //マーカーオプション
  var markerOptions = {
    position: new google.maps.LatLng(35,135),
    map: map
  };
  
  //マーカー作成
  var marker = new google.maps.Marker(markerOptions);
</script>