2018年12月にブログを移行した際にこの機能は削除しました。
はじめに
解析の勉強のため、このブログの統計情報を集めようと思い立ちました。
手始めに、記事のアクセス時刻や利用しているブラウザなどの情報を取得します。 本ブログは、Python + Flaskで構築しているため、Flask requestを利用します。
この記事では、記事のページを見るユーザーの情報をFlask requestで集め、DynamoDBに保存するところまで設計します。
普段使っている、Google Analyticsが高機能すぎますね。 調べると、Core Reporting APIで色々できるみたいです。 追々差別化できるようにしないと。。。
実装編はこちら
リクエスト情報から訪問者の情報を集めてみる[Python Flask + DynamoDB]-2.実装編
概要
Flaskは、request.environ
にアクセス元の情報がまとめられています。
そこから情報を取り出し、DynamoDBに保存します。
Flaskについては、以前の記事[Python] Flask入門とサーバレスアーキテクチャをご覧下さい。
環境
$ python --version
Python 3.6.5
$ pip show Flask
Name: Flask
Version: 1.0.2
request.environの中身
ちょうど良いドキュメントが見つからないので、直接見てしまいましょう!
print(request.environ)
これで表示したものを、見やすくjsonに加工したものが以下になります。
{
"wsgi.version": (1,0),
"wsgi.url_scheme": "http",
"wsgi.input": <_io.BufferedReader name=5>,
"wsgi.errors": <_io.TextIOWrapper name="<stderr>" mode="w" encoding="UTF-8">,
"wsgi.multithread": True,
"wsgi.multiprocess": False,
"wsgi.run_once": False,
"werkzeug.server.shutdown": <function WSGIRequestHandler.make_environ.<locals>.shutdown_server at 0x10f00c950>,
"SERVER_SOFTWARE": "Werkzeug/0.14.1",
"REQUEST_METHOD": "GET",
"SCRIPT_NAME": "",
"PATH_INFO": "/article/8",
"QUERY_STRING": "",
"REMOTE_ADDR": "127.0.0.1",
"REMOTE_PORT": 62057,
"SERVER_NAME": "127.0.0.1",
"SERVER_PORT": "5000",
"SERVER_PROTOCOL": "HTTP/1.1",
"HTTP_HOST": "127.0.0.1: 5000",
"HTTP_CONNECTION": "keep-alive",
"HTTP_PRAGMA": "no-cache",
"HTTP_CACHE_CONTROL": "no-cache",
"HTTP_UPGRADE_INSECURE_REQUESTS": "1",
"HTTP_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"HTTP_ACCEPT": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"HTTP_REFERER": "http://127.0.0.1:5000/contents/Google%20Adsence",
"HTTP_ACCEPT_ENCODING": "gzip, deflate, br",
"HTTP_ACCEPT_LANGUAGE": "ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7",
"HTTP_COOKIE": "gsScrollPos-1901=; gsScrollPos-2345=0; gsScrollPos-1735=0; _ga=GA1.1.1286324805.1530497168; session=eyJ1c2VybmFtZSI6ImFkbWluIn0.Dh3nXg.HvlJWyVbh3Zsa2-6fEi_lMVaDJo; _gid=GA1.1.316787490.1532584271; _gat_gtag_UA_106883433_1=1",
"werkzeug.request": <Request "http://127.0.0.1:5000/article/8" [GET]>
}
※ local環境でChromeからテストした情報です。
httpのヘッダーの情報が入っていることがわかります。 Google Analyticsもきっと、ヘッダーの情報を収集しているんでしょうね。
貯めておくと面白そうな情報が色々ありました。
key | 説明 | value |
---|---|---|
REMOTE_ADDR | IPアドレス | 127.0.0.1 |
HTTP_USER_AGENT | ブラウザやOSの情報 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 |
HTTP_CONNECTION | 継続したコネクションかどうか | keep-alive |
PATH_INFO | URLのパス | /article/8 |
取得する項目とDynamoDBのテーブル設計
以下の項目を取得します。 DynamoDBのテーブル設計も兼ねます。
Table: page_view_logs
field name | primary key | 説明 |
---|---|---|
article_id | hash key | 記事のID |
view_at | range key | 閲覧時刻'%Y-%m-%d %H:%M:%s'日本時間 |
remote_addr | IPアドレス | |
browser | 利用したブラウザ | |
user_os | osの種類 | |
is_keep_alive | 継続したコネクションか |
記事毎に集計できるように、記事IDと閲覧時刻をプライマリーキーにしました。この2項目は、URLとdatetimeから得ます。
6項目を取得していきます。
実装編はこちら
リクエスト情報から訪問者の情報を集めてみる[Python Flask + DynamoDB]-2.実装編
本ブログの構成について