T-CREATOR

「Codeigniter」トラックバック受信処理について使い方とサンプル

「Codeigniter」トラックバック受信処理について使い方とサンプル
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Codeigniterトラックバック受信処理について使い方とサンプルをメモしました。

データベース作成

データベースを作成します。

手順

Mysqlにログインし、使用するデータベースへ移動します。

Mysqlにログイン

terminalmysql -u root -p

DBを選択

terminaluse test_db;

上記のデータベース(test_db)はサンプルです。
###テーブルを作成

トラックバックテーブルを作成します。

terminal
create table trackback (
    id int(10) unsigned not null auto_increment,
    entry_id int(10) unsigned not null default 0,
    url varchar(200) not null,
    title varchar(100) not null,
    excerpt text not null,
    blog_name varchar(100) not null,
    state enum('info','checked') default 'info',
    ip_address varchar(16) not null,
    created datetime,
    modified datetime,
    primary key `id` (`id`),
    key `entry_id` (`entry_id`)
);

テーブルの構造

カラム名概要
idテーブルのidです。
entry_idトラックバックを受信するページのidです。
urlトラックバック送信側のページのURLです。
titleトラックバック送信側のページのタイトルです。
excertトラックバック送信側のページの記事の内容
blog_nameトラックバック送信側のページの名前です。
state「info」は確認前、「checed」は確認のような形のフラグです。
ip_addressトラックバック送信側のipaddresを保存します。
created新規登録時点の時間を保存します。
modified更新時の時間を保存します。

モデルの処理

モデルがないとコントローラー側でエラーになるので
先にモデルを作成します。

application/model/trackback_model.php<?php
class Trackback_model extends CI_Model{
    function __construct(){
        parent::__construct();
        $this->load->database();
    }
    //idチェック関数
    Public function id_check($id){
        $query = $this->db->get_where('trackback',array('id' => $id),1);
        if($query->num_rows > 0){
            return true;
        }else{
            return false;
        }
    }
    //DB保存
    Public function insert($data){
        $this->db->set($data);
        return $this->db->insert('trackback', $this);
    }
    //trackback取得
    Public function get_trackback (){
        $query = $this->db->get('trackback');
        if($query->num_rows > 0){
            return $query->result_array();
        }else{
            return false;
        }
    }
}
?>

idチェック関数

get_wherepostは今回作成はしていませんが記事ページのデータベースになります。 記事の「dが存在するかのチェックをしています。

DB保存

insert$dataはコントローラー側で加工しています。 $dataの配列を、先ほど作成したtrackbackDBへ保存しています。

trackback取得

get_trackbackではtrackbackDBから保存してあるデータを取得します。

コントローラーの処理

コントローラーでは「Codeigniter」のトラックバッククラスを使用します。
今回のサンプルでは以下の形でトラックバックを受信します。

受信するパス

bash(ドメイン)/trackback/receive/(記事のid

コントローラーの作成

application/controller/trackback.php<?php
class Trackback extends CI_Controller {
    public function __construct() {
        parent::__construct();
        //モデルを読み込みます。
        //application/models/trackback_model.php
        $this->load->model('trackback_model');
        $this->load->library('trackback');
    }
    public function receive ($id = null){
        if(is_null($id) || $this->trackback_model->id_check($id)){
            //もしページのidが存在しなかったらエラーを返します。
            $this->trackback->send_error('エラーです。');
        }
        if ( ! $this->trackback->receive()){
            $this->trackback->send_error("トラックバックデータに不正なデータが含まれます");
        }
        //エラーがなければDBに登録
        $data = array(
            'entry_id'    => (int) $id,
            'url'        => urldecode ($this->trackback->data('url')),
            'title'        => urldecode ($this->trackback->data('title')),
            'excerpt'    => urldecode ($this->trackback->data('excerpt')),
            'blog_name'    => urldecode ($this->trackback->data('blog_name')),
            'state'     => 'info', 
            'ip_address'        => $this->input->ip_address(),
            'created'    => date('Y-m-d H:i:s'),
            'modified'    => date('Y-m-d H:i:s')
        );
        $res = $this->trackback_model->insert($data);
        if($res){
            $this->trackback->send_success();
        }else{
            $this->trackback->send_error('登録できませんでした。');
        }
    }
    //トラックバック表示ページ
    public function info () {
        $res = $this->trackback_model->get_trackback();
        if($res){
            echo '<table>';
            foreach    ($res as $lists){
                echo '<tr>';
                foreach ($lists as $list) {
                    echo '<td>'.htmlspecialchars($list, ENT_QUOTES, 'UTF-8', FALSE).'</td>';
                }
                echo '</tr>';
            }
            echo '</table>';
        }else{
            echo  'データがありません。';
        }
    }
}
?>

処理の解説

トラックバッククラスの読み込み

以下のコードでトラックバッククラスを読み込みます。

php$this->load->library('trackback');

エラーを返す

引数はメッセージです。

php$this->trackback->send_error('エラーです。');

トラックバックのチェック

正しい形式で送られてきたかチェックします。

php$this->trackback->receive();

トラックバックの成功を返す

トラックバック送信側に成功したメッセージを返します。

php$this->trackback->send_success();

トラックバックの表示

「info」メソッドではトラックバックが「trackback」DBに保存されていたら表示します。

表示するURL

bash(ドメイン)/trackback/info

コードはサンプルですので、「View」などを使用して任意に装飾してください。

最後に

今回のサンプルコードではトラックバック受信が実装する最低限のコードです。 最近では海外などから、不正に送信されるケースが多いため 実際に使用する際はipaddressからの受信時の時間制限や、スパム登録の機能など セキュリティー上考慮した上で実装してください。

参考文献

記事Article

もっと見る