ようこそゲストさん

Kerosoft : Modus Operandi

2008/07/31(Thu) adiaryのカウンタについて

はてブ情報 はてブに登録 はてブ数 2008/07/31 1:00 Languages::Perl
このModus Operandiがお世話になっているadiaryというBlog Systemはカウンタ機能を標準で持っていないので、3か月前くらいに自分で作ったのだが、たまたま友人から「ページビューが1増えたり2増えたりしてるぞ?」と報告をもらって色々調べてみた。


仕様としては、自分でPerl Moduleを一個作って/lib/Satsuki/に入れ、diary.user.skel/_sidebar.htmlのSystem Infoのとこにloadpmと値参照を加えるだけ。

とまぁ、そこまではいいのだが、やっぱりページビューを測るとなんかおかしい。
最初は自分の書き方が悪いのかと思ったのだが、どう考えてもforやwhileなどの繰り替えしを通らない部分に、カウント値の1upのコードを書いているので、おかしい……と悩んだ挙句、_sidebar.htmlが複数回呼ばれることがあるという結論に至った。

adiaryの中身をあまり詳しく見たわけではないのでよく分からないけど、1回しか呼ばれない場合と、2回呼ばれる場合がある模様。

そもそもカウンタはimgタグで対応してくれというのが作者の思惑なのかはわからないけど、とりあえずテキストカウンタにこだわりたいので現状のスタイルを保持して正しくカウントするには……と考え、PageViewの方はtime関数の戻り値が1以上ずれない限りカウントアップしないようにすることで対応した。
(ほんとは$$とかで対応しようかと思ったけど、speedy_backendが立ち上がりっぱなしなので、この手が使えない)

というわけで、同一時刻に複数からアクセスしても逆に1増えない、という状況になってしまったが、致し方ない。
細かい統計はGoogle Analyticsで見るか……。

原因が分かった 9:19

開発者のnabe様から的確なコメントをいただき、一発で原因が分かりました。ありがとうございます。
どうやらブラウザが勝手に読みに行くfavicon.icoや存在しないRSSファイルを憶測で読みに行く時の404 Not Found画面でカウントアップしている感じでした。
<@ifexec(v.load_days, begin)>
<$c=loadpm("SimpleCounter")>
<@c.counter>
<$end>
404の"記事がありません"のメッセージ文を参考に、上記のように書き換えたことで、意図する動作になったかな。
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクはてブしていただけると助かります…。 コメントも歓迎です。

1: nabe 2008年07月31日(Thu) 午前2時40分

_sidebar.html は複数回呼ばないはずです。
推測になってしまいますが、mod_rewriteをお使いのようですので、リンクまたは画像ファイルまたはテーマファイルかなにか分かりませんが、何か1つのファイルが読み出せなかったときに、「例えば画像を読み込むつもりで、エラー画面(サイドバー付)を表示している」という可能性が考えられます。Apacheのログと付き合わせてみるとよいかもしれません。

2: Keroberos 2008年07月31日(Thu) 午前8時57分

adiary利用者のページからでしょうか、わざわざコメントありがとうございます。
推測の内容はピタリ当たってまして、どうやらブラウザが勝手にfavicon.icoを読みにいく時などに404が返ってまして、その時にカウントアップしてしまっていたようでした。
404ページにカウンタを表示しないように条件文を書きくわえましたが、やはりmod_rewriteというのは黒魔法ですね…(^^;

# スクリプトを追っかけるばっかりで、ログを見るという基本的なデバッグ手法を忘れていた自分がアホだ……。

重ね重ねお礼申し上げます。


名前:  非公開コメント   

  • TB-URL  http://mo.kerosoft.com/051/tb/