Your SlideShare is downloading. ×
  • Like
Web技術勉強会 第26回
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Web技術勉強会 第26回

  • 2,063 views
Published

Web技術勉強会 第26回

Web技術勉強会 第26回

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,063
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 署名対応+MLDBMによる 署名対応 Amazon署名対応 によるCache による WEB技術勉強会 第26回 技術勉強会 回 RYUICHI TANAKA.
  • 2. アジェンダ Amazonの署名(Signature)対応方法 Amazonの署名(Signature)対応方法 を利用した したCache方法 MLDBMを利用した 方法
  • 3. Amazon WebService Amazonのデータ取得 のデータ取得 のデータ 形式 REST形式 改めて言う必要ないよね^^;
  • 4. しかし
  • 5. 2009年8月15日から 動かなくなります
  • 6. どうやらAmazonとしては、サーバからのリクエスト以外は 弾きたい模様。ブログパーツに組み込まれているAPI経由で Amazonのサーバを叩きまくってることでサーバの負荷がやはり ひどいとのこと。 数ヶ月前にアナウンスされたが、いまだに対応していないところ は多い。なので、8/15に同時多発的に動かなくなる可能性がある。 (大手ブログサービスを利用していない個人サーバはその恐れ大) ちなみに、現在は直っているが、Amazon本家のAPIドキュメント が貧弱、サンプルプログラムが動かない現象もあった。
  • 7. Product Advertising API APIの正式名称が変更 Signatureが必須 そろそろ対応しないとまずい
  • 8. 対応方法 PHP PEAR::Services_Amazon (新APIに対応済み) Perl URI::Amazon::APA (id:dankogai@CPAN, CodeRepos, github)
  • 9. 自作する場合 今回はこの方法を紹介します
  • 10. Signatureが鬼門 Signature の作り方が面倒!
  • 11. Signatureのルール ①必要なパラメータを用意する Key Value Service AWSECommercesService AWSAccessKeyId アクセスキー Operation ItemSerchなど SerchIndex Booksなど Keywords キーワード ResponseGroup ItemAttributesなど Timestamp タイムスタンプ Version バージョン
  • 12. Signatureのルール ②パラメータを昇順にソートして連結 (このときUTF-8でURLエンコードする) GET¥n webservice.amazon.co.jp¥n /onca/xml¥n AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxxx&Keywords=Pe rl&Operation=ItemSearch&ResponseGroup=Images%2C ItemAttributes&SearchIndex=Books&Service=AWSECo mmerceService&Timestamp=2009-07- 26T12%3A45%3A44Z&Version=2009-03-31
  • 13. Signatureのルール ③HMAC with SHA256 hash algorithmを適用し てSignatureを生成し、URLエンコードする Signature PO%2FwmLa9hVwrLGEOnmf3i%2FqPzLvuGOM0hYXl8 uKOKxk%3D
  • 14. Signatureのルール ④SignatureをリクエストURLの末尾に連結 http://webservices.amazon.co.jp/onca/xml?AWSAccessK eyId=02GA6TH96EC9SQKGEJ82&Keywords=Ruby&Ope ration=ItemSearch&ResponseGroup=Images%2CItemAt tributes&SearchIndex=Books&Service=AWSECommerce Service&Timestamp=2009-07- 26T13%3A07%3A47Z&Version=2009-03- 31&Signature=PO%2FwmLa9hVwrLGEOnmf3i%2FqPzL vuGOM0hYXl8uKOKxk%3D
  • 15. あとは煮るなる焼くなり あとは従来通りXMLで返っ てくるので、JSONにするな りDBに入れるなりしましょ う。
  • 16. だが、 > Amazonのサーバを叩きまくってることでサーバの負荷がやはり > ひどいとのこと。 どうせならAmazonに 対して優しくなろう!
  • 17. 優しくない方式
  • 18. 優しくない方式
  • 19. 優しくない方式
  • 20. 優しい方式
  • 21. 優しい方式 Cache Cache Cache
  • 22. 優しい方式 Cache Cache Cache
  • 23. データをキャッシュする データをキャッシュする には… ファイルキャッシュ? RDBMS?
  • 24. どちらも悪くない が、良くもない
  • 25. 一番やるべきは、 「ハッシュそのもの」 をキャッシュすること。 単なるファイルベースのキャッシュや RDBMSでは難しい
  • 26. そこで… 組み込み向けの DBを使う
  • 27. 組み込みDB Berkeley DB 組み込みDB。SQLは持たない。 C言語など多くの言語から使用可能 SDBM Key、Value含め1008バイトしか保存 できない
  • 28. 組み込みDB Data::Dumper ハッシュのままテキストに保存可能 (読み込み時にハッシュとして扱える) MLDBM ハッシュをメモリで記憶しているそ のままの形式でファイルに保存可能。 テキストデータより小さい、読み書 きが高速。格納する容量制限がない。
  • 29. MLDBMが 最も使える!
  • 30. MLDBMを使う前に…
  • 31. tie関数 オブジェクトでない、Perlの組 み込みデータ型を裏でオブジェ クト化する仕組み。 変数を指定されたクラスに結び つける
  • 32. tie関数 tie my %data, ‘DB_File’, ‘/path/to/cache.db’, O_CREAT, 0666
  • 33. tie関数 結びつける オブジェクト tie my %data, ‘DB_File’, ‘/path/to/cache.db’, O_CREAT, 0666 結び付けられる オブジェクトに 変数 渡す引数 「結びつけるオブジェクト」には、 DESTROY、FETCH、STOREなどのメソッドを 実装しておく必要がある。
  • 34. MLDBMを使う use MLDBM qw/DB_File Storage/; use Fcntl; tie my %data, ‘MLDBM’, ‘/path/to/cache.db’, O_CREAT | O_RDWR, 0666 or die “$!”; ・DB_FileはBerkeleyDBを使うためのモジュール。 DB_File BerkeleyDB ・Storageはデータのシリアライズ方法。 ほかの方法よりも高速。 ・FcntlでO_CREATなどが使える。
  • 35. 今回の成果物 Cache.pm MLDBMを利用したキャッシュモジュール。 キャッシュの新規作成と読み込みが可能。 Amazon.pm 署名対応Amazon書籍検索モジュール。JSON を返す。Cache.pmを継承している。インスタ ンス作成時のオプションでキャッシュするか しないかを決められる。
  • 36. #!/usr/bin/perl use strict; サンプルコード use warnings; use CGI; use FindBin::libs qw{ export base=syscommon }; use MyLibs::Diarysys::Service::Amazon; my $cgi = new CGI(); print $cgi->header(-type=>"application/x-javascript", -charset=>"utf-8"); my $amazon = MyLibs::Diarysys::Service::Amazon->new({ key => “Input your Accesskey", secret => “Input your Secretkey", keyword => $cgi->escapeHTML($cgi->param('keyword')), callback => $cgi->escapeHTML($cgi->param('callback')), cache_file => "/path/to/cache.db", ttl => 10000 }); print $amazon->get_data();
  • 37. キャッシュによる効果 実行環境 OS:Windows Vista CPU:Core 2 Duo U9300 MEM:3.00GB Eclipse3.4上で実行(ActivePerl、EPIC)
  • 38. キャッシュによる効果 実行結果 キャッシュなし:約1.9秒 キャッシュあり:約0.07秒
  • 39. 結論 キャッシュ万歳! Amazon対応はお早めに
  • 40. 参考資料 perlによる大規模データの取扱い http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_b igdata.html#sdbm MLDBM http://perldoc.jp/docs/modules/MLDBM- 2.01/MLDBM.pod tie関数: dbmopenの代わりに使う - bluespearの勉強メモ - bluespearグループ http://bluespear.g.hatena.ne.jp/bluespear/200710 14/1192342961
  • 41. 参考資料 404 Blog Not Found:perl - tie()って 何をtieするの? http://blog.livedoor.jp/dankogai/archives/51076010 .html Signed Requests Helper - Amazon Product Advertising API http://associates- amazon.s3.amazonaws.com/signed- requests/helper/index.html