前回、データベース障害にもめげない精神を鍛えた私が次に述べておくべきは、RSSの配信の企みについてである。RSSはあんまり更新頻度が高いと、取得先で嫌がられてしまうことがあるので、ニーズに合わせて取得してもらえるように1時間毎と3時間毎の2種類のRSSを出力してみる。要件は以下のような感じだ。
- 1時間毎と3時間毎の2種類のRSS出力用の記事を作成
- RSS出力用の記事は、クリックが多かったのも順にする
- タイトルは重複しないように、すでにタイトルに使った記事はすっ飛ばす
- RSS出力用の記事は、取得記事情報と区別するためカスタム投稿を作成する
これで見えてきたのは、クリックカウントの仕組みが必要だということと、カスタム投稿の作成が必要だということだ。まずは、クリックカウントの仕組みを作ってみる。今回はwordpressブログの一記事が一リンクになっているので、wordpressのコメントの仕組みは使われないデッドゾーンになっている。なのでコメントカウントはすべて0のままになってしまうので、ここをクリックカウント用に使わせてもらう。具体的には、mysql のテーブル”wp_posts”の”comment_count”にクリックカウント数を突っ込んでいく。もともとコメント数をカウントするための項目なのでデータ型もばっちりだ。
mysql> DESC wp_posts;
+-----------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_author | bigint(20) unsigned | NO | MUL | 0 | |
| post_date | datetime | NO | | 0000-00-00 00:00:00 | |
| post_date_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content | longtext | NO | | NULL | |
| post_title | text | NO | | NULL | |
| post_excerpt | text | NO | | NULL | |
| post_status | varchar(20) | NO | | publish | |
| comment_status | varchar(20) | NO | | open | |
| ping_status | varchar(20) | NO | | open | |
| post_password | varchar(20) | NO | | | |
| post_name | varchar(200) | NO | MUL | | |
| to_ping | text | NO | | NULL | |
| pinged | text | NO | | NULL | |
| post_modified | datetime | NO | | 0000-00-00 00:00:00 | |
| post_modified_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content_filtered | longtext | NO | | NULL | |
| post_parent | bigint(20) unsigned | NO | MUL | 0 | |
| guid | varchar(255) | NO | | | |
| menu_order | int(11) | NO | | 0 | |
| post_type | varchar(20) | NO | MUL | post | |
| post_mime_type | varchar(100) | NO | | | |
| comment_count | bigint(20) | NO | | 0 | |
+-----------------------+---------------------+------+-----+---------------------+----------------+
23 rows in set (0.02 sec)
クリックカウンタの仕組みは、RSSで取得した記事リンクへ直接飛ばすのではなく、クリックカウンタPHPへURLを渡し、そこでDBを更新して、目的の記事リンクのURLへリダイレクトしてやればよい。
クリックカウンタPHP
<?php require('./wp-load.php');
/*リンク先URLを取得する */
$url = $_GET['url'];
$c_id = $_GET['c_id'];
/* MySQL接続,DB選択 */
$link = mysql_connect('DBサーバ', 'DBユーザ名', 'ぱすわーど');
if (!$link) {
echo $link;
$sql_error = "mysql_error()";
echo $sql_error;
}
$db_selected = mysql_select_db('DB名', $link);
if (!$db_selected) {
echo $db_selected;
$sql_error = mysql_error();
echo $sql_error;
}
/* カウンタ取得、カウントアップ */
$result = mysql_query("UPDATE wp_posts SET comment_count = comment_count +1 WHERE ID = ".$c_id);
if (!$result) {
echo 'select failed.' ;
$sql_error = mysql_error();
echo $sql_error;
}
header('location:'.$url);
?>
comment_countはデフォルト値が”0″なので気にせず取得して1をプラスしてしまえばいい。前の記事で紹介したリンク作成PHPを修正して、リンクURLをこのPHPに引数で渡すように作り変えれば、クリックカウントの仕組みができてしまうのだ!!お手軽だ!!クリック数を表示したければ、同じくリンク作成のPHPに、この値を取得して表示させればいい。便利だ!月間カウント数や、週間カウント数などをとりたい場合は、やはり新規にテーブルを作ってごにょごにょしなければならないが、その場合も基本的に仕組みはこれと同じでいけるだろう。
これで各記事に優劣をつけることができた。クリックカウント数で並び替えたリストをRSSで配信することにより、みんなの関心のある記事をユーザーに届けることができるようになる。では次回は、カスタム投稿の追加からRSS配信用のPHPの作成へといった流れになっていくだろう。震えて待て!
*追記: 反響にお答えし、アンテナサイト用Wordpressテーマ「Antena Institute」をリリースいたしました。
詳しくは、「Antena Instituteについて」をご参照ください。
ご購入を希望される方は、下記リンクにてAntena Instituteをご購入ください。
Twibot Institute | 銀仁堂