2007-02-17

BloggerPost 0.1.1 Amazonアソシエイト・プログラム支援機能などを実装

bloggerpost-0.1.1.tar.bz2

主な変更点

  • プロキシ対応
  • プレビュー機能とbloggerpost2htmlコマンドを追加
  • HTMLをそのまま通すフィルタを追加
  • Rubyのコードをevalするフィルタを追加
  • Amazonアソシエイト・プログラム支援機能を追加

プロキシ対応は、まあ、特に説明するところはない。HTTPとHTTPSは分けて、プロキシ認証にも対応している。

プレビュー機能は、フィルタ機能のデバッグに必要だったので追加した。激しく便利なので、もっと早く作ればよかった。bloggerpost2htmlはプレビューの機能を独立させたコマンド。

下の三つは、今回機能拡張したフィルタの機能。スタイルと同じく、ディレクトリにファイルを入れるだけで動作する。Rubyのevalフィルタならfilterディレクトリに

class RubyFilter < BloggerPost::Filter
def translate(html)
html = filter_text(html, 'bpruby') do |src|
eval(src)
end
return html
end
end

BloggerPost.register_filter(RubyFilter)

というファイルを突っ込めば、evalフィルタが動くようになる。フィルタの文法は共通なのだが、詳しくは各々の機能のところで説明しよう。

HTMLをそのまま通すフィルタというのは、

[bphtml <del>hoge</del> bp]

もしくは、preタグの中に

bphtml
<ul>
<li>hoge</li>
<li>fuga</li>
</ul>

という形式で使う。結果は、

hoge

  • hoge
  • fuga

となる。要するに単にスルーするフィルタなんだけど、どうしてこんなものが必要なのかというと、大抵のスタイルでは、そのままHTMLを書いてもエスケープされてタグとは解釈されないので、どうしてもHTMLで書きたいときのために追加したというわけ。ちなみにインライン形式の'['は'{'でも'('でも動作する。スタイルの形式と被らないのを選択しよう。

Rubyのコードをevalするフィルタというのは、この記法を使うとRubyのコードをブログに埋め込めることができるようになる。

例えば、インラインの場合は、

このファイルを変換したのは[bpruby Time.now.strftime('%Y年%m月%d日') bp]です。

と書くと、

このファイルを変換したのは2007年02月19日です。

と表示される。preタグを使う場合は、

bpruby
require 'find'

home = ENV['BPHOME'] + '/lib/' # BPHOMEというのは僕のマシンの環境変数
files = []
Find.find(home) do |file|
files << file.sub(home, '') if file =~ /\.rb$/
end

'<pre>' + files.join("\n") + '</pre>'

と書くと、

hikidoc.rb
bloggerpost.rb
bloggerpost/filter/embedvideo.rb
bloggerpost/filter/flickr.rb
bloggerpost/filter/asin.rb
bloggerpost/filter/ruby.rb
bloggerpost/filter/html.rb
bloggerpost/filter/syntax.rb
bloggerpost/style/bhtml.rb
bloggerpost/style/stx.rb
bloggerpost/style/ettext.rb
bloggerpost/style/rst.rb
bloggerpost/style/rd.rb
bloggerpost/style/plain2.rb
bloggerpost/style/html.rb
bloggerpost/style/apt.rb
bloggerpost/style/wiki.rb
bloggerpost/style/markdown.rb
bloggerpost/style/grutatxt.rb
bloggerpost/style/txt2tags.rb
bloggerpost/style/textile.rb
bloggerpost/style/asciidoc.rb

と表示される。こんな機能を気軽に導入できるのはクライアントツールならではだね。セキュリティを考えなくてもいいからね。

そして、今回のメインと言えるAmazonアソシエイト・プログラム支援機能。いわゆるアフィリエイトってやつだね。今回は、ASINというAmazonで扱っている商品を一意に示すコードから、個別商品へのリンクを作成するという機能を実装した。

と書くとイメージしづらいのだが、要は、こいつのパクリだ。

書籍・音楽・映画の紹介リンクを挿入する(isbn/asin記法)

はてなは、リンクを辿ると、はてなの商品紹介ページに飛ぶわけだが、BloggerPostでは、ちゃんとAmazonのページに飛ぶようになってる。(まあ、はてなは商売でやっているので、しょうがないのだが)

では、どうやってこの機能を使うのかというと、まず、Amazonのアソシエイト・プログラムとAmazon E-Commerce Serviceに登録する。ECSにも登録しないといけないのは、ちょっと面倒臭いが、細かい情報を取ろうと思うとしょうがない。

取得したIDをconfig.ymlに書く。

amazon:
awsaccesskeyid: 170MPM6XPQTA41ANYGG2
associateid: lifeisuneafor-22

そしてブログに

bpasin:B000GWKY4O:title

bpasin:B000GWKY4O:image

bpasin:B000GWKY4O:detail

というような記述をすると、

シャイニング・フォース イクサ

シャイニング・フォース イクサ

と表示される。画像の大小も指定できる。

bpasin:404427102X:detail:small

bpasin:B0007D5J38:detail:large

愚者のエンドロール
米澤 穂信

角川書店

2002-07

文庫

AIR 1 通常版
ポニーキャニオン

2005-04-06

DVD

と表示される。で、クリックした先で24時間以内に購入すれば、3%くらいのお金がもらえるらしい。らしいというのは、まだ試してないから。もちろん、BloggerPost側でアフィリエイトを掠め取るようなセコい真似はしていません。

まあ、今回の機能は、アフィリエイト目的というよりは、書籍とかの情報を表示したかったという感じかな。

それにしても、今回の変更は、芋蔓式に修正点が増えて、今までで一番大変だった。そろそろ真面目に字句解析した方がいいかもしれない。

0 件のコメント: