rakutoネット
お問合せ 免責事項 Q&A 掲示板 サイト管理 リンク サイトマップ
HOME > トラックバック

トラックバック


トラックバックの実装

■トラックバック技術仕様書:Discreet Blog
■Services_Trackback:PEAR
■トラックバックってなに?:レントラ
■あなたのサイトを一斉送信!:PinGoo!

ブログの普及によりその周辺技術を扱う機会が増えてきました。
固定HTMLのFTP等でアップロードして終わりというサイトのニーズも少なく感じます。

ブログの代表機能の一つにトラックバックは欠かせないと思っております。
上にあるトラックバックのレンタルがあるなんて驚きでした。

[サンプル]
●トラックバックPing
●トラックバックPingの一覧
●テスト用トラックバックURL
http://study.rakuto.net/sample/trackback/trackback.php

トラックバックPing

<?php
/**
 * tbpingクラス
 *
 * @author 高橋 裕志郎 <yujiro@rakuto.net>
 * @package tbping
 * @access public
 * @version 0.1
 */
class tbping
{
    /**
     * PING先
     * @var string
     */
    var $ping = '';
 
    /**
     * URL
     * @var string
     */
    var $url= '';
 
    /**
     * タイトル
     * @var string
     */
    var $title = '';
 
    /**
     * 概要
     * @var string
     */
    var $excerpt = '';
 
    /**
     * ブログ名
     * @var string
     */
    var $blog_name = '';
 
    /**
     * コンストラクタ
     *
     * @access public
     * @return void
     **/
    function tbping()
    {
        $this->ping = empty($_POST['ping'])?
                    'http://localhost/trackback.php':$_POST['ping'];
        $this->url = empty($_POST['url'])?
                    'http://localhost/':$_POST['url'];
        $this->title = empty($_POST['title'])?
                    'タイトル':$_POST['title'];
        $this->excerpt = empty($_POST['excerpt'])?
                    '要約':$_POST['excerpt'];
        $this->blog_name = empty($_POST['blog_name'])?
                    'ブログ名':$_POST['blog_name'];
    }
 
    /**
     * Pingの送信
     *
     * @access public
     * @return boolean
     **/
    function send()
    {
        $parse = parse_url($this->ping);
 
        $buff = '';
        $post = 
            'url=' . rawurlencode($this->url) .
            '&title=' . rawurlencode($this->title) . 
            '&blog_name=' . rawurlencode($this->blog_name) . 
            '&excerpt=' . rawurlencode($this->excerpt); 
 
        $request  = 
            'POST '.$this->ping.' HTTP/1.1'."\r\n".
            'Host: '.$parse['host']."\r\n".
            'User-Agent: PHP fsockopen'."\r\n".
            'Accept: text/xml,application/xml,'.
            'application/xhtml+xml,text/html;q=0.9,'.
            'text/plain;q=0.8,video/x-mng,image/png,'.
            'image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1'."\r\n".
            'Content-type: application/x-www-form-urlencoded'."\r\n".
            'Content-Length: ' . strlen($post) . "\r\n".
            'Connection: Close'."\r\n\r\n".
            $post;
 
        $errno  = null; 
        $errstr = null;
        $fp = fsockopen($parse['host'], 80, $errno, $errstr, 30);
        if (!$fp) {
           $buff = $errstr.' ('.$errno.')<br />'."n";
        } else {
           fwrite($fp, $request);
           while (!feof($fp)) {
               $buff .= fgets($fp, 4096);
           }
           fclose($fp);
        }
 
        $result = false;
        if (preg_match("/<error>0</error>/i", $buff)){
            $result = true;
        }
        
        return $result;
    }
} // tbping
 
header('Content-Type: text/html; charset=UTF-8');
?>
<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>トラックバックピング</title>
  </head>
  <body>
<?php
    $obj_tbping = new tbping();
    if (!empty($_POST['send'])){
        $obj_tbping->send();
    }
?>
    <form name="ping" method="post" 
        action="<?php echo $_SERVER['PHP_SELF'];?>">
      <label for="ping">送信先</label>:
      <input id="ping" type="text" name="ping" size="32">
      <br />
 
      <label for="url">固定リンク</label>:
      <input id="url" type="text" name="url" size="32">
      <br />
 
      <label for="title">タイトル</label>:
      <input id="title" type="text" name="title" size="32">
      <br />
 
      <label for="blog_name">ブログ名</label>:
      <input id="blog_name" type="text" name="blog_name" size="32">
      <br />
 
      <label for="excerpt">抜粋、要約</label>:
      <textarea id="excerpt" name="excerpt" cols="40" rows="4"></textarea>
      <br />
 
      <input type="submit" name="send" value="TB送信" /><br />
    </form>
  </body>
</html>

トラックバック受信

<?php
/**
 * trackbackクラス
 *
 * @author 高橋 裕志郎 <yujiro@rakuto.net>
 * @package trackback
 * @access public
 * @version 0.1
 */
class trackback
{
    /**
     * SQLiteハンドル
     * @var object
     */
    var $dbh = null;
 
    /**
     * タイトル
     * @var string
     */
    var $title = '';
 
    /**
     * 概要
     * @var string
     */
    var $excerpt = '';
 
    /**
     * URL
     * @var string
     */
    var $url= '';
 
    /**
     * ブログ名
     * @var string
     */
    var $blog_name = '';
 
    /**
     * コンストラクタ
     *
     * @access public
     * @return void
     **/
    function trackback()
    {
        $this->dbh = sqlite_open('tb.db', 0666);
        
        $this->title = empty($_POST['title'])?
                '':$_POST['title'];
        $this->excerpt = empty($_POST['excerpt'])?
                '':$_POST['excerpt'];
        $this->url = empty($_POST['url'])?
                '':$_POST['url'];
        $this->blog_name = empty($_POST['blog_name'])?
                '':$_POST['blog_name'];
    }
 
    /**
     * テーブルの作成
     *
     * @access public
     * @return integer  データ操作結果
     */
    function create()
    {
        $sql = 
            'CREATE TABLE tb ('.
                'id INTEGER NOT NULL,'.
                'timestamp TIMESTAMP NOT NULL,'.
                'title VARCHAR(255),'.
                'excerpt TEXT,'.
                'url VARCHAR(255),'.
                'blog_name VARCHAR(255),'.
                'ip_address VARCHAR(64),'.
                'PRIMARY KEY (id)'.
            ')';
        return sqlite_query($sql, $this->dbh);
    }
 
    /**
     * データ操作設定・実行
     *
     * @access public
     * @return integer  データ操作結果
     */
    function insert()
    {
        // 直接入力
        $timestamp = date('Y-m-d H:i:s',time());
        $ip_address = $_SERVER['REMOTE_ADDR'];
 
        $this->title = sqlite_escape_string($this->title);
        $this->excerpt = sqlite_escape_string($this->excerpt);
        $this->url = sqlite_escape_string($this->url);
        $this->blog_name = sqlite_escape_string($this->blog_name);
 
        $sql = 
            'INSERT INTO '.
                'tb ('.
                    'timestamp,'.
                    'title,'.
                    'excerpt,'.
                    'url,'.
                    'blog_name,'.
                    'ip_address'.
                ') VALUES ('.
                    "'".$timestamp."',".
                    "'".$this->title."',".
                    "'".$this->excerpt."',".
                    "'".$this->url."',".
                    "'".$this->blog_name."',".
                    "'".$ip_address."'".
                ')';
 
        return sqlite_query($sql, $this->dbh);
    }
} // trackback
 
$obj_tb = new trackback();
$obj_tb->create();
 
header('Content-type: text/xml; charset=UTF-8', true);
echo '<?xml version="1.0" encoding="utf-8"?>'."\r\n";
echo '<response>'."\r\n";
 
if ($obj_tb->insert()){
    echo '<error>1</error>'."\r\n";
} else {
    echo '<error>0</error>'."\r\n";
    echo '<message>Something Bad happened.</message>'."\r\n";
 
}
echo '</response>'."\r\n";
?>

GETを受信した際のPing の一覧表示機能は実装しておりません。
?__mode=rss の機能については技術仕様書等をお読みください。


<<PATH_INFOで拡張子を隠す
PHP Tips PEARのトラックバック>>

PHPリング

@PHP.ring Home
<5 <1 Random List 1> 5>

rktSQLite

  • sourceforge.jp

広告


アマゾン検索

サーチ:
Amazon.co.jpアソシエイト

カテゴリ

  •  Templateエンジンのすすめ Templateエンジンのすすめ
  •  SQLiteをやってみよう SQLiteをやってみよう
  •  SQLite SQLコマンド一覧 SQLiteコマンド一覧
  •  SQLite 管理プログラムSQLite 管理
  •  はじめてのEclipse はじめてのEclipse
  •  PHP SQLiteのTIPS PHP SQLiteのTIPS
  •  サンプル サンプル/ダウンロード
  •  リンク リンク
  •  掲示板 掲示板

メニュー

  •  incoude pathを通す
  •  カレンダー
  •  排他処理
  •  PEAR DB
  •  画像アップロード
  •  プログレスバー
  •  PATH_INFOで拡張子を隠す
  •  トラックバック
  •  PEARのトラックバック
  •  iMagickでGIFアニメ
  •  メモリ上の画像をImageMagickする
  •  暗号化と復号化
  •  strtotime()でmonth処理

キーワード検索

キーワード



最近のTB

  •  2006/03/13さくらのブログに挑戦[rakutoネットブログ]
  •  2006/01/20レーザーチャートの作成方法[脳内研究所]

Summary

  •     ATOM(XML)
  •     RDF(XML)
  •     RSS0.92(XML)
  •     RSS2.0(XML)

Powered by

  •     PHP
  •     Smarty
  •     SQLite
  •     MySQL
Copyright (C) 2005 `rakuto.net' All Rights Reserved.