スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ブログ移転しました

ブログを移転しました。

こちらにお願いします。
http://peromasamune.hateblo.jp/

よろしくお願いします。
スポンサーサイト

Objective-Cを使ったAmazon Web ServiceのリクエストURL作成

Amazon Web Service (以下 AWS) の AWSECommerceService を使って商品情報の取得がしたかったのですが、情報の取得方法がややこしかったのでまとめてみます。



PHPやJavaScriptでのやり方を紹介しているところはたくさんあったので、Objective-Cで記述してみました。
とりあえず情報を取得できれば良いと思ったので、コードは汚いです。ww
Mac、iPhoneアプリでAmazonの商品検索など行ってみたい人は試してみてはいかがでしょう?



さて、AWSからの商品情報取得方法がややこしいと前述しましたが、AWSはリクエストのURLにタイムスタンプや署名情報を付加して送信しなければならない為、その他のAPIに比べて扱いが難しいと感じました。



AWSリクエストURL 例

http://ecs.amazonaws.jp/onca/xml?
AWSAccessKeyId=1SM7CKHWKSJKJFPKBA02
&Operation=ItemSearch
&ResponseGroup=Request%2CImages
&Service=AWSECommerceService
&Timestamp=2009-07-22T13%3A41%3A39Z
&Version=2009-07-01
&Nace%2BU3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg%3D

AjaxTowerより引用




上記のようなリクエストURLを作成しなければなりません。
エンコードもそれぞれ行わなければなりません。


やること

0 AWSのアカウントを取得

1 タイムスタンプの作成・追加
2 リクエストのパラメーターを値をURLエンコード
3 署名対象のリクエスト文字列の作成
4 HMAC - SHA256ハッシュアルゴリズムを使って署名を作成
5 署名をリクエストに追加
6 リクエスト!






0 AWSのアカウントを取得


これをやらないと何も始まりませんね。


http://aws.amazon.com/jp/


↑こちらからアカウントを新規作成して、AccesskeyIDSecretKeyIDを控えます。
登録に関してはこちらを見ながらやれば出来ると思います!



1 タイムスタンプの作成・追加


//タイムスタンプ
NSDateFormatter *formatter = [[[NSDateFormatter alloc]init]autorelease];
[formatter setLocale:[[[NSLocale alloc]initWithLocaleIdentifier:@"JP"]autorelease]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSString *time = [formatter stringFromDate:[NSDate date]];




AWSではタイムスタンプの記述方式を「2009-01-01T12:00:00Z」の様な形を指定してくるので、NSDateFormatterを使用して指定に合わせます。



2 リクエストのパラメーターを値をURLエンコード


次にリクエストに使うパラメーターをエンコードします。
ここでエンコードにNSUTF8StringEncodingを使うと=などを上手くエンコードしてくれないので、都合の良いようにエンコードしてくれるメソッドを追加します。
こちら[URL Encoding with Objective-C and Cocoa]のページを参考に、というか引用させていだたきました。
特定の文字列を置き換えるメソッドです。


-(NSString *) urlencode: (NSString *) url
{
NSArray *escapeChars = [NSArray arrayWithObjects:@";" , @"/" , @"?" , @":" ,
@"@" , @"&" , @"=" , @"+" ,
@"$" , @"," , @"[" , @"]",
@"#", @"!", @"'", @"(",
@")", @"*", nil];

NSArray *replaceChars = [NSArray arrayWithObjects:@"%3B" , @"%2F" , @"%3F" ,
@"%3A" , @"%40" , @"%26" ,
@"%3D" , @"%2B" , @"%24" ,
@"%2C" , @"%5B" , @"%5D",
@"%23", @"%21", @"%27",
@"%28", @"%29", @"%2A", nil];

int len = [escapeChars count];

NSMutableString *temp = [url mutableCopy];

int i;
for(i = 0; i < len; i++)
{

[temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i]
withString:[replaceChars objectAtIndex:i]
options:NSLiteralSearch
range:NSMakeRange(0, [temp length])];
}

NSString *out = [NSString stringWithString: temp];

return out;
}




これをつかってパラメーターをエンコードしていきます


//タイムスタンプ
NSDateFormatter *formatter = [[[NSDateFormatter alloc]init]autorelease];
[formatter setLocale:[[[NSLocale alloc]initWithLocaleIdentifier:@"JP"]autorelease]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSString *time = [self urlencode:[formatter stringFromDate:[NSDate date]]];
NSString *timeStamp = [NSString stringWithFormat:@"Timestamp=%@",time];

//サービス
NSString *awsECommerceService = @"Service=AWSECommerceService";

//アクセスキー
//ACCESSKEYは0で取得したAccessKeyID
NSString *accessKeyId = [NSString stringWithFormat:@"AWSAccessKeyId=%@",ACCESSKEY];

//キーワード
NSString *key = [@"ハリーポッター" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *keyWords = [NSString stringWithFormat:@"Keywords=%@",key];

//オペレーション
NSString *ope = @"ItemSearch";
NSString *operation = [NSString stringWithFormat:@"Operation=%@",ope];

//レスポンスグループ
NSString *res = [self urlencode:@"Medium,ItemAttributes,Images"];
NSString *responseGroup = [NSString stringWithFormat:@"ResponseGroup=%@",res];

//サーチインデックス
NSString *search = @"DVD";
NSString *searchIndex = [NSString stringWithFormat:@"SearchIndex=%@",search];

//バージョン
NSString *ver = [self urlencode:@"2009-07-01"];
NSString *version = [NSString stringWithFormat:@"Version=%@",ver];





キーワードやオペレーション、レスポンスグループ、サーチインデックスは自分の必要な物を選びましょう!

オペレーション、レスポンスグループ一覧[ええもん屋 ラボ]
サーチインデックス一覧[AjaxTower]



3 署名対象のリクエスト文字列の作成


署名作成の準備として、2で作成したパラメーターを全てくっつけます!


野蛮な方法ですが・・・

//署名文字列
NSString *urlString = [NSString stringWithFormat:@"%@&%@&%@&%@&%@&%@&%@&%@",accessKeyId,keyWords,operation,responseGroup,searchIndex,awsECommerceService,timeStamp,version];
NSString *signHead = [[NSString alloc]initWithString:@"GET\necs.amazonaws.jp\n/onca/xml\n"];
NSString *forSignString = [NSString stringWithFormat:@"%@%@",signHead,urlString];






4 HMAC - SHA256ハッシュアルゴリズムを使って署名を作成


3で作成した文字列と0で取得したSecretKeyIDをつかってHMAC-SHA256形式の署名を作成します。


ヘッダーをインポート

#import <CommonCrypto/CommonHMAC.h>





署名を作成

//署名作成
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

const char *cKey = [SECRETKEY cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [forSignString cStringUsingEncoding:NSASCIIStringEncoding];

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

//署名を付加したRESTリクエスト作成
NSData *HMAC = [[NSData alloc]initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [self urlencode:[HMAC stringEncodedWithBase64]];




- (NSString *)stringEncodedWithBase64;

↑NSDataからBase64にエンコードするためにこちら[SOURCEFORGE.JP]のコードを参考にしました。



5 署名をリクエストに追加


さて、これで必要なものは全てそろったので、また全部くっつけてリクエストURLを作成します。
3で作った文字列はそのまま流用できるので使っちゃいます!


//リクエストURL
NSString *url = [NSString stringWithFormat:@"http://ecs.amazonaws.jp/onca/xml?%@&Signature=%@",urlString,hash];





6 リクエスト!


さてさて、リクエストURLが完成したのでさっそく試してみましょう!
自分は、webViewをつかってiPhoneシミュレーターで表示してみました!
当然PCなどのブラウザでも確認できます!


スクリーンショット(2011-06-04 23.20.21)


こんな感じでXMLが表示されてると思います!



その他参考資料
サンプルリクエストに署名を行うためのステップ[Amazonアソシエイト]


げむめも -Game Memo- リリース!!

GM_icon512_flat.png


5/16 iPhoneアプリ げむめも -Game Memo- をリリースしました!

げむめも -Game Memo- (以下げむめも) はあなたがプレイしたゲームや購入を検討しているゲームなどの情報を保存し、管理するアプリケーションです。



【主な機能】

1.ゲームのタイトル、カテゴリ、メーカー、ハード、日付、評価、状態、コメントを保存・管理
2.ゲームの各情報ごとに並び替え、分析が可能
3.楽天ブックスGAMEより簡単にゲーム情報が取得可能
4.ゲームタイトルによるインターネット検索(Google,Youtube,Wikipedia)
5.Twitter投稿・タイムライン閲覧機能
6.様々な画面モード(詳細・シンプル・カバーフロー)




available_on_appstore.png
↑ダウンロードはこちらから!



1.ゲームのタイトル、カテゴリ、メーカー、ハード、日付、評価、状態、コメントを保存・管理


以下のようにゲーム情報の入力・編集ができます!


Screenshot 2011.05.18 01.21.38
Screenshot 2011.05.18 01.21.05




2.ゲームの各情報ごとに並び替え、分析が可能


下の左の画像がトップ画面です。
画面下部にあるバーからゲームの各情報別に並び替えすることができます。
バー右側の▲ボタンを押す事によってバーを隠したり、出したりすることができます!


右の画像は分析画面です。
登録されているゲーム情報を状態・メーカー・ハード・カテゴリ・評価から数値を分析します。


Screenshot 2011.05.02 20.44.49
Screenshot 2011.05.02 20.45.18




3.楽天ブックスGAMEより簡単にゲーム情報が取得可能


げむめもは楽天ブックスGAMEより簡単にゲーム情報を取得することができます。
やり方は簡単で、新規作成画面にゲームのタイトルを入力し"楽天で検索"ボタンをタップ!
出てきた結果から保存したいゲームを選んでタップするだけで保存できます!


Screenshot 2011.05.02 20.46.25
Screenshot 2011.05.18 01.30.27



4.ゲームタイトルによるインターネット検索(Google,Youtube,Wikipedia)


げむめもは登録しているゲームのタイトルから簡単にインターネットで検索することができます!
気になっているゲームやお気に入りのゲームを登録してYouTubeでプロモーションビデオを観たり、攻略サイトを検索しましょう!


Screenshot 2011.05.18 01.35.22
Screenshot 2011.05.18 01.35.27



5.Twitter投稿・タイムライン閲覧機能


げむめもにはTwitter投稿機能が搭載されています。
投稿するのは簡単です。げむめもが自動でツイートを作成してくれるので、入力しなくてもボタン1つ押すだけでツイートすることができます!
また、テンプレートをいくつか用意しているので、気分に合わせてツイートすることができます。


また、このアプリケーションのハッシュタグ#gamememoを利用し、アプリケーションの利用者同士でコミュニケーションを取ることも可能です!


Screenshot 2011.05.18 01.39.18
Screenshot 2011.05.18 01.39.36




6.様々な画面モード(詳細・シンプル・カバーフロー)


げむめもには3種類の画面表示モードがあります。
ゲームの情報をまとめて表示する詳細モード、タイトルのみ表示して見つけ易くするシンプルモード、ゲームの情報をよりグラフィカルに表示するカバーフローモード
用途や気分に合わせて表示を切り替えることができます!


Screenshot 2011.05.18 01.49.13
Screenshot 2011.05.18 01.49.34




以上がげむめもの主な機能になります。
ゲーム情報をメモすることによって自分の好きなゲームの傾向がわかったり、友人などにおすすめするときに役に立つと思います!

興味のある方は是非ダウンロードしてみてください!
また、希望や要望などがあればどんどん言ってください!可能な限り対応します!


それでは、げむめもを末永くよろしくお願いいたします!





available_on_appstore.png
↑げむめも-Game Memo- Ver1.0.0 ダウンロードはこちらから!





むびめも-Movie Memo- Ver.3.0.1 アップデート申請中

icon512_flat.png


本日、むびめも-Movie Memo- Ver.3.0.1 のアップデートを申請しました。

アップデート内容は以下の通りです。


-カバーフローのレスポンスの改善
-映画タイトル検索にTwitter検索を追加




Screenshot 2011.05.16 00.47.40
Screenshot 2011.05.16 00.47.49



アップデート完了までしばらくお待ちください。


Ver.3.0.0は現在ダウンロードできます!無料です!
↓こちらからどうぞ
むびめも -Movie Memo-(Ver.3.0.0)

むびめも-Movie Memo- Ver.3.0.0 公開中!

icon512_flat.png

遅れました。。。
4/19日より

むびめも-Movie Memo- Ver.3.0.0 公開中です!


アップデート内容は以下の通りです。


・UIの大幅変更
-全ての画面を1つの画面にまとめました(All,Cover,Category,Actor)
・映画情報の自動取得機能を搭載しました
・コード量を削減し、動作が軽快になりました(当社比)





Screenshot 2011.04.12 21.28.13Screenshot 2011.04.12 21.28.57



今回のアップデートは、映画情報の入力のしやすさを考慮しました!
検索結果を自動で入力する機能は便利ですので、是非利用してみてください!


また、近日中にCoverFlow画面のパフォーマンス向上などのアップデートを実施する予定です!
しばしお待ちください!
Counter
Apps
icon512_flat.pngWord Memo

クイズ作成機能付き多機能単語帳
無料

icon512_flat.pngぶくめも
-Book Memo-


書籍情報の保存・管理ツール
無料

icon512_flat.pngむびめも
-Movie Memo-


映画情報の保存・管理ツール
無料

icon512_flat.pngげむめも
-Game Memo-


ゲーム情報の保存・管理ツール
¥85

icon512_flat.pngげむめも
-Book Memo- Lite


ゲーム情報の保存・管理ツール
無料

Profile

peromasamune

Author:peromasamune
ペロ政宗ぶろぐへようこそ!
Apple・iPhone・プログラミングなどの情報を扱ってまいります。

「むびめも-Movie Memo-」という映画管理アプリの開発者です!お手柔らかにおねがいします!

2011/12/15 新アプリ「Word Memo」リリースしました!

facebookページ
イイネ!お願いします!

Twitter
Latest Article
Latest TrackBacks
Monthly Archives
Category
RSS
Search Form
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。