2008年12月14日日曜日

memo_FiveStars!の作り方(Amazon Associates Web Service編)


FiveStars!を作る上で勉強したことをまとめておく。

Amazon Associates Web Serviceへのリクエストをどこへ送信するかは、どの国のデータベースを検索・参照するかによって異なる。

  • ecs.amazonaws.ca/onca/xml(カナダ)

  • ecs.amazonaws.de/onca/xml(ドイツ)

  • ecs.amazonaws.fr/onca/xml(フランス)

  • ecs.amazonaws.jp/onca/xml(日本)

  • ecs.amazonaws.co.uk/onca/xml(イギリス)

  • ecs.amazonaws.com/onca/xml(アメリカ)


これらのエンドポイントに、例えばHarry Potterというキーワードで検索するには
http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService    // (1)
&AWSAccessKeyId=[Your Access Key ID] // (2)
&Operation=ItemSearch // (3)
&SearchIndex=Books // (4)
&Keywords=Harry%20Potter // (5)

#実際には一行で書く。
などとする。なお、スペースは使えないので"%20"としていることに注意。

以降、このリクエストについて説明して行く。

(1). 一行目


決まり文句。

エンドポイントの".com"の部分は検索・参照したい国によって".jp"となったり、".co.uk"となったりする。

(2). 二行目


[Your Access Key ID]の部分には、それぞれのアクセスキーを入れる。アクセスキーの参照はAmazon Web Servicesへログイン後、"Your Account"メニューの"Access Identifier"から可能。

(3). 三行目


データベースからの検索を行うには、Operationパラメータに"ItemSearch"を指定する。他にこのパラメータには"ItemLookup"(参照)、"CartCreate"(商品を入れるカートの生成)などがある。(Operationパラメータによって他に必要なパラメータが変わってくるので、次回は各Operation毎に使い方をまとめる予定。)

(4). 四行目と(5). 五行目


"Books"カテゴリから"Harry Potter"というキーワードを含む商品を検索するという意味。

この部分はItemSearchというOperationパラメータに特有のもの。

このリクエストに対するレスポンス


きちんと必要なパラメータが渡せていれば、XMLで正しい結果が戻るはず。

上の例ではキーワードにヒットした商品の情報がItemSearchResponse->Items->Itemに格納されている。


memo_FiveStars!の作り方


FiveStars!を作る上で勉強したことをまとめていく。

まず、準備として、アマゾン・Webサービスを利用するにはここでユーザとして登録する。

これはアマゾンの商品データベースを検索・参照するために必要。

また、アマゾンへのトラフィックを作ることによって収益を得たいと思うならば、各国のアマゾン・アソシエイトとして登録する必要がある。

ただし、アマゾン・アソシエイトの方は、収益を得たいと思っている国の全てで登録しなければならない。(Webサービスの方は利用できる全ての国で共通のアカウント)


次にサイトの構成。

今回はAjaxを利用することで、ユーザからの操作に対してページ内の必要な部分のみを更新して行くような設計にした。

大体、次のような感じ。


  • サーバ側

  • AmazonAWS.php
    <?php
    define("KEY_ID", "Your Access Key ID");
    define("ASSOCIATE_ID", "Your Associate ID");

    $request = "http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService";
    $request.="&AWSAccessKeyId=".KEY_ID;
    $request.="&AssociateTag=". ASSOCIATE_ID;
    $request.="&Operation=ItemSearch";
    $request.="&SearchIndex=" . $_GET["SearchIndex"];
    $request.="&Title=" . $_GET["Title"];
    $request.="&Author=" . $_GET["Author"];
    $request.="&Publisher=" . $_GET["Publisher"];
    $request.="&Keywords=" . $_GET["Keywords"];

    $response = file_get_contents($request);
    $xml = simplexml_load_string($response);
    $json = json_encode($xml);
    echo($json);
    ?>
    サーバ側のAmazonAWS.phpは、クライアントからのリクエストをアマゾン・Webサービスのエンドポイント(http://ecs.amazonaws.jp/onca/xml)に送り、そのレスポンスをJSONに変換してクライアントに返す。


  • クライアント側

  • index.html
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Testing Amazon Associates Web Service</title>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery.form.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
    var option = {
    success: function(json) {
    $("#SearchResults").empty();
    for (var i = 0; i < json.Items.Item.length; i++) {
    $("#SearchResults")
    .append(
    $("<li></li>")
    .html(json.Items.Item[i].ItemAttributes.Title)
    );
    }
    },
    dataType: "json"
    };
    $("#ajaxForm").ajaxForm(option);
    });
    </script>
    </head>
    <body>

    <form id="ajaxForm" action="AmazonAWS.php" method="get">
    <table>
    <tr><td>タイトル</td><td><input type="text" name="Title"></td></tr>
    <tr><td>著者</td><td><input type="text" name="Author"></td></tr>
    <tr><td>出版社</td><td><input type="text" name="Publisher"></td></tr>
    <tr><td>キーワード</td><td><input type="text" name="Keywords"></td></tr>
    </table>
    <input type="radio" name="SearchIndex" value="Books" checked>和書
    <input type="radio" name="SearchIndex" value="ForeignBooks">洋書
    <button type="submit">検索</button>
    </form>

    <ul id="SearchResults"></ul>

    </body>
    </html>
    クライアントはアマゾンの商品データベースへの検索フィールドを送り、返ってきたJSON形式のレスポンスから必要な情報を抽出する。上の例では検索結果のタイトルをリストにして表示する。

    また、今回はjQueryを利用することでソースコードを簡略化しているので、上の例を動作させるためにはjQueryとそのフォームプラグインが必要となる。



2008年12月11日木曜日

FiveStars!

アマゾンで買い物をする事が多いので、外で買い物をするときもアマゾンでの価格やレビューが気になってしまう。

iPhoneを持ってれば、外にいるときでもすぐに確認出来るのだが、あの小さい画面ではいまいち見にくいなぁ、と思っていた。

で、iPhone用のアマゾンビュアーを作っていたのだが、Amazon Web Servicesの規約を読んだところ、どうやら携帯電話用のアプリケーションからAmazon Associates Wev Serviceを利用する事は出来ないらしい。
(正確には利用するには事前に書面による承諾が必要との事なのだが、これを申し込んだところ断られた。)

せっかく途中まで作っていたので、もったいないと思ってPC用のブラウザから見れる普通のサービスとして作ってみた。

Five Stars!
http://fivestars.kohtaka.com


ところで、iPhoneアプリにはAmazon Web Servicesを使ってるっぽいのがいくつかあるみたいなのだが、これらの開発者の方々はどうやって承諾を得たのだろうか?

参考(AppStoreへのリンク):ItemShelfSnip

2008年11月7日金曜日

App Storeでの検索にかからない。。。


一週間程前、calc.がReady for SaleになったのでApp Storeで検索にかけたのだが、かからない。
開発者のページを見ても見当たらない。

Ready for SaleになってからApp Storeに出るまで、少し時間がかかるのかと思って(CubePuzzleのときは全く時間がかからなかったが。)、一昨日までまったがまだ駄目だった。

仕方が無いので、iTunes Connectにメールで聞いたところ、ここにあるよ〜、と言われてしまった。だが、検索には一向にかからない。。なぜ???


-----追記-----

さっきApp Storeで検索してみたら、見つけることが出来た。メールしたから直ったのか、自然に直ったのかは謎。


calc.







簡易的な関数電卓です。

三角関数などの基本的な関数の値を求めることが出来るほか、
括弧を使用した計算が可能です。

また、計算結果を記憶しておく機能により、
重複した入力をする手間が省けます。

スクリーンショット、購入はこちらから。


CubePuzzle


-----以下、メモ。-----

iTunes Connectにアプリを申請する際、始めはCalculatorという名前で申請しようと思ったのだが、これはビルトインのアプリに使われているので不可だった。どうやら既に使われている名前での申請は出来ないらしい。

ちなみに、アプリの名前は申請する時に記入するものが既存のものと重複しなければ大丈夫だが、インストールした時にiPhoneのデスクトップに表示されるアプリの名前は、ビルドした時のターゲットの名前info.plistのBundle display nameになるようだ。(なので、calc.をインストールすると、アプリ名はCalculatorと表示される。。。)



CubePuzzle







立方体の6つの面の色をそろえていくゲームです。

<遊び方>
  1. iPhoneをシェイクして各面の色をバラバラにします。 
  2. スクリーン上のキューブをドラッグすることで、面の色をそろえて行きます。 
  3. もしも別の視点からキューブを眺めたくなったなら、キューブのない空間をドラッグすることで視点を変えることが出来ます。ただし、指を離すと元の視点に戻ってしまいます。 
  4. 新しい視点に固定したい場合は、二本指でドラッグを開始してください。 

<操作法>
シェイク:
面をバラバラにする。
キューブをドラッグ:
キューブを回転させる。
キューブ以外をドラッグ:
視点を一時的に変える。
二本指でドラッグ:
視点を変える。


スクリーンショット、購入はこちらから。

CubePuzzle

2008年10月21日火曜日

Pending Contract 解消!!


Pending Contractが解消され、めでたくApp Storeiconにアプリが並んだ。

Pending Contract問題で悩まされていた開発者の多くが、今朝、その悩みから解放されたらしいが、念のため自分が行ってきた事の中で問題解決に関係していたかもしれないことをまとめておく。

  • iTunes ConnectのContracts, Tax & Banking Informationを全て登録した。
  • iTunes株式会社から会社情報(日本語と英語)を聞かれて答えた(二回)。
  • iTunes Connectで見られるCompany AddressのState/Provinceが???となっていたので、iTSPaymentsに連絡して直してもらった。自分の場合は名前の文字化けは無かった。



2008年10月17日金曜日

Contact Informationの変更


Pending Contractに陥らないための最低条件のひとつにContact Informationの住所が文字化けしないというのがあるみたい。

早速、iTSPaymentsに直してもらうようにメールしたところ、ものの一日で直してもらえた。ただリンク先にもあるように、この条件はアプリの審査終了時点で満たされていなければならないらしく、相変わらず私のアプリはPending Contractのまま。。。これを解消するには一体どうしたら良いのだろうか?

さらに新しいアプリを申請したいのだが、このような不安要素を抱えたまま、申請して良いものなのだろうか?やはり、Contract in ProcessのステータスがSetup Completeになるのを待つべきなのか?






2008年10月11日土曜日

memo_TabBarItemの設定


TabBarItemに自分で描いたイメージを用いる場合、グレイスケールで、大きさは30*25pixel程度にするのが良さそう。

見た感じでは、非選択時の描画は二値化されているようなのだが、選択時にはグレイスケールが反映されているのだろうか?小さくて判断がつかない。



Pending Contract の続き


どうやらこの状態は、登録情報のいくつかを日本語で登録していた人たちが陥っているようだ。

そういえば、アップルから二度程、日本語と英語での社名(または個人名)などの追加情報を連絡するようにとのメールをもらっていた。この件も手続きの滞りと関係があるのだろうか。



2008年10月9日木曜日

Pending Contract...


以前に申請したCountUpのレビューが通ったとの連絡があってから二週間程経つ。が、いまだiTunes Connectでの状態はPending Contractのまま。。。これはアップルに問い合わせた方が良いのだろうか。


SS-4をFAXしてから、一月程経って郵送でEIN取得の連絡が来た。FAXでの連絡が無かったのでずっと不安だったのだが、これでこちらの件は一安心といったところか。引き続き、今度はアップルへW-8BENを郵送した。

AppStoreのおかげで、プログラマの小遣い稼ぎが楽になったかと思いきや、意外と面倒なこと、うまくいかないこと、が多くて少し残念である。

2008年9月21日日曜日

CountUp







新しいiPhoneアプリを申請。

今度は1から30までの数字をタッチして数えていくゲーム。
数字は起動ごとにランダムに配置され、30まで数え終わるとそれまでにかかった時間を表示する。

ベストスコアを記録しておく機能も付けようかと思ったが、取り敢えずということで申請してしまった。

今度は通ると良いなぁ。



2008年9月12日金曜日

Vibratorの末路


先日、AppStoreへ投稿したVibratorがリジェクトされた。

どうやらバイブレーションという機能をアラート以外の目的で使用することが問題らしい。

無念。



2008年9月7日日曜日

App Store



EINを取得するため、ss4なる書類を作り申請するも音沙汰がない。

仕方なしに無料アプリを先にAppStoreへ申請した。何事もなく受理されると良いなぁ。

以下、申請したアプリの概要。

アプリ名:Vibrator
カテゴリ:Healthcare & Fitness
説明:iPhoneの振動機能を利用することで、iPhoneを簡易マッサージ器にしてしまおうというアプリケーション。




2008年8月11日月曜日

OpenGL ES と iPhone


プログラミングスキルを身につけるため、iPhone Developer Programに参加・開発中。

3Dゲームを開発するため、OpenGL ES(とOpenGL)を学習している。

描画されたオブジェクトをマウスなどのポインティングデバイスで選択する場合、OpenGLではセレクションバッファというのを使うようなのだが、OpenGL ESでは使えないらしい。

自前で代替的な機能を加えることにする。