Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

Xamarin.Forms で Amazon Product Advertising API を使うには - アクセスキー生成〜接続確認

こんにちは。エクセルソフトの田淵です。

ytabuchi.hatenablog.com

でね、私も Tシャツ欲しいなと思いまして。Tシャツを貰える基準が分からなかったので、それならばと ISBN を打ち込んで(または Scan して)、取り込んだ ISBN から本の名前とかを引っ張って Azure に登録するアプリ作ってみようかなと思いました。AmazonProduct Advertising API を使用すると実現できますので、その利用方法を紹介します。

2016/7/21 時点での情報と画面写真です。変わる可能性もありますのでご注意ください。

Amazon Product Advertising API について

Amazonウェブサイトにトラフィックをドライブし、Amazonウェブサイト上の商品およびサービスの販売を誘導することを主な目的としている場合、ならびに以下のライセンス契約に記載されている要件を満たしている場合に限りのみご利用可能なサービスです。

とのことです。以下をご参照ください。

Amazon.co.jp Product Advertising API ライセンス契約

事前準備

API を使用するのに必要なものは

です。Amazon アソシエイトと AWS のアカウントは別々にアクティベートしないといけなさそうです。

まずは Amazon アソシエイトプログラムを使用していない方は Product Advertising API にアクセスして、アカウントを作成しましょう。

アカウントの作成方法は公式ヘルプ Amazon アソシエイト(アフィリエイト) - ヘルプ をご参照ください。出来たかどうか?は コチラ で確認できます。

次に Product Advertising API のページ

f:id:ytabuchi:20160721112329p:plain:w450

にアクセスし、[こちらのリンク]をクリックします。

f:id:ytabuchi:20160721112629p:plain:w450

こんな画面が出てきたら[セキュリティ認証に進む]をクリックします。(IAM ユーザー認証というのを使用すると AWS 本体自体はよりセキュアに管理できるようですが、Product Advertising API はまだサポートしていないそうです)

この画面にいけずに、AWS のアカウントが必要だよと言われる場合は、次のリンクを参考にアカウントを作成してください。

AWS アカウント作成の流れとポイント | AWS

[アクセスキー]セクション内の[新しいアクセスキーの作成]ボタンで[アクセスキー ID]を作りましょう。

f:id:ytabuchi:20160721120402p:plain:w450

作成すると次の画面がでますので、[アクセスキーを表示]するか[キーファイルのダウンロード]ボタンをクリックして アクセスキーID (AWSAccessKeyId)シークレットアクセスキー (AWSSecretKey) を入手してメモしておきます。

f:id:ytabuchi:20160721125950p:plain:w450

シークレットキーはこの段階で保存しておかないと後でアクセス出来ないので、必ず保存してください

3つの情報が揃いました。

動作確認

Amazon では ScratchPad を用意してくれているので、正しく問い合わせできるか?を確認してみましょう。

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

この書籍の管理番号 ISBN-13 は 9784822298616 です。今回はこの ISBN で書籍の情報が取れるかを確認してみます。

Product Advertising API Scratchpad (beta) にアクセスし、[ItemLookup]をクリックします。

API の仕様は Product Advertising API 開発者ガイド (API Version 2010-09-01) - ItemLookup をご参照ください。他の API の仕様も確認できます。

[Common Parameter]セクションで[Marketplace]から 日本 を選びます。

f:id:ytabuchi:20160721131736p:plain:w450

先ほど保存したアソシエイトタグ、アクセスキー、シークレットキーを入力します。

f:id:ytabuchi:20160721133007p:plain:w450

次に[ItemLookup]の[Request parameters]セクションで、[ItemId]に 9784822298616 を入力し、[IdType]から「ISBN」を選択します。[ResourceGourp]はそのままでも大丈夫です。ISBN で問い合わせる場合は、[SearchIndex]に「Books」を指定しないといけないので、[Add a new parameter]から「SearchIndex」を追加して、「Books」を選択します。

f:id:ytabuchi:20160721134611p:plain:w450

[Run Request]ボタンをクリックしてみましょう。

f:id:ytabuchi:20160721140700p:plain:w450

レスポンスが正しく得られれば成功です。

この後は

リクエスト URL は署名する必要があります。次のエントリーではこの署名の方法について紹介します。以下ご参照ください。

ytabuchi.hatenablog.com

Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)

ytabuchi.hatenablog.com

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。

Xamarin.Forms で Amazon Product Advertising API を使うには - コードでの URL 生成〜署名

こんにちは。エクセルソフトの田淵です。

前回のエントリーでは Amazon API を試しに使ってみるところまでを行いました。

ytabuchi.hatenablog.com

2016/7/21 時点での API 仕様です。変わる場合がありますのでご注意ください。

署名について

Scratchpad で[Run Request]ボタンからリクエストを生成した際に、[Request URL]セクションに生成された URL が表示されたはずです。[Unsigned URL]と[Signed URL]があり、例えば次のようになっています。

f:id:ytabuchi:20160721152757p:plain:w450

[Signed URL]が署名済みの URL なのですが、通常の URL にタイムスタンプと、URL をシークレットキーを使用して HMAC-SHA256 でハッシュ化した署名を追加する必要があります。署名については以下をご参照ください。

EULA に基本的には 1秒に 1回のアクセスが認められる。とあるように、沢山アクセスされては困るのでこのような処理をしているんだと思いますが、面倒ではありますね。ここからは実際にコードで URL を生成したいと思います。幸い Amazon にサンプルコードがありましたのでそれを使いましょう。

サンプルコードを見てみよう

Product Advertising API Signed Requests Sample Code - C# REST/QUERY

こちらをダウンロードして展開します。

コンソールアプリで動作を確認

AmazonProductAdvtApiSample.sln を開きます。

f:id:ytabuchi:20160721151411p:plain:w450

Mac の場合は、プロジェクトの .NET のバージョンを 4.5.1 にします。(Windows は恐らくそのまま使える?未調査です。すみません。)

f:id:ytabuchi:20160721152856p:plain:w450

変更時に警告が出る場合は OK で進みます。

f:id:ytabuchi:20160721153224p:plain:w450

ItemLookupSample.csSignedRequestHelper.cs がサンプルなのですが、そのままでは動きません。Product Advertising API の仕様が変わる前のサンプルコードのようです。正しく動くように変更していきます。

現行の仕様に合わせる

まずは現在の API の仕様に合わせて問い合わせの URL を作成する部分を変更します。

ItemLookupSample.csItemLookupSample クラスは主に以下を。

  • クラス変数を追加、変更。
    • MY_AWS_ASSOCIATE_TAGID_TYPE を追加。
    • DESTINATIONNAMESPACE を変更。
  • 上記の必要な定数を SignedRequestHelper の引数に追加。

SignedRequestHelper.csSignedRequestHelper クラスは主に以下を。

  • ItemLookupSample で引数に追加した変数を受け取れるように。
  • sortedMap Dictionary に必要事項を追加。

この時点での変更点は以下です。

github.com

これで実行してみましょう。以下の出力が得られれば成功です。

Method 1: ItemLookup Dictionary form. Title is ".NET開発テクノロジ入門2016年版Visual Studio 2015対応版"

Xamarin.Forms で動くように、PCL 対応する

では、これをそのまま Xamarin.Forms に持って行って動くか?というと動かないわけです。

うろ覚えですが、PCL の Profile 7 には System.Xml.XPath, System.Net.WebRequest, System.Security.Cryptography などの名前空間がなかったと思います。そのため、これらを別の方法で実装しなくてはいけません。

まずは以下を変更しました。

  • AmazonXml.cs を用意して、XML の受け口を用意
  • HttpClientXML を取得し、XmlSerializer でドカンとデシリアライズする

この時点での変更点は以下です。

github.com

次は PCLCrypto を使用した署名の処理に置き換えます。

  • ハッシュ化するアルゴリズムAmazonの場合はHMAC-SHA256)を決めて SecretKey を用いてhasherインスタンス
  • PCLCryptoを使用して、リクエストURLをhasherでハッシュ化して署名

この時点での変更点は以下です。

github.com

これで実行して、以下の出力が得られれば成功です。

Method 1: ItemLookup Dictionary form. Title is ".NET開発テクノロジ入門2016年版Visual Studio 2015対応版"

Xamarin.Forms で使ってみよう

ということで無事 PCL で動くようになりましたので、Xamarin.Forms アプリに組み込めば完成です(^^)

今回は Azure の Easy Table に接続するサンプルで使った関係でコードビハインドでゴリゴリですが、以下、サンプルです。

github.com

Azure の Table クラスを Task で返すように public async Task<TodoItem> Lookup(string isbn) にして、ISBN が 10桁の場合を考慮して IsbnConverter.ConvertToISBN13(isbn); だけ追加していますが、後はそのまま使っています。

こんな感じでタイトルを取得して、ListView には Title と画像と商品ページへのリンク(必要みたいだし)を入れています。

f:id:ytabuchi:20160721192536g:plain:w300

これで Amazon API も怖くないですね。AWS への問い合わせはわかりませんが、EC サイトはすべてこのように署名を追加する必要があるようです。

なお、10桁>13桁の変換は @ch3cooh 先生の PCL で動作する ISBN 10桁13桁入れ替えのコードをそのまま使わせてもらいました。ありがとうございます。

blog.ch3cooh.jp

Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)

ytabuchi.hatenablog.com

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。

エクセルソフト | ダウンロード | 学習用リソース | JXUG リンクページ | ブログ購読