WordPressに変更しました!

今まで Movable Type を使っていたこのブログ。 本日から WordPress に移行してみました。

最近何故か立て続けに WordPress のお仕事をいただきました。 まぁ、 大したことはやっていないので、 大きなことは言えないのですけどね(笑)。 せっかく覚えさせていただいたので、 これを機会に自分のブログも変更することにしてみました。 パーマリンクも変えずに移行できたつもりですが、どうでしょ? 変なところを見つけたら、 お知らせいただけると助かります。

あとで変更内容については、 まとめておこうと思います。

MT5とmixiの日記を連携

このサイトを Movable Type 5 に変更してから、 mixi の日記を外部ブログとして設定したつもりだったのですが、全然更新されてませんでした。

ということで、 ちょっと検索してみました。
まず、 「鈴木7才ダイアリー」さんの記事を参考に、 RSS を自動で作成するよう「購読」ウィジットを追加します。 なお、うちのサイトは何故か index.xml でなくて atom.xml しかできてなかったです。
で、 下記のように変更したら、 うまくいったのでメモです。
  • mixi のトップページに行き、 そこから「設定変更」ボタンをクリック。
  • 外部サービス連携の「日記/ブログの選択」をクリック。
  • 日記/ブログの選択は、「その他」を選択。
  • 日記/ブログのURLは、「http://wellvil.com/blog/」 を記入。(自分のブログのトップページ)
  • RSSのURLは、「http://wellvil.com/blog/atom.xml」を記入。(自分のサイトのRSS)
以上で、自分のプロフィールページに「最近の日記」が表示されるようになりました!

レンタルサーバー移行計画

このサーバーのレンタルサーバーの使用期限が、 あと一ヶ月弱で切れてしまいます。 今はハッスルサーバーを利用しています。 なんだかんだ言いながら、 おそらく 3 年くらい利用させていただきました。
機能的にはまったく問題ありません。 MySQL の バージョン4と5が同時に使用可能というのは、 この価格帯のレンタルサーバーではここだけじゃないですかね。 価格も非常に安いのですが、最近は負荷が高いようです。
現在は、 Movable Type の 4.21 を利用していますが、最近記事投稿が一度でうまくいった試しがありません。 再構築でもことごとく失敗するようになり、 正直厳しい状況でした。
Movable Type の Version 5β が出るタイミングで乗り換えようと思っていたのですが、 残念ながらリリースが延期されてしまったため、 現在のバージョンのままとりあえず移行することに決定。 現在 2 つのレンタルサーバーの試用を申し込んで評価中です。 ともに一月 500円 以下の安価なレンタルサーバー。 さて、 どちらにしましょうか? 早ければ明日には決めちゃいたいところです^^

MTvote でアクセス制限&投票データのクリア

MTvoteを付けたのは良いのだけれど、 なんだかよくわからない記事にたくさん投票されてます。 アクセスログを見てみると、 どうもクローラー(ボット)からのアクセスが大半らしい・・・
これでは正しい集計ができないので、対策をとってみましょう。 ついでに、 同じ人が同じ記事に一度に何度も投票できないような制限を、 非常に単純な仕掛けでかけてみます。
改造内容はこんな感じにします。

  • Google、 Yahoo!、 MSN、 Baidu からのクローラーをアクセス制限
  • 同一IPアドレスから同一Entryへの連続投票を制限

すごく手抜きなので、制限事項は下記以外にもたくさんありますw

  • IPアドレスとEntry_IDはサーバーで一つしか保持していないので、Aユーザが2回連続投票する間にBユーザが投票してしまうと、Aユーザは連続投票できてしまう。
  • 保存ファイルにロックをかけていない(タイミングによっては壊れてしまうかも)
  • FORMはGETのみ(POSTに対応させてません)

ほかにもいろいろありますが、ご勘弁を。 まぁ、 使えそうだからいいかな~。
FORMの記述と改造内容は下記のとおり。 なお、下記をもとに改修を行ったことによる如何なる損害についても、 ワタシは責任を負わないものといたしますw。
まずはFORMのほうから。 個別記事のテンプレートに下記のような設定を追加しています。

Bad ← <a
href=”<$MTCGIPath$>mt-vote.cgi?__mode=vote&entry_id=<$MTEntryID$>&value=1″> 1 </a>
 <a
href=”<$MTCGIPath$>mt-vote.cgi?__mode=vote&entry_id=<$MTEntryID$>&value=2″> 2 </a>
 <a
href=”<$MTCGIPath$>mt-vote.cgi?__mode=vote&entry_id=<$MTEntryID$>&value=3″> 3 </a>
 <a
href=”<$MTCGIPath$>mt-vote.cgi?__mode=vote&entry_id=<$MTEntryID$>&value=4″> 4 </a>
 <a
href=”<$MTCGIPath$>mt-vote.cgi?__mode=vote&entry_id=<$MTEntryID$>&value=5″> 5 </a>
 → Good    平均点:(<MTVoteAverage lastn=”300″>)
総合点:(<MTVoteTotalValue>) 投票人数:(<MTVoteNumber>)<br />

次に MTVote の改造です。 今回は、 mt-vote.cgi のみの改修となります。 通常は、 $MT_DIR/plugin/ に入れてあるはずです。 内容は下記のとおり。 太字のところが追加になります。

#!/usr/bin/perl -w
use strict;
my($MT_DIR);
BEGIN {
  if ($0 =~ m!(.*[/\\])!) {
    $MT_DIR = $1;
  } else {
    $MT_DIR = ‘./’;
  }
  unshift @INC, $MT_DIR . ‘lib’;
  unshift @INC, $MT_DIR . ‘extlib’;
}

# エラー表示関数
sub error()
{
  print “Content-Type: text/html\n\n”;
  print “<html><head>\n”;
  print ‘<meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8″>’;
  print “</head><body>\n”;
  print “<strong>$_[0]</strong><br />\n”;
  print “</body></html>\n”;
  exit;
}
# 前回のIPアドレスとENTRY_IDをファイルから読み込み
my $mtvote_check=”./mt-votechk.dat”;
open(IN,”$mtvote_check”) || &error(“Open Error $mtvote_check”);
my $rdata = <IN>;
my ($ipaddr, $entry_id) = split(/:/, $rdata);
close(IN);
# 主要なBOTを排除
my $uagent = $ENV{‘HTTP_USER_AGENT’};
if (($uagent =~ /Googlebot/)||($uagent =~ /Slurp/)||($uagent =~ /msnbot/)||($uagent =~ /Baidu/)){
  &error(“access denied”);
}
# FORMからの引数(IPアドレスとENTRY_ID)を取得
my %QUERY;
my $qdata = $ENV{‘QUERY_STRING’};
my @qdatas = split(/&/, $qdata);
foreach my $pair (@qdatas) {
  $qdata =~ tr/+/ /;
  $qdata =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack(‘H2’, $1)/eg;
  my ($qname, $qvalue) = split(/=/, $pair);
  $QUERY{$qname} = $qvalue;
}
#ひとつ前とIPアドレス、ENTRY_IDが同じだった場合
if (($ENV{‘REMOTE_ADDR’} eq $ipaddr) && ($QUERY{“entry_id”} == $entry_id)) {
  &error(“すでに投票いただいております。ブラウザの戻るを押してください”);
}
# 今回のIPアドレスとENTRY_IDをファイルへ保存
open(OUT,”>$mtvote_check”) || &error(“Write Error $mtvote_check”);
print OUT “$ENV{‘REMOTE_ADDR’}:$QUERY{‘entry_id’}”;
close(OUT);

eval {
  require MT::App::Vote;
  my $app = MT::App::Vote->new ( Config => $MT_DIR . ‘mt.cfg’,
     Directory => $MT_DIR )
     or die MT::App::Vote->errstr;
  local $SIG{__WARN__} = sub { $app->trace ($_[0]) };
  $app->run;
};
if ($@) {
  print “Content-Type: text/html\n\n”;
  print “An error occurred: $@”;
}

次にデータ保存用のファイルを作ります。 Windows では Explorer で新規にテキストファイルを作成し、 名前を mt-votechk.dat にします。 このファイルを、 mt-vote.cgi と同じディレクトリに FTP でアップロードし、 ファイル属性を 0666 に変更します。
最後に、 個別の記事を再構築してあげれば完成です。
これに伴いまして、 MTvote を付け始めてからの投票情報をいったんすべてクリアしました。
削除の仕方はデータベースによって異なると思いますが、 MySQL の場合はこんな感じです。
まず、 phpMyAdmin を起動して、 mt_plugindata テーブルを選択します。 検索タブをクリックし実行ボタンを押してテーブルのレコード一覧を表示させます。 plugindata_plugin の列が ‘MTVotingSystem’ となっているものをすべてチェックし、 一括削除します。 これでデータがクリアされました。 記事を再構築すればマッサラな状態から集計が始ります。
まだあまり検証できてないので、気づいた点があればご連絡ください^^。

MTVote の出力順をカスタマイズする

早速たくさん投票していただきありがとうございます。 どうやら一人で何度もポチっとしてくださる方がいらっしゃるようで^^; 押した後の再構築でエラーになることが多いから、何度もやってしまうんだと思うのですけどね・・・・
さてさて、 投票結果をトップページの左側に表示するようにしたのですが、 表示順は平均点となってしまうよう。 これだと一人が “5” を投票したページのほうが、 十人が “4” を投票したページの上にいってしまう。 なんかおかしいなと思い、 総合点順で並べ替えを行うように改造します。 ついでに、 平均や投票者数でも並べ替えられるようにしちゃいましょう。
変えるのは、 votes.pl と結果表示用のタグです。
まず、 votes.pl です。 40行目付近にあるこんな記述を見つけます。

my @topVotes = sort
{ $totalVoteData{$b}->{average} <=> $totalVoteData{$a}->{average} } keys %totalVoteData;

これを、下のように置き換えます。 太字が変更箇所です。

my $sortkey = $args->{key} || “value”;
my @topVotes = sort
{ $totalVoteData{$b}->{$sortkey} <=> $totalVoteData{$a}->{$sortkey} } keys %totalVoteData;

次に投票結果を出力するページには、下記のようなタグを追加しています。

<MTEntries limit=”1″>
<ol>
<MTVotes lastn=”10″ key=”value”>
<li><a href=”<$MTEntryPermalink$>” target=”_blank”
title=”<MTVoteNumber>人評定<平均>MTVoteAverage lastn=”300″>点)”>
<$MTEntryTitle trimj_to=”15″$></a><<MTVoteTotalValue>)
</li>
</MTVotes>
</ol>
</MTEntries>

新たに、 <MTVotes> タグに key が追加しました。 ここでソート順を指定します。 指定しない場合は、 総得点順に多いほうから並べて出力します。 key に指定できるのは、 value (総合点順)、 average (平均点順)、 total (投票数順) です。
今回も「やむやむ」さんのページと、 「VS再構築」さんのページを参考にさせていただきました。 ありがとうございます。

2 / 16123...10...最後 »