今まで 検索エンジン への記事登録は WordPress
にまかせていたのですが、 自分でやらないといけなくなったので Python で
できる方法を調査しました。
そもそも PubSubHubbub って何って方に対して軽く説明。
PubSubHubbub(パブサブハブバブ)とは、インターネット上の分散型出版-購読型モデル(PubSub)のためのオープン標準プロトコルである。パブサブハバブとも呼ばれる。
元々はデータフィード用のAtomやRSSプロトコルを拡張するために設計された。HTTPを介してアクセスできるデータであればどんなデータ形式にも(例えばテキスト、画像、音声、動画ファイルなど)適用できるプロトコルとなっている。
このプロトコルの主な目的はデータが変更されたことをリアルタイムに通知することである。PubSubHubbubはHTTPの通知をPush技術を用いて行う。これはクライアントがポーリングに資源を消費しないで済むため、サーバ上のフィードに一定間隔でアクセスして更新を確かめるポーリングを行うより優れている。
ということですが、多くのブロガーにとっての目的とはスクレイピングによる不正な記事登録を防ぐということでしょうね。
Googleがこの通知をちゃんと扱っているかという話はここでは置いておきます。
ライブラリ
python-publisher
を使えば良さそうです。 PyPI
には
PubSubHubbub_Publisher
として登録されているっぽいのです が 現状ではこれは Python2
系でしか動かないようです。
このプルリクが取り込まれるまでは
$ pip install git+https://github.com/righ/python-publisher.git@righ-patch-1
としてください。
取り込まれて PyPI
に反映されたら記事更新します。
(気づいてなかったらコメントください)
なんかリポジトリ見る感じだと放置されてるっぽいので、すぐには取り込まれない気はします。
まぁ現状動くだけで十分ですね、実際に使ってみましょう。
使い方
docstring を読むと 以下のように書かれています。 Feed
の
URL を送れば良さそうです。
# Example usage: from pubsubhubbub_publish import * try: publish('http://pubsubhubbub.appspot.com', 'http://example.com/feed1/atom.xml', 'http://example.com/feed2/atom.xml', 'http://example.com/feed3/atom.xml') except PublishError, e: # handle exception...
実際 に パブリッシュ するコードは以下のような感じになりました。
import logging from pubsubhubbub_publish import publish, PublishError FEED_URLS = ('http://note.crohaco.net/feed/',) try: # この URL は固定 publish('http://pubsubhubbub.appspot.com', *FEED_URLS) except PublishError: logging.exception('An error occured!')
- info
- 実際に上記のコードを使う方は
FEED_URLS
を書き換えて使ってください。
- 実際に上記のコードを使う方は
これを適当に publish.py
とかで保存して 実行するだけです。
$ chmod +x publish.py $ ./publish.py
特にメッセージとかは出ないけど多分大丈夫です。
私は 記事のFTP転送 で作った deploy.py
の 最後に挿入して使おうと思います。