Frederic Hemberger 2014/06/25
Piwik を使用してアクセス解析を行っている場合、時としてウェブサイトのビジター以外をトラッキングしたいこともあります。
例えば、最新の Web サービスの多くは RESTful な API を提供しています。それらのリクエストを追跡するために Piwik を使用してみてはいかがでしょうか。
これはあなたが提供している Web サービスがどのようにユーザーに利用されているかを、より正確に分析することができます。
例えば、あなたの API は通常の Web サイトと比較してどの程度使用されている?もっとも利用されているサービスは?そして、どのツールが一番 API を利用しているのでしょうか。
Node.js をアプリケーションプラットフォームに使用している場合、Piwik-tracker が使用できます。 これは Piwikのトラッキング用 HTTP APIの軽量なラッパープログラムです。あなたが求めるトラッキングに役立つでしょう。
まずプロジェクトの依存関係として Piwik-tracker
のインストールを開始します。
1 | npm install piwik-tracker --save |
次に、Piwik の URL と、追跡するプロジェクトのサイト ID で新しいトラッキングインスタンスを作成します。Piwik で解析するには、完全修飾 URL を必要とします。実際のリクエスト URL の前に追加してください。
01 | var PiwikTracker = require( 'piwik-tracker' ); |
03 | // Initialize with your site ID and Piwik URL |
04 | var piwik = new PiwikTracker(1, 'http://mywebsite.com/piwik.php' ); |
06 | // Piwik works with absolute URLs, so you have to provide protocol and hostname |
07 | var baseUrl = 'http://example.com' ; |
09 | // Track a request URL: |
10 | piwik.track(baseUrl + req.url); |
もちろん、単なるURLの追跡以上のことが可能です。: Piwik トラッキング HTTP API リファレンス で提供されているすべてのパラメータがサポートされており、カスタム変数も含まれます。なお Piwik の API が呼び出すのは、JSON 文字列として参照されています。読みやすくするには手動でエンコーディングする代わりに JSON.stringify({})
を使用してください。
02 | // The full request URL |
03 | url: baseUrl + req.url, |
05 | // This will be shown as title in your Piwik backend |
06 | action_name: 'API call' , |
08 | // User agent and language settings of the client |
09 | ua: req.header( 'User-Agent' ), |
10 | lang: req.header( 'Accept-Language' ), |
12 | // Custom request variables |
13 | cvar: JSON.stringify({ |
14 | '1' : [ 'API version' , 'v1' ], |
15 | '2' : [ 'HTTP method' , req.method] |
既に分かっているかもしれませんが、HTTP ヘッダフィールドやステータスコード、リクエストメソッド(GET, POST, PUT, etc.)のように、Node.js のリクエストオブジェクト
を任意のフィールドに沿って引き渡すができます。これでニーズのほとんどをカバーしている筈です。
今のところ、全てのリクエストは、Node.js アプリケーションの IP アドレス/ホスト名で追跡されます。もし API を使用しているユーザーの IP アドレスを解析データに表示したい場合、 シークレットな Piwik のトークンが必要になります。そして Piwik のデフォルト設定を上書きしてください:
01 | function getRemoteAddr(req) { |
02 | if (req.ip) return req.ip; |
03 | if (req._remoteAddress) return req._remoteAddress; |
04 | var sock = req.socket; |
05 | if (sock.socket) return sock.socket.remoteAddress; |
06 | return sock.remoteAddress; |
11 | token_auth: '<YOUR SECRET API TOKEN>' , |
12 | cip: getRemoteAddr(req) |
これで追跡に必要なすべての値を収集できます。基本的な作業はこれで完了です。もし Express やバックエンドのために restify を使用している場合、さらに踏み込んだトラッキングリクエストも容易となり、カスタムミドルウェアにすべてをまとめることもできるでしょう。
まず新しいミドルウェアの Basic コードからスタートして lib/express-piwik-tracker.js
という名前で保存します:
01 | // ./lib/express-piwik-tracker.js |
02 | var PiwikTracker = require( 'piwik-tracker' ); |
04 | function getRemoteAddr(req) { |
05 | if (req.ip) return req.ip; |
06 | if (req._remoteAddress) return req._remoteAddress; |
07 | var sock = req.socket; |
08 | if (sock.socket) return sock.socket.remoteAddress; |
09 | return sock.remoteAddress; |
12 | exports = module.exports = function analytics(options) { |
13 | var piwik = new PiwikTracker(options.siteId, options.piwikUrl); |
15 | return function track(req, res, next) { |
17 | url: options.baseUrl + req.url, |
18 | action_name: 'API call' , |
19 | ua: req.header( 'User-Agent' ), |
20 | lang: req.header( 'Accept-Language' ), |
21 | cvar: JSON.stringify({ |
22 | '1' : [ 'API version' , 'v1' ], |
23 | '2' : [ 'HTTP method' , req.method] |
25 | token_auth: options.piwikToken, |
26 | cip: getRemoteAddr(req) |
アプリケーションで使用するために、app.js
ファイルで初期化します:
02 | var express = require( 'express' ), |
03 | piwikTracker = require( './lib/express-piwik-tracker.js' ), |
06 | // This tracks ALL requests to your Express application |
09 | piwikUrl : 'http://mywebsite.com/piwik.php' , |
10 | baseUrl : 'http://example.com' , |
11 | piwikToken: '<YOUR SECRET API TOKEN>' |
これで、すべてのAPI の URL に対する各リクエストを追跡できます。もし、特定 PATH にトラッキングを制限したい場合は、そのPATHをルートの代わりに設定することもできます。
01 | var tracker = piwikTracker({ |
03 | piwikUrl : 'http://mywebsite.com/piwik.php' , |
04 | baseUrl : 'http://example.com' , |
05 | piwikToken: '<YOUR SECRET API TOKEN>' |
08 | router.get( '/only/track/me' , tracker, function (req, res) { |
09 | // Your code that handles the route and responds to the request |
通常ウェブサイトのユーザー解析と共に、API ユーザーをトラッキングするための設定ガイドは以上です。
Frederic Hemberger
Frederic は、ドイツのケルンで、Web フロントエンドと JavaScript 開発を中心としたフリーランサーとして働いています。Twitter のユーザー名は
@fhemberger 。フレデリックは Piwik のヘビーユーザーで、私たちのブログ上にゲスト寄稿しています。