最終更新: 2015-06-23T01:18+0900
ふくれあがる一方の userContent.cssの一部。アマゾンから足を洗う*日は近い。
/* 2013-12-17 アマゾンのうざいポップアップ広告を消す!!! */ body >div#ap_container:first-child >div.ap_popover.ap_popover_sprited[z-index="-220"] { display: none !important; } body >div#ap_container:first-child >div.ap_popover.ap_popover_sprited[surround="6,16,18,16"].拡大画像もヒットしてしまう { display: none !important; } /* 2014-10-15 アマゾンのページめくりを邪魔するポップアップ(☆の内訳/キャンペーン)を消す!!! ついでに注文履歴のお届け先ドロップダウンも消えてる。 シェブロン(▼)付き全部が対象なんだろう。むしろ好都合。 */ div.a-popover.a-declarative.a-arrow-bottom { display: none !important; } /* 2014-10-30 アマゾンの検索結果サムネイルに下からスクロールして被さるウザくて些細な追加情報を消す。 */ div.ild3.ilbk3 { display: none !important; } /* 2015-04-23 アマゾンのちらちら目障りなフローティングメニューを消す。 */ #miniATF_feature_div { display: none; } /* 2015-05-01 アマゾンの長ったらしいメッセージを隠して ウィッシュリストに追加するリストボックスの使い勝手を取り戻す。 */ div#snsBuyBox.a-box, div#availability.a-section.a-spacing-none, div#bbop-sbbop-container.a-section { display: none !important; }
* もちろん意図して選んだ言葉。
最終更新: 2015-06-14T00:34+0900
IdTypeに ISBNを指定した ItemLookupのレスポンスに Item要素が2つ含まれていることがある。指定した ISBNをもつ本とその Kindle版に対応している。
巧妙なのか偶然の結果なのかは知らないけど、Kindle本の Item要素の方が前にあることで、Kindle登場以前から動いているコードが意図せぬせざる Kindle対応を果たしていたりする。ASINではなく ISBNを指定してそれなのだから意図していないのは間違いない。
begin xml = File::read( "#{cache}/#{country}#{asin}.xml" ) rescue Errno::ENOENT xml = amazon_call_ecs( asin, id_type, country ) File::open( "#{cache}/#{country}#{asin}.xml", 'wb' ) {|f| f.write( xml )} end doc = REXML::Document::new( REXML::Source::new( xml ) ).root item = doc.elements.to_a( '*/Item' )[0] # 無条件に最初の Itemを選択している!
XPathと REXMLについて調べながら試してこうなった。効率もなにもない完全な手探り。
item = doc.elements.to_a( '/ItemLookupResponse/Items/Item[ASIN="%1$s" or ItemAttributes/EAN="%1$s"][1]'%asin )[0]
「XPathでは不可能ではないけど、CSSでは親を条件に子や子孫を選ぶことはできてもその逆ができないのだよね(20150323p01)」って、これが念頭にあったから不可能ではないと書いたのだった。CSSでも「CSS4セレクタ (Selectors Level 4) の新機能」が実現すればできるようになるらしいとはその後の調べ。