6 返信 最新の回答 日時: Feb 7, 2011 2:25 AM ユーザー:AkiraShigenari

    Amazon Web サービスを使って本のタイトルを取得するには?

    d.o

      タイトル

      Amazon Web サービスを使って本のタイトルを取得するには?

      フォーラムに投稿

      みなさんこんにちは

      Amazon Web サービスを使って本のタイトルを取得することなど可能でしょうか?

      もう少し具体的に書くと...

      ISBNコードを入力するフィールドを作ってコードを入力することで本のタイトルや著者等の情報を取得したいと思っています。

       

      ISBNコードを入力するフィールドをもとに計算フィールドでURLを生成して、WebビューアーをつかってXMLを修得して..計算フィールドorスクリプトで何とかすれば可能なような気がしていますが、具体的な方法がわかりません。

       

      どこから勉強して良いかもいまいちよくわからない状態です。

      とりあえずアクセスキーは取得してみたのですが...

       

      ヒントでも結構です。

      よろしくお願いします。 

       

      環境は

      Filemaker Pro 10 Adv

      MacOS X 10.6

      です 

      にD-Oにより編集されたメッセージ

        • 1. Re: Amazon Web サービスを使って本のタイトルを取得するには?
          aqula
            
          書籍タイトル等の簡単なデータでしたら、Amazon Web サービスでなくても、amazon.co.jpのWebページから取得できます。
          その他Webページにある情報(著者、出版社、価格など)が取得できます。
          以下はFM8.5での実施例です。変数名が適当すぎるのは勘弁してください。

          【フィールド定義】
          amazonのWebページではISBN10で管理していますので、ISBN13を変換する必要があります。
          ※テキストフィールド「ISBN」が13桁の場合ハイフンを除いて10桁コードに変換
          (計算フィールド)ISBN10=
          Let ( N = Filter ( ISBN ; "0123456789X" ); 
          Case ( Length ( N )  = 13;
           Middle ( N ; 4 ; 9 )
           & 
           Middle ( "0123456789X0" ; 
            11-Mod (  
            Middle ( N ; 4 ; 1 ) * 10 +  
            Middle ( N ; 5 ; 1 ) * 9 + 
            Middle ( N ; 6 ; 1 ) * 8 + 
            Middle ( N ; 7 ; 1 ) * 7 + 
            Middle ( N ; 8 ; 1 ) * 6 + 
            Middle ( N ; 9 ; 1 ) * 5 + 
            Middle ( N ; 10 ; 1 ) * 4 + 
            Middle ( N ; 11 ; 1 ) * 3 + 
            Middle ( N ; 12 ; 1 ) * 2
            ; 11 )  + 1
           ; 1 )
          ;N )
          )

          【Webビューワのアドレス計算式】
          Webビューワのオブジェクト名を「amazon」としておく

          【スクリプト】
          ・レイアウト切り替え [ Webビューワのあるレイアウト] 
          ・Loop
          ・#Webビューアの表示待ち
          ・スクリプト一時停止/続行 [ 間隔(秒): 1 ] 
          ・変数を設定 [ $s; 値:GetLayoutObjectAttribute ( "amazon" ; "content") ]
          ・Exit Loop If [ Length ( $s ) > 100 ]
          ・End Loop 
          ・レイアウト切り替え [ 書籍データのあるレイアウト ] 
          ・計算結果を挿入 [ 書籍タイトルフィールド; Let ( C = Middle ( $s ; Position ( $s ; "btAsinTitle" ; 1 ; 1 ) ; 200 );Middle ( C ; Position ( C ; ">" ; 1 ; 1 ) +1; Case ( (Position ( C ; "本)" ; 1 ; 1 )) > (Position ( C ; "<" ; 1 ; 1 )) or Position ( C ; "(" ; 1 ; 1 ) = 0 ; Position ( C ; "<" ; 1 ; 1 )- Position ( C ; ">" ; 1 ; 1 ) - 1 ; Position ( C ; "(" ; 1 ; 1 )) - Position ( C ; ">" ; 1 ; 1 ) - 1) )]
          ※Webページの表記から末尾の(単行本)などを取り除いています

          • 2. Re: Amazon Web サービスを使って本のタイトルを取得するには?
            d.o
              

            aqulaさん

             

            教えていただきありがとうございます。

            確かに、AWSを使わなくても書名や著者等の情報だけなら教えていただいた方法で取得できますね!

             

            今回はこれで済ませようと思います。

            ありがとうございました。

             

            AWSについては余裕があるときに改めて勉強してみます。

             

            • 3. Re: Amazon Web サービスを使って本のタイトルを取得するには?
              matsuvet
                

              aqulaさんへ

               

              投稿日から、相当日にちがたっていますが、もしお時間があれば教えてください。

               

              私の家の絵本が、500冊以上になるので本の整理をと考えています。

              そこでISBNからほんの情報が得られたらいいなと思っていたところ、このフォーラムを拝見しました。

               

              なんとか、内蔵カメラからISBNを取得し、ISBNから、WebビューワでAmazonのホームページを読み込むことはできました。

              (Webビューワのアドレス計算式までは、動かすことができました。

               

              ただ、その後の「スクリプト」からの、書籍タイトルや、著者名、カバーイメージの取得方法が分かりません。

              初心者ですので、何かよい参考書やスクリプトを教えてもらえませんか。

               

              よろしくおねがいします。 

              • 4. Re: Amazon Web サービスを使って本のタイトルを取得するには?
                aqula
                  
                この方法は、普通のWebページを利用していますので、サイトの仕様変更があると修正が必要になります。
                出来るだけ、スクリプトや計算式の意味を理解して仕様変更に備えてください。

                サンプルをアップしておきます。

                ISBNは手入力、著者は二名まで、ふりがなはMacのみ自動、
                WinはBooks.or.jpや紀伊國屋書店から取り込んでください。
                それぞれのWebビューアはサンプルのレイアウトに用意してあります。
                絵本のタイトルは(作者も)漢字か仮名かわからないので、ふりがなで検索した方が賢明です。

                カバーイメージは取り込む必要がないので、Webビューアで表示するだけにしています。
                おまけで福音館の絵本雑誌を一部取り込めるようにしています。
                データ取り込みは完璧ではありません(翻訳本とか)

                元々絵本の登録が面倒で作っていたものの一部です。
                作者、絵、がそれぞれ複数いたり、漢字ひらがなカタカナ欧文が入り乱れて困りますよね。
                もちろん普通の書籍も登録できます。

                【スクリプト中の計算の解説】
                Webビューアに表示された「ソース」を変数「$s」に取り込んで、「$s」からテキスト関数で情報を取り出します。
                ・Webブラウザで「ページのソース」(Firefox)で表示されたHTMLコードから、
                ・ブラウザの検索機能で「タイトル」などの必要な情報を探して、
                ・その前後の特徴的な単語等から必要な情報だけを抜き出すよう計算式を組み立てる。

                参考書はわかりません。素人なりに自力でやっていますが、この方法は邪道かな?と思っています。
                正統派はスレッドタイトルどおり「AmazonWebサービス」の利用で、参考書にあるとしたらこちらの方でしょう。

                • 5. Re: Amazon Web サービスを使って本のタイトルを取得するには?
                  matsuvet
                    

                  aqula さんへ

                   

                  ご返事ありがとうございます。

                  早速、スクリプトを拝見させていただきました。

                  まだ、すべてを理解することはできていませんが、とりあえず、私の作成したファイルに、移植することができました。

                   

                  たいへん助かりました。ありがとうございます。これから、これらを元に、勉強しようと思います。 

                  • 6. Re: Amazon Web サービスを使って本のタイトルを取得するには?
                    AkiraShigenari

                    随分時間が経ってしまいましたが、やっとAWSから情報取得できました。
                    というより最近になってAppleScriptからRubyをつかってSHA256計算が出来る事に気がつきました。
                    (MacOS10.6以上)
                    テーブル名:AWS
                    フィールド名:SecretKey、AccessKey、ASIN、XML
                    ※ASINは本の場合はISBN10、本以外の情報も取り込めます。
                    スクリプト:AppleScriptを実行(計算済みのAppleScriptで下の計算式)
                    この1行のスクリプトでフィールド「XML」に ResponseGroup=Medium の内容が帰ってきます。
                    これを、フィールド内容のエクスポートからXMLインポート
                    または、テキスト関数でフィールドに取り込み
                    ※以下4カ所はFileMakerのフィールド名です。適宜書き換えてください。
                    AWS::SecretKey(8行目)
                    AWS::AccessKey(10行目)
                    AWS::ASIN(12行目)
                    XML(下から2行目)
                    ========================================
                    "set aCode to \"" & "¶" &  
                    "require 'date'" &  "\n" & 
                    "require 'openssl'"& "\n" &  
                    "require 'base64'"& "\n" & 
                    "require 'cgi'"& "\n" &  
                    "require 'net/http'" &  "\n" & 
                    "gmt = DateTime.now.new_offset.strftime('%Y-%m-%dT%XZ')"& "\n" & 
                    "key = '" & AWS::SecretKey & "'" & "\n" & 
                    "req = ["& "\n" &
                    "'AWSAccessKeyId=" & AWS::AccessKey & "', "& "\n" &
                    "'ContentType='    + CGI.escape('text/xml'),"& "\n" &
                    "'ItemId=" & AWS::ASIN & "',"& "\n" & 
                    "'Operation=ItemLookup',"& "\n" &  
                    "'ResponseGroup=Medium',"& "\n" & 
                    "'Service=AWSECommerceService',"& "\n" &  
                    "'Timestamp='      + CGI.escape(gmt),"& "\n" & 
                    "'Version=2009-01-06'].join('&')"& "\n" &
                    "message = ['GET', 'webservices.amazon.co.jp', '/onca/xml', req].join('"& "\n" &
                    "')"& "\n" &
                    "hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, key, message)"& "\n" & 
                    "sig = CGI.escape(Base64.encode64(hash).chomp)"& "\n" &
                    "address  = 'webservices.amazon.co.jp'" &  "\n" & 
                    "path = '/onca/xml?' + req + '&Signature=' + sig" &  "\n" & 
                    "body = Net::HTTP.get( address , path )" &  "\n" & 
                    "print body" &  "\n" &  "\"¶" & 
                    "do shell script \"/usr/bin/ruby -e \" & quoted form of aCode" & "¶" & 
                    "set aXML to  result" & "¶" & 
                    "tell application \"FileMaker Pro\" " & "¶" & 
                    "  set cell \"XML\" of current record to aXML " & "¶" & 
                    "end tell"