0

How can I get a report using multiple date ranges, like the example listed below, using nodeJS client library?

It was taken from https://developers.google.com/analytics/devguides/reporting/core/v4/basics#multiple_date_ranges

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":
  [
    {
      "viewId": "XXXX",
      "dateRanges": [
        {"startDate": "2014-11-01", "endDate": "2014-11-30"},
        {"startDate": "2014-10-01", "endDate": "2014-10-30"}
      ],
      "metrics": [
        {"expression": "ga:pageviews"},
        {"expression": "ga:sessions"}
      ],
      "dimensions": [{"name": "ga:pageTitle"}]
    }
  ]
}

I tried this:

 "dateRanges": [
     { "startDate": "2018-03-17", "endDate": "2018-03-24" },
     { "startDate": "14daysAgo", "endDate": "7daysAgo" }
 ]

And got the following error:

Missing required parameters: start-date, end-date

Thanks very much for the help!

UPDATE

I figured I was using the wrong function analytics.data.ga.get instead of analyticsreporting.reports.batchGet

But when I try this:

analyticsreporting.reports.batchGet({
    "reportRequests": [
        {
            "viewId": req.params.profileId,
            "dateRanges": [
                {
                    "startDate": "2018-03-17",
                    "endDate": "2018-03-24"
                },
                {
                    "startDate": "14daysAgo",
                    "endDate": "7daysAgo"
                }
            ],
            "metrics": [
                {
                    "expression": "ga:users"
                }
            ]
        }
    ]
}, function (err, results) {
    if (err){
        console.log('ERROR: ');
        console.log(err.errors);
        res.status(500).send(err.errors);
    }

    console.log(JSON.stringify(results));
    res.send({results: results});
});  

I get

message: 'Invalid JSON payload received. Unknown name "reportRequests[dateRanges][endDate]": Cannot bind query parameter. Field \'reportRequests[dateRanges][endDate]\' could not be found in request message.\nInvalid JSON payload received. Unknown name "reportRequests[dateRanges][startDate]": Cannot bind query parameter. Field \'reportRequests[dateRanges][startDate]\' could not be found in request message.\nInvalid JSON payload received. Unknown name "reportRequests[viewId]": Cannot bind query parameter. Field \'reportRequests[viewId]\' could not be found in request message.\nInvalid JSON payload received. Unknown name "reportRequests[metrics][expression]": Cannot bind query parameter. Field \'reportRequests[metrics][expression]\' could not be found in request message.',

What am I missing here?

Thanks!

dikesh
  • 2,977
  • 2
  • 16
  • 26
Marrone
  • 487
  • 2
  • 7
  • 18
  • Have a look at this example... You will get your answer https://github.com/google/google-api-nodejs-client/blob/master/samples/analyticsReporting/batchGet.js – dikesh Mar 28 '18 at 05:54
  • @dikesh thanks for the help! Got it working :-) – Marrone Mar 29 '18 at 07:14

1 Answers1

0

For future reference

The reportsRequest object here needs to be inside of a resource object, as it's part of the post body as stated by JustinBeckwith at https://github.com/google/google-api-nodejs-client/issues/1085

Marrone
  • 487
  • 2
  • 7
  • 18