Splunk Curl App で Qiita のページview数をチェックしてみた


概要

Qiita の記事を投稿して20件を超えてきたのですが、過去の自分の記事で何が読まれているのか view数を確認したいと思った時にqiita のマイページからは一気に確認することが出来ない。。 各記事を表示するとオーナーは View数が確認できるのですが如何せん一つずつ確認するしかないのです!

調べてみると Google Analyticsと連携できるみたいで、日々のアクセス数などは確認できたのですが、過去のデータが反映されない。。(つまり view総数は判断できない)

ということで調べてみました。

すると、Qiita APIなるものがあるらしく curl を使って確認しているパイセンがいることがわかりました。
https://qiita.com/kai_kou/items/3f10ce93f4aa3b57b2d0
https://icck.github.io/posts/0009-qiita-curl/

同じことをしてもつまらないので、Splunkを使ってデータを取得して確認してみたいと思います。(特に意味はないです)

Splunk Curl App のインストール

Splunk 上から Curlを実行できるようにするアプリがあります。今回はこれを使ってQiita APIにアクセスしてみます。

Splunk Curl Command
https://splunkbase.splunk.com/app/4172/

アプリのインストール手順は省略させていただきます。

Qiita API の準備

Qiita API が公開されており、記事を確認したり投稿したりできるみたいです。

ここでは、自分の投稿記事にアクセスできるようにトークンを発行します。

アクセストークンの発行
https://qiita.com/settings/tokens/new

これで、新しいトークンが発行されるので、忘れないようにどこかにコピーして保存してください。
(後からトークンを確認することは出来ないので要注意)

データの取得

早速 Curl SPLを使って、データを取得したいと思います。

| curl  url="https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=100" \
 headers="{'Authorization': 'Bearer <<取得した Tokenを入力>> '}" \
 output=text

(*) output=jsonだとエラーになってしまうので、textで取得しました。

こんな感じでフィールド抽出もイベントブレークも出来ていない状態のため、データを加工します。

| curl  url="https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=100"  headers="{'Authorization': 'Bearer <<取得した Tokenを入力>>'}"  output=text
| makemv delim="rendered_body" reponse 
| mvexpand reponse
| where (reponse like "%title%")
| rex field=reponse "\"page_views_count\":(?<view>[\w\d]+)" 
| rex field=reponse "\"likes_count\":(?<like>\d+)"
| rex field=reponse "\"title\":(?<title>[\W\w]+),\"updated_at"
| rex field=reponse "\"created_at\":\"(?<create>[\d-]+)"
| rex field=reponse "\"id\":\"(?<id>[0-9a-z]+)"
| table view like title create id

あれ?? 肝心な view が null値になってる。。 

どうやら、それぞれのページにいかないと view countが取得できないらしく、id 情報を使ってurl 先を変更しないといけないとのこと。。

例えばこんな感じで url のitems の後ろに idを追加する。

| curl  url="https://qiita.com/api/v2/items/6c0d1f46c531a17f8671" headers="{'Authorization': 'Bearer <<取得した Tokenを入力>>'}"  output=json 
| table id title created_at page_views_count likes_count

(*) なぜか、各ページ毎だと output=jsonで取得できました。

ついに取得

ということで試行錯誤しながら、なんとか一度にページ数を取得することができました。

こちらをコピペして使って頂ければ、同じように確認することができるはず。(トークンだけ変更してください)

| curl  url="https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=100"  headers="{'Authorization': 'Bearer <<取得した Tokenを入力>>'}"  output=text
| makemv delim="rendered_body" reponse 
| mvexpand reponse
| rex field=reponse "\"id\":\"(?<id>[0-9a-z]+)"
| table id
| where isnotnull(id)
| map maxsearches=50 search="| curl  url=\"https://qiita.com/api/v2/items/$id$\" headers=\"{'Authorization': 'Bearer <<取得した Tokenを入力>>'}\"  output=json | table id title created_at page_views_count likes_count"

感想

レポート機能で毎日取得して保存していけば、アクセス推移がみれて面白そうと思いましたが、それはまたの機会に。