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を使って好きな順番で並べ替えます。これでアクセス数順に並べ替えられます。

展望

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

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

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

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