Categorygithub.com/stulzq/hexo-statistics
repository
0.6.1
Repository: https://github.com/stulzq/hexo-statistics.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Hexo Statistics

English|中文

Hexo blog traffic statistics service, based on redis. Use hyperloglog to count UV.

Demo: https://xcmaster.com/

Article pv:

Site uv and pv:

Get Start

Step

  • 1.Install redis and run in standalone mode
  • 2.Run hexo-statistics
  • 3.Configure your hexo template

Install Redis

Ubuntu: apt-get install redis-server

Docker

mkdir -p /data/redis

docker run -p 6379:6379 \
  -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
  -v /data/redis/data:/data \
  --name hexo-stat-redis \
  -d redis:5.0 redis-server /etc/redis/redis.conf

Run hexo-statistics

Binary


export hexo_version=v0.5.7

wget https://github.com/stulzq/hexo-statistics/releases/download/$hexo_version/hexo-statistics-$hexo_version-linux-amd64.tar.gz

tar -xzvf hexo-statistics-$hexo_version_linux_amd64.tar.gz

cd hexo-statistics-$hexo_version_linux_amd64

# update your config on conf/config.yml

chmod +x hexo_statistics
./hexo-statistics

Docker

mkdir -p /data/hexo-stat/conf

curl https://raw.githubusercontent.com/stulzq/hexo-statistics/main/conf/config.yml -o /data/hexo-stat/config.yml

# update your config /data/hexo-stat/config.yml

docker run --name hexo-stat \
  -v /data/hexo-stat/conf:/app/conf \
  -v /data/hexo-stat/logs:/app/logs \
  -d stulzq/hexo-statistics:v0.1.0

Configure template

Save file to <blog_root>/source/js/hexo-stat.js

"use strict";
(function() {
    var serverDomain = "<you_statistics_domain>"
    var apiPrefix="" // eg: /api

    function hexoGetData() {
        $.ajax({
            url: serverDomain+ apiPrefix +"/stat/get?u=" +encodeURIComponent(window.location.href),
            type: "GET",
            dataType: "json",
            success: function (resp) {
                hexoProcessResult(resp)
                hexoCounter()
            },
        });
    }

    function hexoCounter(){
        var hm = document.createElement("script");
        hm.src = serverDomain + apiPrefix +"/stat/counter?u=" + encodeURIComponent(window.location.href);
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    }

    function hexoProcessResult(data) {
        // set result
        // site pv -> data.sitePv
        // site uv -> data.siteUv
        // page pv -> data.pagePv

        // example:
        $(".statistics").append(`<span id="hexo_statistics_container_site_pv" style="display: inline;">总访问量 <span id="hexo_statistics_value_site_pv">${data.sitePv}</span> 次</span>`);
        $(".statistics").append(`<span id="hexo_statistics_container_site_uv" style="display: inline;">总访客数 <span id="hexo_statistics_value_site_uv">${data.siteUv}</span> 人</span>`);
        $("div .mt-1").append(
            `<span id="hexo_statistics_container_page_pv" style="display: inline;"><i class="iconfont icon-eye" aria-hidden="true"></i> <span id="hexo_statistics_value_page_pv">${data.pagePv+1}</span> 次</span>`
        );
    }


    hexoGetData();
})();

Inject js file:

file in blog_root/scripts/inject.js

hexo.extend.injector.register('body_end', '<script src="/js/hexo-stat.js"></script>', 'default');

TODO

  • Data Export
  • Data Import