わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ISBN/ASIN検索の見直し

お盆休み中に,少しコーディングに勤しみまして,はてなダイアリーマネジャー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:AWSAmazon Web Services)のアカウントを必要とします.Ruby/AWSで商品検索の前半をご覧ください.

*3:問い合わせは成功していたものの,その後のデータアクセスでエラーが発生していました.これをbegin〜rescueで捕捉していたため,エラーメッセージも,検索結果も出力していなかったのでした.