お盆休み中に,少しコーディングに勤しみまして,はてなダイアリーマネジャーhatedmaを更新しました.ソースはhttps://github.com/takehiko/hatedmaから取得できます.
変更したのは,HatenaDiaryManager::AmazonSearcherモジュールです.日記管理と独立して*1動く,Amazonに問い合わせる書籍・商品検索の処理*2なのですが,これまでエラーが出て取得できていませんでした*3.データ構造を見直し,「.first」を3箇所に追加することで,エラーを解消しました.
いろいろ試したところ,共著などで,クラス名などRubyの情報が出ていました.この機会に,もう少し手を加え,見やすい表示にしました.修正前後の出力は以下のとおりです.
(修正前) $ ruby hatedma.rb -W 0684852748 Digest::Digest is deprecated; use Digest <begin search:0684852748> author: [#<Amazon::AWS::AWSObject::Author:0x007fdb1d3ed690 value="James W. Stigl er">, #<Amazon::AWS::AWSObject::Author:0x007fdb1d3ed2a8 value="James Hiebert">] binding: ハードカバー ean: 9780684852744 ean_list: ean_list_element = 9780684852744 isbn: 0684852748 label: Free Press languages: language = [#<Amazon::AWS::AWSObject::Language:0x007fdb1d3e9c48 @name=[# <Amazon::AWS::AWSObject::Name:0x007fdb1d3e95e0 value="英語">], @type=[#<Amazon:: AWS::AWSObject::Type:0x007fdb1d3e8f28 value="Unknown">]>, #<Amazon::AWS::AWSObje ct::Language:0x007fdb1d3e8960 @name=[#<Amazon::AWS::AWSObject::Name:0x007fdb1d3e 8550 value="英語">], @type=[#<Amazon::AWS::AWSObject::Type:0x007fdb1d3e8078 valu e="Original Language">]>, #<Amazon::AWS::AWSObject::Language:0x007fdb1d3e3b90 @n ame=[#<Amazon::AWS::AWSObject::Name:0x007fdb1d3e33e8 value="英語">], @type=[#<Am azon::AWS::AWSObject::Type:0x007fdb1d3e2998 value="Published">]>] list_price: amount = 3170 currency_code = JPY formatted_price = ¥ 3,170 manufacturer: Free Press number_ofpages: 224 package_dimensions: height = 118 length = 858 weight = 70 width = 583 product_group: Book product_type_name: ABIS_BOOK publication_date: 1999-09-01 publisher: Free Press studio: Free Press title: The Teaching Gap: Best Ideas from the World's Teachers for Improving Education in the Classroom asin: 0684852748 <end search:0684852748>
(修正後) $ ruby hatedma.rb -W 0684852748 Digest::Digest is deprecated; use Digest <begin search:0684852748> author: James W. Stigler James Hiebert binding: ハードカバー ean: 9780684852744 ean_list: @ean_list_element = 9780684852744 isbn: 0684852748 label: Free Press languages: @language = @name = 英語 @type = Unknown @name = 英語 @type = Original Language @name = 英語 @type = Published list_price: @amount = 3170 @currency_code = JPY @formatted_price = ¥ 3,170 manufacturer: Free Press number_ofpages: 224 package_dimensions: @height = 118 @length = 858 @weight = 70 @width = 583 product_group: Book product_type_name: ABIS_BOOK publication_date: 1999-09-01 publisher: Free Press studio: Free Press title: The Teaching Gap: Best Ideas from the World's Teachers for Improving Education in the Classroom asin: 0684852748 <end search:0684852748>
authorの欄が,すっきりしました.なお,languagesについては,インスタンス変数@languageが,「{:@name => '英語', :@type => 'Unknown'}」「{:@name => '英語', :@type => 'Original Language'}」「{:@name => '英語', :@type => 'Published'}」という3つの値の配列を保持しているためでした.レベル2(空白4つ)の字下げの行がないのと合わせて,もう少し修正を図りたいところです.
なお,実行前後のいずれにも出現している「Digest::Digest is deprecated; use Digest」ですが,http://stackoverflow.com/questions/21184960/ruby-digestdigest-is-deprecated-use-digestをもとに調査したところ,(略)/ruby-aaws-0.7.0/lib/amazon/aws/search.rbに「DIGEST = OpenSSL::Digest::Digest.new( 'sha256' ) if DIGEST_SUPPORT」というコードが見つかりました.「OpenSSL::Digest::Digest」を「OpenSSL::Digest」に書き換えたところ,警告が出なくなりました.
*1:コードとしては独立していません.というのも,問い合わせ結果をPStoreで読み書きするためのファイル名は,HatenaDiaryManager::Configクラスを使って獲得しているためです.
*2:AWS(Amazon Web Services)のアカウントを必要とします.Ruby/AWSで商品検索の前半をご覧ください.
*3:問い合わせは成功していたものの,その後のデータアクセスでエラーが発生していました.これをbegin〜rescueで捕捉していたため,エラーメッセージも,検索結果も出力していなかったのでした.