web-dev-qa-db-ja.com

GoogleAnalyticsからリアルタイムの訪問者をスクレイピング

私はたくさんのサイトを持っており、1つのページにそれぞれのサイトのリアルタイム訪問者の数を表示するダッシュボードを作成したいと考えています。 (他の誰かがこれを望んでいますか?)現在、この情報を表示する唯一の方法は、各サイトの新しいタブを開くことです。

GoogleにはリアルタイムAPIがないので、このデータを取得することは可能かどうか疑問に思っています。 Eduardo Ceretoは、Googleがリアルタイム/バインドネットワークリクエストを介してリアルタイムデータを転送することを発見しました。もっと精通している人は、私がどのように始めるべきかについての考えを持っていますか?これが私が考えていることです:

  1. プログラムで認証する方法を理解する
  2. すべてのリアルタイム/バインドリクエストを調べて、それらがどのように変化するかを確認します。各リクエストには一意のキーがありますか?それはどこから来たのですか?以下は私のリクエストの内訳です。

    https://www.google.com/analytics/realtime/bind?VER=8

    &key =[これは何ですか?それはどこから来たのですか? 21文字の小文字の英数字、各リクエストで同じまま]

    &ds =[これは何ですか?それはどこから来たのですか? 21文字の小文字の英数字、各リクエストで同じまま]

    &pageId = rt-standard%2Frt-概要

    &q = t%3A0%7C%3A1%3A0%3A%2Ct%3A11%7C%3A1%3A5%3A%2Cot%3A0%3A0%3A4%2Cot%3A0%3A0%3A3%2Ct%3A7%7C%3A1% 3A10%3A6%3D%3DREFERRAL%3B%2Ct%3A10%7C%3A1%3A10%3A%2Ct%3A18%7C%3A1%3A10%3A%2Ct%3A4%7C5%7C2%7C%3A1%3A10%3A2! %3Dzz%3B%2C&f

    Q変数URIはこれにデコードします(何ですか?):t:0 |:1:0:、t:11 |:1:5:、ot:0:0:4、ot:0:0:3、t :7 |:1:10:6 == REFERRAL;、t:10 |:1:10:、t:18 |:1:10:、t:4 | 5 | 2 |:1:10:2!= zz;、&f

    &RID = rpc

    &SID =[これは何ですか?それはどこから来たのですか? 16文字の大文字の英数字、各リクエストで同じまま]

    &CI = 0

    &AID =[これは何ですか?それはどこから来たのですか?整数、1から始まり、奇妙なことに150に増加し、次に298]

    &TYPE = xmlhttp

    &zx =[これは何ですか?それはどこから来たのですか? 12文字の小文字の英数字、各リクエストを変更します]

    &t = 1

  3. すべてのリアルタイム/バインド応答を調べて、それらがどのように変化するかを確認します。データはどのように入力されますか?変更されたJSONのように見えます。データを取得するために何回接続する必要がありますか?そこのサイト番号のアクティブな訪問者はどこにありますか?サンプルデータのダンプは次のとおりです。

    19 [[151、["noop"]]] 388 [[152、["rt"、[{"ot:0:0:4":{"timeUnit": "MINUTES"、 "overTimeData":[{"値」:[49,53,52,40,42,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65、 65,55,51,53,73,71,81]、 "name": "Total"}]}、 "ot:0:0:3":{"timeUnit": "SECONDS"、 "overTimeData":[ {"値":[0,1,1,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0、 2,1,1,2,1,2,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0、 0,0,0,0,0,0,0,1,1,0,3,2,0]、 "name": "Total"}]}}]]]] 388 [[153、["rt "、[{" ot:0:0:4 ":{" timeUnit ":" MINUTES "、" overTimeData ":[{" values ":[52,53,52,40,42,55,49,41、 51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81]、 "名前": " Total "}]}、" ot:0:0:3 ":{" timeUnit ":" SECONDS "、" overTimeData ":[{" values ":[2,1,1,1,1,1,0、 1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0,5,1 0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1 0,3,2]、 "name": "Total"}]}}]]]] 388 [[154、["rt"、[{"ot:0:0:4":{"timeUnit": " MINUTES "、" overTimeData ":[{" values ":[53,53,52,40,42,55,49,41,51,52,47,42,62,82,76,71,81,66、 81,86,71,66,65,65,55,51,53,73,71,81]、 "name": "Total"}]}、 "ot:0:0 :3 ":{" timeUnit ":" SECONDS "、" overTimeData ":[{" values ":[0,3,1,1,1,1,1,0,1,0,1,1,1、 0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0,5,1,0,2,1,1,1 2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1,0,3]、 "名前": "合計 "}]}}]]]]]

上記の項目のいずれかであなたが助けることができるかどうか私に知らせてください!

enter image description here

26
Kirk Ouimet

同じことを実現するために、Googleは新しいReal TimeAPIをリリースしました。このAPIを使用すると、リアルタイムのオンライン訪問者だけでなく、次のディメンションと指標を使用して複数のGoogleアナリティクスを簡単に取得できます。 https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/

これは、Google AnalyticsAPIと非常によく似ています。これに関する開発を開始するには、 https://developers.google.com/analytics/devguides/reporting/realtime/v3/devguide

10

グーグルをループに入れることはかなり冗長に思えます。ダッシュボードサーバーからオンデマンドで配信される共通の要素を使用し、特定のサイトで監視されるすべてのページに絶対URLでこのアイテムを含めることをお勧めします。アイテムを出力するスクリプトは、要求しているブラウザのIPを読み取ることができ、これらはすべてデータベースに記録され、一意性をフィルタリングしてリアルタイムの人数を与えることができます。

<?php
$user_ip = $_SERVER["REMOTE_ADDR"];
/// Some MySQL to insert $user_ip to the database table for website XXX  goes here


$file = 'tracking_image.gif';
$type = 'image/gif';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
?>

Ammendum:データベースは、格納するデータのすべての行にタイムスタンプを追加することもできます。これを使用して、結果をさらにフィルタリングし、過去1時間または1分間の訪問者数を提供できます。

クライアント側のJavascriptとAJAX微調整またはオーバーキルonblurおよびonfocus javascriptコマンドを使用して、ページが表示されたら、Ajax経由でデータをダッシュ​​ボードサーバーに戻します。 http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/

訪問者がページを閉じると、これはbodyタグのjavascriptonunload関数によっても検出でき、Ajaxを使用して、ブラウザーの前にもう一度サーバーにデータを送り返すことができます。最後にページを閉じます。

グーグルアナリティクスがこのページを行うように、訪問者に関するいくつかの情報を収集したいと思うかもしれません https://panopticlick.eff.org/ 調査して適応させることができる多くのJavaScriptがあります。

6
Skizz

GoogleでChromeネットワークパネルにデータが表示されます。

リクエストエンドポイントはhttps://www.google.com/analytics/realtime/bind

接続は2.5分間開いたままであるように見えますが、この間、データを取得し続けます。

約2.5分後、接続が閉じられ、新しい接続が開かれます。

ネットワークパネルでは、終了した接続のデータのみを表示できます。したがって、5分ほど開いたままにしておくと、データの表示を開始できます。

それがあなたに出発点を与えることができることを願っています。

6
Eduardo

個人的な使用のためにリアルタイムデータが必要/必要だったので、彼らのシステムを少しリバースエンジニアリングしました。

/bindにバインドする代わりに、/getDataからデータを取得します(しゃれは意図されていません)。

/getDataでの最小リクエストは、明らかに次のとおりです。https://www.google.com/analytics/realtime/realtime/getData?pageId&key={{propertyID}}&q=t:0|:1

可能なクエリパラメータと構文の簡単な説明を次に示します。これらはすべて推測であり、すべてを知っているわけではないことを覚えておいてください。

クエリ構文:pageId&key=propertyID&q=dataType:dimensions|:page|:limit:filters

値:

pageID: Required but seems to only be used for internal analytics.

propertyID: a{{accountID}}w{{webPropertyID}}p{{profileID}}, as specified at the Documentation link below. You can also find this in the URL of all analytics pages in the UI.


dataType:
    t: Current data
    ot: Overtime/Past
    c: Unknown, returns only a "count" value


dimensions (| separated or alone), most values are only applicable for t:
    1:  Country
    2:  City
    3:  Location code?
    4:  Latitude
    5:  Longitude
    6:  Traffic source type (Social, Referral, etc.)
    7:  Source
    8:  ?? Returns (not set)
    9:  Another location code? longer.
    10: Page URL
    11: Visitor Type (new/returning)
    12: ?? Returns (not set)
    13: ?? Returns (not set)
    14: Medium
    15: ?? Returns "1"

page:
    At first this seems to work for pagination but after further analysis it looks like it's also used to specify which of the 6 pages (Overview, Locations, Traffic Sources, Content, Events and Conversions) to return data for.

    For some reason 0 returns an impossibly high metrictotal

limit: Result limit per page, maximum of 50

filters:
    Syntax is as specified at the Documentation 2 link below except the OR is specified using | instead of a comma.6==CUSTOM;1==United%20States


複数のクエリをカンマで区切って1つのリクエストに結合することもできます(例:q=t:1|2|:1|:10,t:6|:1|:10)。

上記の「ドキュメント」に従って、米国にあるトラフィックソースタイプがCUSTOMのアクティブな訪問者トップ10のページURLと都市を要求するクエリを作成する場合は、次のURLを使用します。https://www.google.com/analytics/realtime/realtime/getData?key={{propertyID}}&pageId&q=t:10|2|:1|:10:6==CUSTOM;1==United%20States


ドキュメント

ドキュメント2


私の答えが読みやすく、(少し遅れていますが)あなたの質問に十分に答えて、将来他の人を助けることを願っています。

5
A.M.K