質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • JavaScript

    15294questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Node.js

    1731questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • JSON

    1062questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

node.jsでgoogleアナリティクスのPV数を取得する方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 405

haru_hime

score 145

前提・実現したいこと

現在node.jsを使用してGoogleアナリティクスよりページ毎のPV数とページパスをjsonファイルにて出力しようと試みています。

将来的にはそのデータを使用して、自動で更新するランキング形式の記事一覧をホームページに設置したいなと考えています。

こちらのサイトを参考にファイル書き出しまでは成功しました。

アクセス数ではなく、PV数を取得したいのでGoogle検索にて調べたところPage Tracking - Dimensions & Metrics Explorer|Google アナリティクス>レポート>Reporting API v4にてディメンションや指標を使って目的のデータを取得するという事まではわかりました。

ですが、このディメンションや指標をどの様に使用すれば良いのかが分からないので、使用方法を知りたいです。

該当のソースコード

var google = require('googleapis');
var analytics = google.analyticsreporting('v4');

//jsonファイル書き出しの為にfsモジュール呼出
var fs = require('fs');

// サービスアカウントキーのJSONファイルを指定
var credential = require('./***************.json');

// データを取得したいGoogle AnalyticsのビューIDを指定
var viewId = '**********';

// 対象データの期間
var startDate = "2017-10-27";
var endDate = "2017-11-02";

var jwtClient = new google.auth.JWT(credential.client_email, null, credential.private_key, ["https://www.googleapis.com/auth/analytics.readonly"], null);

jwtClient.authorize((error, tokens) => {
    if (error){
        fs.writeFile('hoge.json', JSON.stringify(error, null, " "));
        console.log("flag1:エラーが発生しました")
        return;
    }
    analytics.reports.batchGet({
        resource: {
            "reportRequests": [
                {
                    "dateRanges": [
                        {
                            "startDate": startDate,
                            "endDate": endDate
                        }
                    ],
                    "viewId": viewId,
                    "dimensions": [
                        {
                            "name": "ga:pagePath"
                        }
                    ]
                }
            ]
        },
        auth: jwtClient
    }, (error, response) => {
        if (error){
            fs.writeFile('hoge.json', JSON.stringify(error, null, " "));
            console.log("flag2:エラーが発生しました")
        }
        fs.writeFile('hoge.json', JSON.stringify(response, null, " "));
        console.log("ファイルが正常に書き出しされました")
    })
});

試したことその1

var pv = 0;//1行目に追加

"name": "ga:pagePath",
"pv": "ga:pageviews"//上記コード「"name": "ga:pagePath"」の下に追加


<エラー内容>
jsonファイルに書き出された内容
"message": "Invalid JSON payload received. Unknown name \"pv\" at 'report_requests[0].dimensions[0]': Cannot find field.",
"domain": "global",
"reason": "badRequest"

コンソールに表示された内容
C:\**\**\**>node get-ga.js
flag2:エラーが発生しました
ファイルが正常に書き出しされました
(node:1612) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
(node:1612) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.

試したことその2

「pv」というのが何なのか分からないよって言われてるのは何となくわかったのですが、「"name": "ga:pagePath"」の「"name"」は何故使えるの?と疑問が湧きました。
それが解決出来れば、問題が解決できるかもしれないと思い下記の検索ワードの組み合わせにて検索しました。

node.js,  google analytics,  googleapi,  name,  ga:pageviews,  json,  形式,  フォーマット

結果、解決出来ず検索ワードが思いつかなくなってしまいました。


つきましては、コードに対してのご指摘や検索ワード候補、参考になりそうなサイト等何かヒントを頂ければと思います。

また、前回質問の仕方についてアドバイスを頂き改善してみたのですが、まだまだ至らないところもあるかと思います。
質問の仕方についてもお気づきの点が御座いましたらアドバイスを頂ければ幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

         "name": "ga:pagePath"//この行の下に下記のコードを追加
                        }
                    ],
                    "metrics": [
                        {
                            "expression":"ga:pageviews"
                        }
                    ]

以下のページを参考にこの修正で取得出来ました。
サンプル|Google アナリティクス>レポート>Reporting API v4

ですが、サンプルの一致する部分を引用してみただけに過ぎず「"expression":"ga:pageviews"」の「"expression"」部分がなぜそれになっているのかが分かりません。
どこかに一覧のようなものがあるのかと思いますので、ご存知の方がいればご教授願います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/03 21:47

    このページに一覧が乗っていました。
    https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet?hl=ja#ReportRequest.FIELDS.metrics

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    15294questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Node.js

    1731questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • JSON

    1062questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。