Tombloo で Amazon の商品を投稿する際にタイトルを修正するパッチ

シェアする

Tombloo の「Amazon タイトル問題」を直すパッチ

LolliBlue Giraffe and Amber the Mod Dollie
(ツギハギだらけでも──愛らしい)

現在、TomblooAmazon の商品を Postすると、タイトルが異常になります。

この問題を解決するパッチを書きました。次のページにある「raw」からインストールできます。

tombloo.service.extractors.amazon.extract.js – GitHub

パッチのインストール方法などは、下のページをご覧ください。ここのページにあるパッチも必携ですよ!

Tomblooパッチのインストールに失敗しなくなるパッチ | 圧縮電子精神音楽浮遊構造体

お困りの方は お試しくださいね。

──で終わりたいところですが、以下、メンドウな説明書きが続きます……。

(この記事を書き上げる直前に気がつきました。今回のパッチは Amazon.co.jp でしか動作を確認していません! もう疲れ切ったので、あとは だれか たのむ)

その原因は?

問題となっているのは、/chrome/content/library/31_Tombloo.Service.extractors.js の下記の部分ですね。

ctx.title = 'Amazon: ' + $x('id("prodImage")/@alt') + ': ' + ctx.document.title.split(/[::] */).slice(-2).shift();

これを日本語に訳すと、「特定の画像 (id="prodImage") の説明 (alt) から商品名を、ページのタイトルから著作者名を、それぞれ取得する」といったところでしょうか。ほとんどの書籍では大丈夫なのですが──、

下記の場面で問題が起こります。

  1. prodImage という ID を持たないページ
  2. 著書名などの情報がない商品(衣服・家電)
  3. 名前に「:」が付く著者(これは いま考えた)

具体的に例を挙げると、リボルテック ダンボー・ミニ Amazon.co.jpボックスバージョン では商品名が二重になり、OLYMPUS マイクロ一眼 PEN E-PL2 では 商品名の前に undefined が付きます。

Tombloo で Amazon の商品を Post する際の問題点

解決方法を探す

ページ・タイトルから著作者の情報を取り出すのはキケンそうなので、ページの内容から取得するのはどうか? ある書籍のページでは、下のような構造になっています。

<div class="buying">
<h1 class="parseasinTitle">
<span id="btAsinTitle">{ 本のタイトル }<span style="/* ... */">[コミック]</span></span> <!--aoeui-->
</h1>
<a href="/s/ref=...">{ 著作者 }</a> <span class="byLinePipe">(著)</span>
<br>
</div>

──肝心の著作者名だけが class も ID も指定されていないという、これは素晴らしい HTML ですね! 設計者と一緒に、楽しく酒を飲みに行きたいところです(無礼講の場で──何をするつもり!?)。

おかげで慣れない Xpath 式を何度も試行錯誤しながら、なんとか精度の高いパッチができました。

幸いなことに、衣服や家電などは上とは違う HTML 構造のため、メーカ名が二重になったりは しません(確認した限りでは)。

ここまでやったら、[コミック] とか [ムック] といったメディア名を取り除きたくなりますが、誤爆が多そう([] や : のついたタイトル)なので、それはまた来世で……。

余談

上で例に挙げたカメラや、靴などの商品は、画像にカーソルを載せると拡大画像が表示されます。それはそれでステキですが、そのせいで HTML が何種類も存在する。Tombloo の「Amazon – Photo」が動作しないページも増えてきました。

この問題を解決するパッチも、いま書いているところです。なんとか多くの商品に対応できそうですが、きっとまた、ページのレイアウトが変わるのだろうな……。