Changes between Version 1 and Version 2 of PyAmazon


Ignore:
Timestamp:
06/18/06 00:21:28 (18 years ago)
Author:
atzm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PyAmazon

    v1 v2  
    55 
    66== 基本 == 
    7 以下は amazon.co.jp から「パイソン」を検索した結果を適当に出力する例. 
     7以下は amazon.co.jp から「のだめ」を検索した結果を適当に出力する例. 
     8 
     9検索キーワードには UTF-8 文字列 ('''unicode オブジェクトではない''') を指定してやる必要がある. 
    810 
    911{{{ 
     
    1719amazon.setLicense(ACCESS_KEY) 
    1820 
    19 data = amazon.searchByBlended(unicode('パイソン', 'euc-jp').encode('utf-8')) 
     21data = amazon.searchByBlended(unicode('のだめ', 'euc-jp').encode('utf-8')) 
    2022 
    2123for p in data.ProductLine: 
     
    2628}}} 
    2729 
    28  * PyAmazon は内部で Amazon API の XML を呼び出して xml.dom.minidom で解析した後,unmarshal という関数で階層構造に沿ってオブジェクトを作っている.そのため,XML の構造がそのまま Python のオブジェクトに継承されている. 
    29  * 検索キーワードには UTF-8 文字列 ('''unicode オブジェクトではない''') を指定してやる必要がある. 
    30  * 問題なのは,Artists や Authors 等のフィールドが,場合によって amazon.Bag になったり str になったりすること.ちゃんと処理してやらないとハマる. 
     30== データの整合性 == 
     31=== 変数のあるなし === 
     32PyAmazon は内部で Amazon API の XML を呼び出して xml.dom.minidom で解析した後,unmarshal という関数で階層構造に沿ってオブジェクトを作っている.そのため,XML の構造がそのまま Python のオブジェクトに継承されている. 
     33 
     34そのせいか,結果によってあったりなかったりする要素があるので,適切なエラー処理を書く必要がある. 
     35 
     36{{{ 
     37#!python 
     38data = amazon.searchByBlended(unicode('のだめ', 'euc-jp').encode('utf-8')) 
     39d = data.ProductLine[0].ProductInfo.Details[0] 
     40 
     41d.ProductDescription                    # AttributeError を引き起こす可能性が高い 
     42getattr(d, 'ProductDescription', None)  # こちらの方が安全 
     43}}} 
     44 
     45=== 型の整合性 === 
     46たとえば Artists.Artist の中身が list になったり str になったりする.ちゃんと処理してやらないとハマる. 
     47 
     48{{{ 
     49#!python 
     50ATTRS = ['Authors', 'Artists', 'Tracks'] 
     51 
     52data = amazon.searchByBlended(unicode('のだめ', 'euc-jp').encode('utf-8')) 
     53d = data.ProductLine[2].ProductInfo.Details[0] 
     54 
     55for attr in ATTRS: 
     56    print '%s: ' % attr 
     57    authors = getattr(d, attr, None) 
     58    if isinstance(authors, amazon.Bag): 
     59        authors = getattr(authors, attr[:-1], None) 
     60        if isinstance(authors, list): # リストの場合 
     61            for a in authors: 
     62                print '  %s' % a 
     63        elif authors is not None: # リストでも None でもない場合は str と仮定 
     64            print '  %s' % authors 
     65}}}