/ #pixela #hugo 

pixelaアクセスカウンターウィジェット自作してこのhugoブログに設置

pixelaアクセスカウンターウィジェットを自作し、このhugoブログの各エントリーに設置してみました。

最高のアクセスカウンタソリューションができたとのことなので、早速設置してみました。

最高のアクセスカウンターソリューションができたよー! - えいのうにっき

すみません釣りタイトルです。最高かどうかはわからないけどでもおもしろいと思うので、ぜひ試してみて欲しいです。 拙作の Pixelaで、比較的かんたんに、サイトのアクセスカウンター(PV数)を GitHub のグラフっぽいやつで設置できるようになったよーというエントリです。 どんなのが設置できるのよ、というと、↓こういうやつが設置できるようになります。 内容的には、 プログラマ …

そのまま貼ってもつまらないと思ったので、ちょっと(だいぶ?)ひねくれた感じで貼ってみました。

すなわち、総PV数を数字で表示するようにしてみました

もはや草関係ない。

できたのはこんな感じです↓

このエントリーのフッター(#)にも貼っております。

実装方針

pixelaの、ここの部分をスクレイピングします。

pixela

非同期アクセスはfetchAPI、スクレイピングはDOMParserを使いました。

怒られそうな使い方ですが、怒られるまで気にしないことにします。

ウィジェット

以下のコード片を作り、layouts/shortcodes配下に保存。今回は pixela_access_counter.html という名前にしました。

(JS部分はこの記事をかなり参考にしました。)

// pixela_access_counter
{{ $number := .Get 0 }}

// ..(snip)...
// ..svgやstyle要素を貼る...
// ..(snip)...

<script>
(() => {
    const url = 'https://pixe.la/v1/users/{{$number}}.html';
    const decoder = new TextDecoder();
    const parser = new DOMParser();
    let string = '';
    fetch(url).then(response => response.body.getReader())
      .then(reader => {
             const readChunk = ({done, value}) => {
               if(done) {
                 const doc = parser.parseFromString(string,'text/html');
                 document.getElementById('cnt').innerHTML = doc.querySelector('h5.text-success').innerText.match(/Total:\s*(\d+)\s*view/)[1];
                 return;
               }
               string += decoder.decode(value);
               reader.read().then(readChunk);
            };
          reader.read().then(readChunk)
    })
})();
</script>


各ポストからの呼び出し

こんな感じ。

{{ % pixela_access_counter "hoshinotsuyoshi/graphs/hblog-20160302-1" %}}


なお、エントリーを作るたびに都度pixela側にグラフを作る必要があります。

例:

$ curl -X POST https://pixe.la/v1/users/hoshinotsuyoshi/graphs \
-H "X-USER-TOKEN:${PIXELA_TOKEN}" \
-d '{"id":"hblog-20190202-1","name":"hblog-20190202-1","unit":"view(s)","type":"int","color":"shibafu","timezone":"Asia/Tokyo","selfSufficient":"increment"}'


✎まとめ

  • 普通に、hugoブログでウィジェット作るやり方について、勉強になった。👽


Author

hoshinotsuyoshi

星野剛志(ほしのつよし) web application engineer. ruby/rails/docker