Ruby on Rails におけるトラックバックの受信に関する実装のポイントを説明します。
(0) 前提知識
トラックバックの仕様を説明します。トラックバックを、受信するということは、以下のパラメータを持った HTTP POST リクエストを受信するということです。
・ title(記事のタイトル)
・ excerpt(記事の要約)
・ url(記事の URL)
・ blog_name(ブログ名)
※ url 以外は省略される場合があります。
ですから、トラックバックは以下のような流れで実装することができます。
(1) 受信したトラックバックを貯めるためのテーブルを準備する
(2) トラックバックを受け取るコントローラにメソッドを作る
(3) レスポンスを返す
(1) 受信したトラックバックをためるためのテーブルを準備する
以下のようなカラムを含むテーブル(例:trackbacks)を作成します。
・ id
・ title
・ excerpt
・ url
・ blog_name
・ article_id
・ date
article_id は、トラックバックを受信した記事の ID です。date は、トラックバックを受信した日時です。
(2) トラックバックを受け取るコントローラにメソッドを作る
以下は、このブログのトラックバックを受け取る URL の例です。説明すると、コントローラ「articles」、メソッド「trackback」、ID は記事の ID です。
http://www.rmake-labo.com/akasata/articles/trackback/34
以下のように書くことで、受信したトラックバックの情報を取得することができます。受信したトラックバックの情報に基づいて、記事の view などを変更してください。
def trackback
@title = params[:title]
@excerpt = params[:excerpt]
@url = params[:url]
@blog_name = params[:blog_name]
# ここに、DB に受信したトラックバックを挿入するコードを書く。
end
(2.1) 補足
トラックバックは通常の HTTP GET メソッドではなく、POST メソッドで送られてきます。ですから、以下のように、HTTP POST のみを受け付けるように、Controller に記述してやる必要があります。
verify :method => :post, :only => :trackback,
:redirect_to => { :controller => :application, :action => :index }
(3) レスポンスを返す
トラックバックを受けたら以下のようなレスポンスを返す必要があります。View(trackback.rhtml)に記述すると良いでしょう。
○ 正常なレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>
○ エラーのレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>The error message</message>
</response>
■ 参考
トラックバックを実装した
http://www.rmake-labo.com/akasata/articles/show/34
トラックバック技術仕様書
http://lowlife.jp/yasusii/stories/8.html