트랙백(Trackback Class)

트랙백 클래스를 이용하시면 트랙백데이터를 보내거나 받을 수 있습니다.

트랙백에 익숙하지 않으시면 여기를 참조해주세요.

트랙백 클래스 사용하기 Using the Trackback Class

클래스 초기화 Initializing the Class

CodeIgniter의 다른 클래스들 처럼, 트랙백클래스도 컨트롤러에서 $this->load->library() 함수를 이용해 초기화 합니다:

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

일단 로드 되면, 다음과 같이 트랙백 객체를 이용하시면 됩니다.

$this->trackback

트랙백 보내기 Sending Trackbacks

컨트롤러내 어떤 함수에서라도 아래와 같은 코드로 트랙백을 보낼 수 있습니다:

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

$tb_data = array(
        'ping_url'  => 'http://example.com/trackback/456',
        'url'       => 'http://www.my-example.com/blog/entry/123',
        'title'     => 'The Title of My Entry',
        'excerpt'   => 'The entry content.',
        'blog_name' => 'My Blog Name',
        'charset'   => 'utf-8'
);

if ( ! $this->trackback->send($tb_data))
{
        echo $this->trackback->display_errors();
}
else
{
        echo 'Trackback was sent!';
}

배열 데이터 설명:

  • ping_url -트랙백을 보내는 사이트의 URL 입니다(여러분 사이트의 입장에서 보면 받는 사이트가 되겠죠). 콤마로 구분하여 여러 URL에 보낼수도 있습니다.
  • url - 웹로그표제어(weblog entry)를 가지고 있는여러분 사이트의 URL 입니다.
  • title - 웹로그표제어의 제목입니다.
  • excerpt - 여러분의 웹로그표제어의 내용입니다. 참고: 트랙백클래스는 표제어중 앞 500글자만 자동전송하며, HTML 을 모두 벗겨집니다(제거됩니다).
  • blog_name - 웹로그의 이름입니다.
  • charset - 여러분 웹로그의 문자 인코딩입니다.생략하시면, UTF-8 이 사용됩니다.

Note

트랙백 클래스는 자동으로 처음 500 글자만 보냅니다. 그리고 모든 HTML 태그를 제거합니다.

트랙백 전송함수는 성공여부에 따라서 TRUE/FALSE를 반환합니다.실패한다면, 아래함수를 사용하여 에러 메세지를 추출하실 수 있습니다:

$this->trackback->display_errors();

트랙백 받기 Receiving Trackbacks

트랙벡을 받기전에 반드시 웹로그(weblog)를 생성하셔야 합니다. 만약 아직 블로그가 없으시다면, 더 진행하는 것은 의미가 없겠죠 .

트랙백을 받는 것은 보내는 것보다 약간 더 복잡합니다. 받은 것을 저장할 데이터베이스 테이블이 필요하고, 입력되는 트랙백데이터가 유효한지도 확인해야 하기 때문 입니다. 스팸이나, 중복데이터를 방지하기 위해서 전반적인 검증코드의 작성이 필요합니다.또한 특정 IP 에서 주어진 시간간격안에 넘어오는 트랙백 개수를 제한하여 스팸을 방지할 필요도 있을 것입니다. 트랙백을 받는 절차는 상당히 간단합니다.; 검증부분이 대부분의 작업을 차지합니다.

Your Ping URL

트랙백을 수신하기 위해서는 각 웹로그표제어(weblog entries)옆에 트랙백 URL을 표시해야 합니다. 이 URL 을 가지고 사람들은 여러분에게 트랙백을 보낼수 있게 됩니다 (우리는 이것을 여러분의 “Ping URL” 로 참조하게 됩니다).

Ping URL은 트랙백을 수신할 컨트롤러의 함수를 가리키고 있어야 하며, 각 웹로그표제어의 아이디를 포함해야 합니다. 그래야만 트랙백을 수신받았을 때, 특정 표제어와 연관시켜 작업하실 수 있습니다.

예를 들어, 컨트롤러 클래스가 Trackback이고, 수신함수가 receive이면 Ping URL은 아래와 같이 구성됩니다:

http://example.com/index.php/trackback/receive/entry_id

entry_id 는 여러분 웹로그 각 표제어의 유일한 아이디 입니다.

트랙백 테이블 생성 Creating a Trackback Table

트랙백을 수신하기 전에 수신한 트랙백을 저장할 테이블을 만들어야 합니다. 아래는 그 테이블의 기본 프로토타입입니다:

CREATE TABLE trackbacks (
        tb_id int(10) unsigned NOT NULL auto_increment,
        entry_id int(10) unsigned NOT NULL 기본값 0,
        url varchar(200) NOT NULL,
        title varchar(100) NOT NULL,
        excerpt text NOT NULL,
        blog_name varchar(100) NOT NULL,
        tb_date int(10) NOT NULL,
        ip_address varchar(45) NOT NULL,
        PRIMARY KEY `tb_id` (`tb_id`),
        KEY `entry_id` (`entry_id`)
);

트랙백의 정의에서는 수신할 때 단지 4개의 정보만을 요구합니다[url, 제목(title), 발췌문(excerpt),블로그이름( blog_name)]. 그러나 데이터 사용성을 높이기위해 우리는 몇개의 필드를 더 추가했습니다(날짜, IP 주소 등).

트랙백 처리 Processing a Trackback

아래는 어떻게 트랙백을 수신하여 처리하는지를 보여주는 예제입니다. 아래 코드는 트랙백을 수신하는 컨트롤러 함수내에서 사용해야 합니다:

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

if ($this->uri->segment(3) == FALSE)
{
        $this->trackback->send_error('Unable to determine the entry ID');
}

if ( ! $this->trackback->receive())
{
        $this->trackback->send_error('The Trackback did not contain valid data');
}

$data = array(
        'tb_id'      => '',
        'entry_id'   => $this->uri->segment(3),
        'url'        => $this->trackback->data('url'),
        'title'      => $this->trackback->data('title'),
        'excerpt'    => $this->trackback->data('excerpt'),
        'blog_name'  => $this->trackback->data('blog_name'),
        'tb_date'    => time(),
        'ip_address' => $this->input->ip_address()
);

$sql = $this->db->insert_string('trackbacks', $data);
$this->db->query($sql);

$this->trackback->send_success();

Notes:

표제어아이디(entry ID)번호는 URL의 세 번째 파라미터로 넘어온다고 가정합니다. 이것은 이전에 부여했던 URI 예제에 근거합니다:

http://example.com/index.php/trackback/receive/entry_id

표제어아이디(entry_id)는 URI 새그먼트의 세 번째 요소이고,아래아 같이 추출해 낼수 있습니다.

$this->uri->segment(3);

위의 트랙백 수신코드에서는, 세 번째 새그먼트가 빠질경우, 에러가 발생됩니다. 유효한 표제어아이디(entry ID)가 없을 경우, 계속할 필요가 없겠죠 .

$this->trackback->receive() 함수는 들어오는데이터를 조사하여 필요한 4가지 데이터(url, title, excerpt, blog_name)가 포함되어있는지를 확인합니다. 그 결과에따라서 TRUE 나 FALSE를 반환합니다. 실패시 에러 메세지를 발생시킵니다.

들어오는 트랙백데이터는 아래와 같이 추출할 수 있습니다:

$this->trackback->data('item')

item 부분은 4가지 정보중 하나를 나타냅니다: url, title, excerpt, or blog_name

트랙백 데이터가 성공적으로 수신되면, 여러분은 아래와 같이 성공메세지를 발생시키시겠지요:

$this->trackback->send_success();

Note

위 코드는 데이터검증부분이 빠져있으므로 여러분이 직접 추가하셔야 합니다.

클래스 레퍼런스 Class Reference

class CI_Trackback
$data = array('url' => '', 'title' => '', 'excerpt' => '', 'blog_name' => '', 'charset' => '')

트랙백 데이터 배열.

$convert_ascii = TRUE

높은 ASCII 와 MS Word 문자를 HTML 엔티티로 변환할지 여부.

send($tb_data)
인수:
  • $tb_data (array) – Trackback data
반환값:

TRUE on success, FALSE on failure

반환형:

bool

트랙백 보내기.

receive()
반환값:TRUE on success, FALSE on failure
반환형:bool

들어오는 트랙백 데이터의 유효성을 검사합니다, 성공이면 TRUE 를, 실패하면 FALSE를 반환합니다. 데이터가 유효하면, 데이터베이스에 입력될 수 있도록, $this->data 배열로 설정됩니다.

send_error([$message = 'Incomplete information'])
인수:
  • $message (string) – Error message
반환형:

void

에러 메세지와 함께 트랙백 요청에 대한 응답

Note

이 함수는 스크립트를 종료합니다.

send_success()
반환형:void

성공 메세지와 함께 트랙백 요청에 대한 응답

Note

이 함수는 스크립트를 종료합니다.

data($item)
인수:
  • $item (string) – Data key
반환값:

Data value or empty string if not found

반환형:

문자열

응답 데이터 배열에서 하나의 아이템을 반환

process($url, $data)
인수:
  • $url (string) – Target url
  • $data (string) – Raw POST data
반환값:

TRUE on success, FALSE on failure

반환형:

bool

소켓 연결을 하고, 서버에 데이터를 전달합니다. 성공시 TRUE 를, 실패시 FALSE를 반환합니다.

extract_urls($urls)
인수:
  • $urls (string) – Comma-separated URL list
반환값:

Array of URLs

반환형:

array

이 함수는 여러 트랙백을 전달할 수 있게 합니다. URL 문자열을 받아, (쉼표 또는 공백으로 구분) 각각의 URL 을 배열로 담습니다.

validate_url(&$url)
인수:
  • $url (string) – Trackback URL
반환형:

void

URL 의 맨 앞에 http:// 이 없다면, 맨 앞에 붙입니다.

get_id($url)
인수:
  • $url (string) – Trackback URL
반환값:

URL ID or FALSE on failure

반환형:

문자열

트랙백 URL의 ID 를 찾고 반환, 실패시 FALSE 반환.

convert_xml($str)
인수:
  • $str (string) – 입력 문자열
반환값:

Converted string

반환형:

문자열

XML 문자를 엔티티로 변환합니다.

limit_characters($str[, $n = 500[, $end_char = '…']])
인수:
  • $str (string) – 입력 문자열
  • $n (int) – Max characters number
  • $end_char (string) – Character to put at end of string
반환값:

Shortened string

반환형:

문자열

문자 수에 기초해, 완전한 문자를 유지합니다.

convert_ascii($str)
인수:
  • $str (string) – 입력 문자열
반환값:

Converted string

반환형:

문자열

높은 ASCII 문자와 MS Word 특수문자를 HTML 엔티티로 변환.

set_error($msg)
인수:
  • $msg (string) – Error message
반환형:

void

에러 메세지 설정.

display_errors([$open = '<p>'[, $close = '</p>']])
인수:
  • $open (string) – Open tag
  • $close (string) – Close tag
반환값:

HTML formatted error messages

반환형:

문자열

에러 메세지를 HTML 형식으로 반환하고, 에러가 없으면 빈 문자열을 반환합니다.