katsuの駄日記

Pelicanのプラグインを書いてみる

せっかくなので、Pelicanのプラグインを書いてみました。 ひとまずあっさりと参考になりそうなのは、以下の二つのページかな。

上記を参考にしつつ、Amazonのアフィリエイトなプラグインが無さそう(?)なので、 自前でさらっと書いてみると……実験的に以下な感じに(注: このコードには後述する不具合があります)。

from pelican import signals

import re

def content_object_init(instance):

    settings = instance.settings

    if instance._content is not None:

        content = instance._content

        # [amazonaffi:affiliate-id|link-name]
        instance._content = re.sub(r'\[amazonaffi:(.+)\|(.+?)\]',
                                   r'<a href="http://www.amazon.co.jp/dp/\1/?tag=%s">\2</a>' % (settings.get("AMAZON_AFFILIATE_ID")),
                                   content)

        return instance

def register():
    signals.content_object_init.connect(content_object_init)

これで、 pelicanconf.py に以下を追加。 なお、ディレクトリを pelican_amazonaffi として、pythonのファイル名を amazonaffi.py としてます。 ディレクトリには __init__.py も置いとります。

# Amazon
AMAZON_AFFILIATE_ID = 'tirasweel-22'

# Plugins
PLUGIN_PATHS = [
    'plugins',
]

PLUGINS = [
    'pelican_amazonaffi.amazonaffi',
]

これで、エントリに [amazonaffi:] って記法で書いたのがamazonのリンクへと置換されます。 こんな感じ→ サンワサプライ USBヘッドセット

……が、上記のコードだとバッククォートで囲まれてるような箇所も置換されてしまいますな〜。 上記のコードの部分も置換されてしまった(ので角括弧の後ろに空白入れてます)。

商品名も自動で取ってきてほしいし、また明日以降対応を考えよう。

ちなみになんでこんなリンクなのかというと……、そのうちわかるかもしれません(謎)。