MovableTypeで人気記事(アクセスランキング)を表示

当ブログのアクセスランキングを右側メニューに掲載しました。
アクセス解析では、その月のページビューを見ることでどのページにアクセスが多いのかを確認することが出来ますが、これからはわざわざアクセス解析を見なくても一目でランキングを把握することが出来るようになりました。SEOを考える上でも、1人あたりのページビューが増えたらいいなぁなんて思ってます。

設置しようと考えた当初は、そんな大したことしなくてもプラグイン等で簡単にできるんじゃないかと思っていましたが、いろいろと調べていくうちに結構大変なことが分かってきました。実際、phpやらhtaccessやらcronやら普段ほとんどさわったことがないものが多かったんで、かなり苦労しました。以下、備忘録として記載しておきます。

スポンサーリンク

手順は以下の通り。

1.ランキング表示用のPHPをダウンロードし、MovableTypeに設定。
2.さくらインターネットでのPHP使用環境にあわせてパーミッションやら.htaccessを設定。
3.cronを使って、1.で設定したPHPを定期実行。


1.ランキング表示用のPHPをダウンロードし、MovableTypeに設定。
まずは、Open MagicVox.netさんの人気記事のランキングを表示するを参考に、hottopic200.php.tmplというPHPファイルをダウンロード。テキストエディタにて開き、とりあえず全部コピーしてMT管理画面から[テンプレート]-[インデックステンプレート]-[テンプレートの内容]にペースト。[テンプレート名]- 人気記事ランキング解析、[出力ファイル名]- hot-ranking.php として、テンプレートの内容を当ブログ用にカスタムします。
nDivDay(集計する期間)、nTopEntry(表示件数)、szLogDir(サーバのアクセスログへのパスを指定)、szOutput(集計結果を出力するファイル名を指定 当ブログでは hottopic.php に指定)を変更し、37 行付近の GetLogFileNamesは変更なしで、76 行付近の IsTargetURLの指定を行う。

ここでまずつまずきました(1回目)。perlの正規表現なんて使ったことがなく、いろいろと検索しては試行の繰り返し。当ブログの個別エントリーパスは、
/archives/yyyy/mm/entry_basename.html
ですので、それをperlの正規表現にあわせて
return (preg_match ("/^¥/archives¥/[0-9][0-9][0-9][0-9]¥/[0-9][0-9]¥/(¥w+)¥.html/", $url));
という表記に変更。これで、ようやく書き出しに成功。
テンプレートの内容で、「// 1つのアイテムを成形します」と「// ファイル全体を成形します」の部分を当ブログの表示用に変更。


2.さくらインターネットでのPHP使用環境にあわせてパーミッション、phpインクルード、.htaccessを設定。
成功と書きましたが、その前にひとつつまずきがありました(2回目)。
上記テンプレートで書き出したhot-ranking.phpのパーミッションが666だったため、httopic.phpを書き出すことが出来ませんでした。標準の設定だとMTはPHPもパーミッションを666で出力するので、さくらインターネットの場合は500エラーが出ます。これに対応するために、mt-config.cgiに以下の内容を追加(Movable Type 3.32日本語版アップグレード備忘録-hakuro.info blogさんを参考にさせていただきました。)。
DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022

HTMLPerms 0777
UploadPerms 0777

書き出したhottopic.phpをhtmlに表示させるために、さくらインターネットの/usr/local/bin/にFTP接続し「php」をダウンロード。「php → php.cgi」にリネームし、当ブログのトップディレクトリにアップ(index.htmlと同階層)。テキストエディタにて以下の内容の.htaccessファイルを作成し、php.cgiと同階層にアップ。

.htaccess内容----------------------------------
Addhandler myphp-script .html
Action myphp-script /php.cgi
AddType application/x-httpd-php .html


ページ内にアクセスランキングを表示するために、
<? include("<$MTBlogURL$>hottopic.php"); ?>
をインデックステンプレートやアーカイブテンプレートに追加していよいよ再構築。ところが500エラーが表示されてしまい、ここでまたつまずきです(3回目)。さくらのレンタルサーバ非公式FAQを見ては、.htaccessを書き直し、何度繰り返しても500エラーの表示。何度やってもうまくいかないので、文字コードがいけないのかなと思い、Windowsにて既存の.htaccessファイルをダウンロードし、その内容を秀丸エディタにて上記内容に変更し、php.cgiと同階層にアップすると、見事に表示されました。は〜、マジ疲れましたよ。ここが一番大変だった。どうやら文字コードが原因だったようですね。


3.cronを使って、1.で設定したPHPを定期実行。
さくらインターネットサーバコントロールにアクセスし、左のメニューの[アプリケーションの設定]-[CRON設定ファイルの編集]で、hot-ranking.phpファイルを6時間毎に実行するように設定しました。


これで完了です。かなり時間がかかってしまいましたが、これでphpを使う環境が整いました。さくらインターネットでのphpの使用は、結構面倒なことが多いようですので、該当される方の参考になれば幸いです。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
当ブログの最新記事をRSSで配信中です。登録はこちらからお願いします。