Sat, 24 Dec 2005

amazon link作成plugin

pyblosxomのplugin registry を見ていたら amazon link作成plugin があった。

amazon.com用のリンクを作成するスクリプトだったので、 amazon.co.jp用にリンクを変更したのと、ちょっとだけ動作を修正してみた ( wbgamazonjp.py )。


2005/12/30 追記

amazonロゴファイルを見つけたので、ロゴ表示するようにちょっと修正しました。


こんな風に書くと、

AMAZON::4274066304::Joel on Software   (← 本当は「:」は半角の「:」)

こんな感じに表示される。

Joel on Software

ASIN: 4274066304



動作を変更した部分は、以下。

  def amazon(line):
!   if not line.startswith("AMAZON"):
      return line

!   line = line.split("::")
!   arg1 = line[1]
!   arg2 = line[2]
!
 ----
+ import re
+
+ rc = re.compile('AMAZON::([0-9a-zA-Z]*)::([^<>]*)')
+
  def amazon(line):
!   result = rc.search(line)
!   if not result:
      return line

!   arg1 = result.group(1)
!   arg2 = result.group(2)

reStructuredText形式で書いているからかもしれないけど、HTMLにフォーマット変換 された後のデータが渡ってくるのでamazon()の引数lineに入ってるデータには 行頭と行末に <p></p> が入っていてstartswithでは引っ掛けられなかった ので、正規表現でISBN番号とタイトルを取得するようにしてみた。

***************
*** 71,74 ****
    entry = args["entry"]
    body = entry["body"]

!   entry["body"] = "\n".join([amazon(m) for m in body.splitlines()])
--- 84,88 ----
    entry = args["entry"]
    body = entry["body"]

!   if body.find('AMAZON::') != -1:
!     entry["body"] = "\n".join([amazon(m) for m in body.splitlines()])

最初に、素のwbgamazon.pyを試してみたときに、画面が表示されるまでに随分時間が掛 かってた。なんでかなーと思ってコードを見てたらどうやらここが原因みたいだった。

これ、表示対象の全エントリ一行一行に対して先ほどのamazon()関数を呼び出して、行 頭に「AMAZON」って入ってるかどうかをチェックしてる処理だ。そりゃあ時間掛かるし 無駄な処理だよな、ってことであるエントリに「AMAZON」って入ってるかどうかを確認 してなければわざわざ各行を調べることもないでしょ、っていう処理を追加した。単に エントリに「AMAZON」が入ってるかどうかだけだとたまたまアマゾンの話題に触れただ けでも引っかかっちゃうので「AMAZON::」が含まれるかどうかをチェックするようにし てみた。


Wed, 09 Nov 2005

いまさらアサマシ登録

はずかしながら、いまさら amazonアソシエイト に登録 してみました。

これまでも bk1 のブリーダ登録はしてたんだけど(いや、実際に リンク経由で売れたことないんですけどね)、amazonだと洋書やCDや 家電製品も扱ってるので、そういったものを紹介したい時には便利かな、 と思って登録してみました。amazonの方が利用されている人が多そうだしね。

bk1のいいところも挙げておくと、自分が買うときでもブリーダID経由で買うと ポイントがつくという点です。amazonは自分が買うのは駄目だもんね。

まだ使い方よくわかってませんが、とりあえずサイドバナーにpython本の リンクを貼ってみました。