Logical Rabbit.

さくらのVPS

API

Amazon Product Advertising APIについての備忘録。

JavaScriptベースで一通りつついてみたので、実装方法の備忘録。秘密鍵扱うので、クライアントサイドJavaScriptはNGですな。基本的にはプログラミングガイド読めば分かるものです。コーディングはお仕事しますよ? 的な。

必要なもの

アクセスキーID:
Amazonアソシエイト・セントラル →ツール →Product Advertising API で取得可能
秘密キー:
Amazonアソシエイト・セントラル →ツール →Product Advertising API で取得可能(認証情報生成時のみ表示されるようなので注意)
アソシエイトID:
Amazonアソシエイト・セントラルの右肩に出てるアレです

実装上のポイント

一先ず、ASINで指定した特定商品の情報取得を試しました。

  • エンドポイントは固定。シグネチャ生成時にhostとpathに分割することになります。
  • クエリは文字コード順でソートすることになるので、& で連結せずに扱ったほうが良さ気でした。ソートはArray.sort()のアルゴリズムで問題ない筈。
  • 各所の値はencodeURIComponent()でエンコード。
  • TimestampはISO形式の日付+時間ですが、ミリ秒以下があるとエラーになりますので(new Date()).toISOString()は使用できません。
  • シグネチャはbase64 エンコードの HMAC_SHA256です。Node.jsの場合 crypto.createHmac()が使用可能です。

うっかりハマる点として、各所に出てくるサンプルでのエンドポイントがアメリカ版ですが、日本のAmazonでアカウント登録している場合は日本のエンドポイントを使う必要があります。

処理の流れ

  1. タイムスタンプを生成します。UTC~メソッド群を使用して、ミリ秒を含まないISO形式の日付を生成。getUTCMonth()が0~11を返すことと、1桁の値は右側に0が必要になることに注意
  2. クエリを項目ごとに分割・格納したArrayを組み立てます →query

    AWSAccessKeyId
    アクセスキーID
    AssociateTag
    アソシエイトID
    Operation
    ItemLookup (今回は商品情報取得なので)
    ItemId
    ASIN
    Timestamp
    タイムスタンプ
  3. エンドポイントURLをバラします。Node.jsの場合url.parse()でパースして、hostとpathを使用します。
  4. クエリをソートし、&で連結しておきます。 →sorted_query
  5. 'GET', エンドポイントのhost, エンドポイントのpath, sorted_queryを\nで連結し、crypto.createHmac()で処理した後digest('base64')でBASE64形式で取り出し、更にencodeURIComponent()でエンコードします。 →signature
  6. エンドポイント + ? + sorted_query(queryでもいい筈) + & + signature にアクセスします。後はレスポンスを適宜調理。

リクエスト制限は「1秒に1回」とされているのですが、試行しているときにコード修正で明らかに数秒以上経過してても制限にかかってエラーになったので、もう少し余裕持ったほうが良さそう。

ところでPAAPIってやっぱり「パァイ」って読めばいいんですかね。

Google Shortener(Google短縮URL) API。

Google Shortener APIで短縮URLを生成する処理をちょっと試してみたのでメモ的に残しておく。

  • APIキーは各自Googleアカウントで発行すること
  • fieldsクエリは全部乗せになってます
  • 正常に実行できると、アラートダイアログで結果が表示されます
  • エラー処理? なにそれおいしい?
$(function() {
  var apikey = <各自APIキーを入力>;
  var url = 'https://twitter.com/mami_tuchino'; /* これが短縮したいURL */
  $.post({
    url: 'https://www.googleapis.com/urlshortener/v1/url?fields=analytics%2Ccreated%2Cid%2Ckind%2ClongUrl%2Cstatus&key=' + apikey,
    data: JSON.stringify({ longUrl: url }),
    dataType: 'JSON',
    contentType: 'application/json',
    success: function(json) { alert(json.id); },
    error: function(error) { console.logt(error); }
  });
});
 

地図APIについて調べた(日本地図限定)

キャラサミ とかもあって、地図に紐づいたデータ表示とかの技術を習得しておくのが良いんじゃないかとおもい、特に日本地図の上に独自のデータをマッピングできるAPIの現状について調べてみた。

利用にあたっての要求事項

  1. 日本地図に特化、もしくは日本地図を扱いやすいこと
  2. APIの利用手続きが煩雑でないこと(オンラインサインアップが理想)
  3. JavaScriptから呼び出せること
  4. 同一コードでPCと携帯機器両方に対応できると良い
  5. できれば無料、もしくは趣味で利用することが負担にならない程度の安価

候補

  1. “日本 地図 API”でググり、さらに期間を1年以内に
  2. めぼしいものをチェック、取捨選択

10候補/5ページ目までチェックした結果、以下4つくらいしか名前が上がってこない感。各制限事項などは2014年11月21日現在のもの。

  1. Google maps API
    • APIの発行ページにGoogleアカウントでログインし、発行手続きを行う
    • アプリケーションの Maps API 使用量が使用制限を超過した場合、API キーを使用して Maps API を読み込み、追加割り当てを購入する必要がある。使用制限は地図の読み込みを1 日あたり最大 25,000 回を90日連続超過した場合。
      • 使用制限の適用は営利目的のウェブサイトの場合のみで、非営利目的の場合Googleに申請、認められれば無償で Google Maps API for Business ライセンスが供与される
    • 日本語のチュートリアルあり。APIの発行は英語のみ?
  2. Yahoo!地図 Yahoo! JavaScriptマップAPI
    • Yahoo! JAPAN IDを取得し、その後アプリケーションIDを登録
    • 1つのYahoo! JAPAN IDにつき、無料APIアプリケーションIDは10個まで、1アプリケーションIDごとに1日50000リクエストが上限
    • 非商用(対価を受ける目的でソフトウエアまたは開発ソフトウエアを自ら利用し、または第三者に利用させることを禁止)、商用ライセンスあり
    • APIのチュートリアルは日本語でソレ自体は分かりやすいのだけど、よけいな情報が多すぎて見辛い印象が。なぜ雨雲レーダーにそこまでこだわるのか。
  3. ゼンリン地図API
    • 実質的にGoogle maps APIってことでしょうか。細かい規約は違う可能性があるけど、動くシステムは同一っぽいので調査終了。
  4. MapFan API
    • 完全商用らしい。「低コスト年間48万円から」等と表記されている。そもそもサイトが法人むけだし。

予想通りと言えばそれまでだけど、やはりGoogleかYahoo!になる様子。「日本」特化というのはどちらも無しかな。どちらもアカウントはあるので、後はAPIキー発行してもらえば良いはずね。まずはこの辺りから始めてみましょうか。