Studio Happyvalley

週間人気
ランキングを
実装

週間や月間など好みの期間で
人気ランキングツールを自作

image: 週間人気ランキングを実装
Start Weekly Ranking

アクセスログを利用して人気ランキング

 | 2022/10/02

発端

せっかくアクセスログを貯めているので有効活用
  • 最初にアクセスログありき

    アクセスログといえばGoogleですが、IPを表示できないなど、セキュリティ用には役にたちません。
    そのためセキュリティ対策のために好きなデータを取得できるアクセスログを半年ほど前に自作しました。
    ログを記録して半年ほどたちますがやはりこのログデータは非常に興味を引きます。
    エクセルを利用するといろいろ面白いデータを解析できます。が、この辺りはまた、別の機会にご紹介します。
    アクセスログはどれだけ大量にあっても困らない宝物です。
    あればあるほど生きてきます。
    その有効活用としてランキングの導入を構想しました。

  • ランキングの仕様を考察

    さて、せっかくの貴重なデータです。これの利用方法として真っ先に思いつくのが人気ランキングです。
    これまでもログデータをエクセルで解析し、セキュリティやページの人気度などを研究・改善してきました。
    が、さすがに大量にあると面倒に・・・。なんとか楽できないか!
    そんな訳で、さっそく開発に取り組むことに。
    このサイトはwordpressです。wordpressの場合ランキングはプラグインで実装できますが、ほとんどは投稿ページにアクセス数を記録するシステムです。
    そのためUAでロボットを弾いたり、固定ページと投稿ページをまとめたり、リクエストをフィルタリングするなどの複雑な制御には向きません。
    そんな訳でランキングシステムを自作しました。

手法

考え方はアクセス解析と同じです。
  • アクセスログ解析は以前Perlで実装済み

    アクセス解析自体は大昔、Perlで自作していましたので、とくに悩むところはありません。
    ひとつ悩みどころといえば、perlの場合だと連想配列に格納するだけで自動的にカウントされて、それだけですでにアクセス解析が9割完成なんですが、PHPの場合だとどうするのか不明だったことくらいです。

  • アクセスログ解析、PHPではどうするか

    PHPの場合はいろいろ方法はあると思いますが、このツールで取った方法は、2段階に分けました。
    まずアクセスログの『UA』『ページタイトル』『リクエストURL』などの項目別に配列に格納し、array_count_valuesでキー別にカウントしたものを連想配列にします。ここまでがちょうどPerlの連想配列で自動カウント部分にあたります。次にarsortを使って好きな順番で並べ替えます。これでアクセス数順に並べ替えられます。

展望

拡張は自由自在
  • 自作なので週間でも月間でも自在に、滞在時間ランキングも面白いかも。

    例えば、ログの取得期間を7にすれば週間だし、30にすれば一月、何といっても元がアクセスログなので最新のデータを解析できます。ロボットやハッキングのUAを排除したりなども簡単にフィルタリングできます。
    これらのパラメータを変更できるようにJavascriptで組み込めば、WEBサイト上で自在に期間や滞在時間別のランキング、特定カテゴリーだけのランキングなどを設定することも可能です。

『人気がある』のアルゴリズムを考察
  • アクセス数イクオール人気か?

    通常は単純にアクセス数を人気と判定しますが、一秒アクセスして離脱するユーザーと5分間ページを読むユーザーが同じ1というのもおかしなものです。また、週間を通して重複ユーザーをカウント1と判定するのか、ユーザー数を重視すべきなのかなど、アルゴリズムの研究も重要です。
    ユーザーの滞在時間を取得するにはユーザーが離脱した時点でログに記録するようにすれば取得できますのでページの滞在時間別にランキングも可能です。
    現状は、滞在時間に関係なく1カウント、また同一IPもどれだけアクセス数があっても同じページであれば、1カウントで記録しています。
    今後はいろいろなランキングを試してみようと思っています。

『週間人気ランキングを実装』関連のお薦め

このページで紹介しているプログラムやビジュアルなどご依頼いただければ実装を賜ります。
お問い合わせはこちら

Permanent Exhibition