前回、データベース障害にもめげない精神を鍛えた私が次に述べておくべきは、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をご購入ください。

Antena Institute(PHP7版) | 銀仁堂

Antena Institute(PHP5版) | 銀仁堂

さらに、TwitterBotスクリプトも併せてどうぞ。
Twibot Institute | 銀仁堂

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*


*

投げ銭はこちらへ
bitcoin : 1AFU37YroGt8ohmFz8nG1N2ockL56Z4hfQ

ADA Coin: DdzFFzCqrhskq33AqGL8XkJZ3bb1hpxJYTd2UrJFKVpXphWG8d1RuhQrKymmKU1zzjvGi7oU69PaJ7nXECRG4Kpvg27Pghf3hpRNhRMy
2019年6月
« 12月    
 12
3456789
10111213141516
17181920212223
24252627282930
カテゴリー