डेटा को दूसरी जगह भेजने से जुड़ी गाइड

इस गाइड में Core Reporting API v3 को Analytics Reporting API v4 पर माइग्रेट करने के दिशा-निर्देश दिए गए हैं.

शुरुआती जानकारी

Analytics Reporting API v4 में दी गई नई सुविधाओं का फ़ायदा पाने के लिए, एपीआई का इस्तेमाल करने के लिए अपना कोड माइग्रेट करें. इस गाइड में, Core Reporting API v3 में मौजूद अनुरोध और Analytics Reporting API v4 पर इसी तरह के अनुरोध शामिल हैं, ताकि आप माइग्रेशन को आसान बना सकें.

Python माइग्रेशन

अगर आप Python डेवलपर हैं, तो GitHub पर GAV4 हेल्पर लाइब्रेरी का इस्तेमाल करके, Google Analytics Core Reporting API v3 के अनुरोधों को Analytics Reporting API v4 के अनुरोधों में बदलें

एंडपॉइंट

Core Reporting API v3 और Analytics Reporting API v4 में अलग-अलग एंडपॉइंट होते हैं. साथ ही, इनमें एचटीटीपी के तरीके भी अलग-अलग होते हैं:

v3 एंडपॉइंट

GET https://www.googleapis.com/analytics/v3/data/ga

v4 एंडपॉइंट

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet

यहां दिए गए उदाहरण, वर्शन 3 और v4 में ऐसे ही अनुरोध की तुलना करते हैं:

v3

v3 रेफ़रंस दस्तावेज़

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
    &start-date=2015-11-01&end-date=2015-11-06 \
    &metrics=ga:users&dimensions=ga:pagePath

v4

v4 रेफ़रंस दस्तावेज़

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    "viewId":"XXXX",
    "dateRanges":[
    {
      "startDate":"2015-11-01",
      "endDate":"2015-11-06"
    }],
    "metrics":[
    {
      "expression":"ga:users"
    }],
    "dimensions": [
    {
      "name":"ga:pagePath"
    }]
  }]
}

क्लाइंट लाइब्रेरी और डिस्कवरी सेवा

अगर आपने Python, JavaScript या ऐसी अन्य क्लाइंट लाइब्रेरी का इस्तेमाल किया है जो Google Discovery Service पर निर्भर है, तो आपको Reporting API v4 के लिए, खोज से जुड़े दस्तावेज़ की जगह की जानकारी देनी होगी.

Python

from apiclient import discovery

...

# Build the Analytics Reporting API v4 authorized service object.
analyticsReporting = discovery.build(
  'analyticsreporting',
  'v4',
  http=http,
  discoveryServiceUrl='https://analyticsreporting.googleapis.com/$discovery/rest')

JavaScript

gapi.client.load(
  'https://analyticsreporting.googleapis.com/$discovery/rest',
  'v4'
).then(...)

Java और PHP क्लाइंट लाइब्रेरी पहले से बनी होती हैं, लेकिन इन्हें जनरेट करने के लिए, डिस्कवरी सेवा और Google API जनरेटर का इस्तेमाल किया जा सकता है.

अनुरोध

एपीआई v4 के रेफ़रंस में, अनुरोध के मुख्य हिस्से के बारे में पूरी जानकारी दी गई है. यहां दिए गए सेक्शन में, v3 अनुरोध पैरामीटर को v4 अनुरोध पैरामीटर में माइग्रेट करने के बारे में बताया गया है.

आईडी देखें

v3 में, "टेबल आईडी" स्वीकार करने वाला ids पैरामीटर, ga:XXXX के फ़ॉर्मैट में होता है. इसमें XXXX, व्यू (प्रोफ़ाइल) आईडी होता है. v4 में, अनुरोध के मुख्य हिस्से के viewId फ़ील्ड में एक व्यू (प्रोफ़ाइल) आईडी दिया गया है.

यहां दिए गए उदाहरणों में, v3 अनुरोध के ids पैरामीटर और v4 अनुरोध के viewId फ़ील्ड की तुलना की गई है:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    "viewId":"XXXX",
    ...
  }]
}

तारीख सीमाएं

Analytics Reporting API v4 की मदद से, एक ही अनुरोध में कई तारीख की सीमाएं तय की जा सकती हैं. dateRanges फ़ील्ड, DateRange ऑब्जेक्ट की सूची लेता है. वर्शन 3 में, किसी अनुरोध में तारीख की सीमा तय करने के लिए start-date और end-date पैरामीटर का इस्तेमाल किया जाता है.

नीचे दिए गए उदाहरण, v3 अनुरोध के start-date और end-date पैरामीटर और v4 अनुरोध के dateRanges फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
    &start-date=2015-11-01&end-date=2015-11-06 \
    ...

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    "viewId":"XXXX",
    "dateRanges":[
    {
      "startDate":"2015-11-01",
      "endDate":"2015-11-06"
    }],
    ....
  }]
}

मेट्रिक

v3 metrics पैरामीटर, v4 metrics फ़ील्ड से मेल खाता है. यह फ़ील्ड, मेट्रिक ऑब्जेक्ट की सूची लेता है.

नीचे दिए गए उदाहरण, v3 अनुरोध के metrics पैरामीटर और v4 अनुरोध के metrics फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
    &start-date=2015-11-01&end-date=2015-11-06 \
    &metrics=ga:users,ga:sessions \
    ...

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    "viewId":"XXXX",
    "dateRanges":[
    {
      "startDate":"2015-11-01",
      "endDate":"2015-11-06"
    }],
    "metrics":[
    {
      "expression":"ga:users"
    },{
      "expression":"ga:sessions"
    }],
    ...
  }]
}

डाइमेंशन

v3 dimensions पैरामीटर, v4 dimensions फ़ील्ड से जुड़ा होता है, जो डाइमेंशन ऑब्जेक्ट की सूची लेता है.

नीचे दिए गए उदाहरण, v3 अनुरोध के dimensions पैरामीटर और v4 अनुरोध के dimensions फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
  &dimensions=ga:country,ga:browser&... \

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    ...
    "dimensions": [
    {
      "name":"ga:country"
    },{
      "name":"ga:browser"
    }],
    ...
  }]
}

क्रम से लगाना

v3 sort पैरामीटर, v4 orderBys फ़ील्ड के बराबर है जो OrderBy ऑब्जेक्ट की सूची लेता है.

वर्शन 4 में, नतीजों को डाइमेंशन या मेट्रिक वैल्यू के मुताबिक क्रम से लगाने के लिए:

  • fieldName फ़ील्ड में जाकर, उसका नाम या उपनाम डालें.
  • sortOrder फ़ील्ड की मदद से क्रम तय करें (ASCENDING या DESCENDING).

नीचे दिए गए उदाहरणों में, v3 अनुरोध के sort पैरामीटर और v4 अनुरोध के orderBy फ़ील्ड की तुलना की गई है. ये दोनों ही उपयोगकर्ताओं को घटते क्रम में और सोर्स के हिसाब से, अंग्रेज़ी वर्णमाला के क्रम में लगाते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
  &sort=-ga:users,ga:source

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    ...
    "orderBys": [
    {
      "fieldName": "ga:users",
      "sortOrder": "DESCENDING"
    },{
      "fieldName": "ga:source"
    }],
  }]
}

सैंपलिंग का लेवल

v3 samplingLevel पैरामीटर, v4 samplingLevel फ़ील्ड से मेल खाता है. वर्शन 3 में, samplingLevel के लिए FASTER, HIGHER_PRECISION, और DEFAULT वैल्यू इस्तेमाल की जा सकती हैं. वहीं, वर्शन 4 में, samplingLevel के लिए SMALL, LARGE, और DEFAULT वैल्यू इस्तेमाल की जा सकती हैं. ध्यान दें कि वर्शन 3 में FASTER को v4 में SMALL, HIGHER_PRECISION से LARGE में बदल दिया गया है.

नीचे दिए गए उदाहरणों में, v3 अनुरोध के samplingLevel पैरामीटर और v4 अनुरोध के samplingLevel फ़ील्ड की तुलना की गई है:

v3

https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX ...\
samplingLevel=HIGHER_PRECISION

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    ...
    "samplingLevel": "LARGE"
  }]
}

सेगमेंट

v3 segment पैरामीटर, v4 segments फ़ील्ड से जुड़ा होता है, जो सेगमेंट ऑब्जेक्ट की सूची लेता है.

सेगमेंट आईडी

वर्शन 4 में, सेगमेंट आईडी के हिसाब से सेगमेंट का अनुरोध करने के लिए, एक सेगमेंट ऑब्जेक्ट बनाएं और segmentId फ़ील्ड के ज़रिए इसका आईडी दें.

यहां दिए गए उदाहरण, v3 अनुरोध के segment पैरामीटर और v4 अनुरोध के segments फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
&segment=gaid::-11

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests": [{
    ...
    "viewId": "XXXX",
    "segments": [{
      "segmentId": "gaid::-11"
    }]
  }]
}

डाइनैमिक सेगमेंट

वर्शन 4 में, सेगमेंट की ज़्यादा मुश्किल परिभाषाओं को दिखाने के लिए, उस segments फ़ील्ड का इस्तेमाल करें जिसमें DynamicSegment ऑब्जेक्ट शामिल हो.

नीचे दिए गए उदाहरण, v3 अनुरोध के segment पैरामीटर और v4 अनुरोध में मौजूद DynamicSegment ऑब्जेक्ट वाले segments फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
&segment=sessions::condition::ga:medium==referral

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests": [{
    ...
    "segments": [{
      "dynamicSegment": {
        "name": "segment_name",
        "sessionSegment": {
          "segmentFilters": [{
            "simpleSegment": {
              "orFiltersForSegment": [{
                "segmentFilterClauses": [{
                  "dimensionFilter": {
                    "dimensionName": "ga:medium",
                    "operator": "EXACT",
                    "expressions": [ "referral" ]
                  }
                }]
              }]
            }
          }]
        }
      }
    }]
  }]
}

किसी सेगमेंट में शर्तों और क्रम को जोड़ा जा सकता है:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
&segment=users::condition::ga:revenue>10;sequence::ga:deviceCategory==desktop->>ga:deviceCategory==mobile

v4

  "reportRequests": [{
      "dateRanges": [
            { "endDate": "2014-11-30", "startDate": "2014-11-01" }
      ],
      "metrics": [
          {"expression": "ga:pageviews"},
          {"expression": "ga:sessions"}
      ],
      "viewId": "XXXX",
      "dimensions":[{"name":"ga:medium"}, {"name":"ga:segment"}],
      "segments": [{
        "dynamicSegment": {
        "name": "segment_name",
        "userSegment": {
          "segmentFilters": [{
            "simpleSegment": {
              "orFiltersForSegment": [{
                "segmentFilterClauses": [{
                  "metricFilter": {
                    "metricName": "ga:sessions",
                    "operator": "GREATER_THAN",
                    "comparisonValue": "10"
                  }
                }]
              }]
            }
          },
          {
            "sequenceSegment": {
              "segmentSequenceSteps": [{
                "orFiltersForSegment": [{
                  "segmentFilterClauses": [{
                    "dimensionFilter": {
                      "dimensionName": "ga:deviceCategory",
                      "operator": "EXACT",
                      "expressions": ["desktop"]
                    }
                  }]
                }],
                "matchType": "PRECEDES"
              },{
                "orFiltersForSegment": [{
                  "segmentFilterClauses": [{
                    "dimensionFilter": {
                      "dimensionName": "ga:deviceCategory",
                      "operator": "EXACT",
                      "expressions": ["mobile"]
                    }
                  }]
                }]
              }]
            }
          }]
        }
      }
    }]
  }]

v4 में v3 सेगमेंट सिंटैक्स

v4 API में मौजूद segmentId फ़ील्ड, v3 API में सेगमेंट सिंटैक्स के साथ काम करता है.

नीचे दिए गए उदाहरणों में दिखाया गया है कि v3 अनुरोध में मौजूद segment पैरामीटर, v4 में मौजूद ऐसे ही अनुरोध के segmentId फ़ील्ड के साथ कैसे काम करता है:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
&segment=sessions::condition::ga:medium==referral

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests": [{
    ...
    "viewId": "XXXX",
    "segments": [{
      "segmentId": "sessions::condition::ga:medium==referral"
    }]
  }]
}

फ़िल्टर

v4, डाइमेंशन को फ़िल्टर करने के लिए dimensionFilterClauses और मेट्रिक को फ़िल्टर करने के लिए metricFilterClauses का इस्तेमाल करता है. dimensionFilterClauses में DimensionFilter ऑब्जेक्ट की सूची होती है और metricFilterClauses में MetricFilter ऑब्जेक्ट की सूची होती है.

यहां दिए गए उदाहरण, v3 अनुरोध के filters पैरामीटर और v4 अनुरोध के dimensionFilterClauses फ़ील्ड की तुलना करते हैं:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXX \
  &start-date=2015-06-01&end-date=2015-07-31&metrics=ga:users& \
  dimensions=ga:browser&filters=ga:browser==Firefox

v4

  "reportRequests": [{
      "dateRanges": [
            { "endDate": "2014-11-30", "startDate": "2014-11-01" }
      ],
      "metrics": [
          {"expression": "ga:pageviews"},
          {"expression": "ga:sessions"}
      ],
      "viewId": "XXXX",
      "dimensions":[{"name":"ga:browser"}, {"name":"ga:country"}],
      "dimensionFilterClauses": [{
           "filters": [{
                "dimension_name": "ga:browser",
                "operator": "EXACT",
                "expressions": ["Firefox"]
            }]
      }]
  }]

v4 में v3 फ़िल्टर सिंटैक्स

हालांकि, v4 में filtersExpression फ़ील्ड, v3 में filters सिंटैक्स के साथ काम करता है, लेकिन डाइमेंशन और मेट्रिक को फ़िल्टर करने के लिए dimensionFilterClauses और metricFilterClauses का इस्तेमाल करें.

नीचे दिए गए उदाहरणों में दिखाया गया है कि v3 अनुरोध में मौजूद filters पैरामीटर, v4 में मौजूद ऐसे ही अनुरोध के filtersExpression फ़ील्ड के साथ कैसे काम करता है:

v3

GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga%XXXX \
&filters=ga:browser==Firefox

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests": [{
    ...
    "filtersExpression": "ga:browser==Firefox"
  }]
}

खाली पंक्तियां

v3 include-empty-rows पैरामीटर, v4 के includeEmptyRows फ़ील्ड से मेल खाता है. v3 पैरामीटर डिफ़ॉल्ट रूप से true पर सेट होता है, जबकि v4 में फ़ील्ड डिफ़ॉल्ट रूप से false पर सेट होता है. अगर आपने v3 में वैल्यू सेट नहीं की है, तो आपको v4 में वैल्यू को true पर सेट करना होगा.

यहां दिए गए उदाहरणों में, v3 अनुरोध में मौजूद include-empty-rows पैरामीटर की तुलना, v4 अनुरोध के includeEmptyRows फ़ील्ड से की गई है:

v3

https://www.googleapis.com/analytics/v3/data/ga? ...\
    &include-empty-rows=true

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    ...
    "includeEmptyRows": "true",
  }]
}

खोज नतीजों को पेजों में बांटना

v4, pageToken और pageSize फ़ील्ड का इस्तेमाल करके, कई नतीजों को पेज पर लगाता है. pageToken, किसी रिस्पॉन्स ऑब्जेक्ट की nextPageToken प्रॉपर्टी से लिया जाता है.

नीचे दिए गए उदाहरणों में v3 अनुरोध के start-index और max-results पैरामीटर की तुलना, v4 अनुरोध के pageToken और pageSize फ़ील्ड से की गई है:

v3

https://www.googleapis.com/analytics/v3/data/ga? ...\
    &start-index=10001&max-results=10000

v4

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":[
  {
    ...
    # Taken from `nextPageToken` of a previous response.
    "pageToken": "10000",
    "pageSize": "10000",
  }]
}

स्टैंडर्ड पैरामीटर

Analytics Reporting API v4, userIp और callback पैरामीटर को छोड़कर, v3 API में ज़्यादातर स्टैंडर्ड क्वेरी पैरामीटर के साथ काम करता है.

यहां दिए गए उदाहरणों में, v3 अनुरोध में मौजूद quotaUser पैरामीटर की तुलना v4 अनुरोध के पैरामीटर से की गई है:

v3 एंडपॉइंट

GET https://www.googleapis.com/analytics/v3/data/ga?quotaUser=1X3F2F2

v4 एंडपॉइंट

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet?quotaUser=1X3F2F2

जवाब

v4 की मदद से एक ही एचटीटीपी अनुरोध में, कई ReportRequest ऑब्जेक्ट सबमिट किए जा सकते हैं. इस वजह से, आपको रिस्पॉन्स में रिपोर्ट ऑब्जेक्ट का कलेक्शन मिलता है. सबमिट किए गए हर ReportRequest के लिए, आपको एक रिपोर्ट मिलती है.

रिपोर्ट

v4 रिपोर्ट में तीन टॉप-लेवल फ़ील्ड होते हैं: columnHeader, data, और nextPageToken.

v4 रिस्पॉन्स के मुख्य भाग में सभी क्वेरी पैरामीटर के रिस्पॉन्स शामिल नहीं किए जाते, जैसे कि v3 रिस्पॉन्स में करते हैं. किसी खास क्वेरी पैरामीटर पर रिस्पॉन्स पाने के लिए, क्लाइंट ऐप्लिकेशन को वह पैरामीटर ReportRequest में जोड़ना होगा.

हमने पेज पर नंबर डालना सेक्शन में nextPageToken के बारे में पहले ही बता दिया है. इसलिए, आइए सबसे पहले columnHeader ऑब्जेक्ट पर नज़र डालते हैं.

कॉलम हेडर

कॉलम हेडर में, नाम वाले डाइमेंशन और MetricHeader ऑब्जेक्ट की सूची होती है. इस ऑब्जेक्ट में, MetricHeaderEntry ऑब्जेक्ट की सूची होती है. हर MetricHeaderEntry ऑब्जेक्ट से, name मेट्रिक और उसके type (मुद्रा, प्रतिशत वगैरह) के बारे में जानकारी मिलती है , जो आउटपुट को फ़ॉर्मैट करने में आपकी मदद करता है.

नीचे दिए गए उदाहरण, v3 रिस्पॉन्स में columnHeaders फ़ील्ड की तुलना v4 रिस्पॉन्स के columnHeader फ़ील्ड से करते हैं:

v3

"columnHeaders": [
    {
        "name":"ga:source",
        "columnType":"DIMENSION",
        "dataType":"STRING"
    },{
        "name":"ga:city",
        "columnType":"DIMENSION",
        "dataType":"STRING"
    },{
        "name":"ga:sessions",
        "columnType":"METRIC",
        "dataType":"INTEGER"
    },{
        "name":"ga:pageviews",
        "columnType":
        "METRIC",
        "dataType":"INTEGER"
    }
]

v4

"columnHeader": {
    "dimensions": [
        "ga:source",
        "ga:city"
    ],
    "metricHeader": {
        "metricHeaderEntries": [
            {
                "name": "ga:pageviews",
                "type": "INTEGER"
            },
            {
                "name": "ga:sessions",
                "type": "INTEGER"
            }
        ]
    }
},

पंक्तियों की रिपोर्ट करें

Core Reporting API v3, लाइन कलेक्शन में रिपोर्ट का डेटा दिखाता है. इसमें, अनुरोध किए गए डाइमेंशन और मेट्रिक शामिल होती हैं.

Analytics Reporting API v4, किसी ReportRow ऑब्जेक्ट में रिपोर्ट डेटा दिखाता है. इसमें डाइमेंशन और DateRangeValues ऑब्जेक्ट की एक कलेक्शन शामिल होता है. हर ऑब्जेक्ट में तारीख की एक या दो सीमाएं होती हैं. नीचे दिए गए डायग्राम में यह डेटा दिखाया गया है:

पंक्तियों की रिपोर्ट करें

लाइन

v3

"rows": [
    [
        "google",
        "Philadelphia",
        "60",
        "5"
    ],
    [
        "google",
        "Johnstown",
        "21",
        "1"
    ],
    [
        "google",
        "Progress",
        "7",
        "1"
    ]
],

v4

"rows": [
    {
        "dimensions": [
            "google",
            "Philadelphia"
        ],
        "metrics": [
            {
                "values": [
                    "60",
                    "5"
                ]
            }
        ]
    },
    {
        "dimensions": [
            "google",
            "Johnstown"
        ],
        "metrics": [
            {
                "values": [
                    "21",
                    "1"
                ]
            }
        ]
    },
    {
        "dimensions": [
            "google",
            "Progress"
        ],
        "metrics": [
            {
                "values": [
                    "7",
                    "1"
                ]
            }
        ]
    }
],

नमूना लिया गया डेटा

अगर नतीजे सैंपल हैं, तो कोर रिपोर्टिंग एपीआई v3 बूलियन फ़ील्ड containsSampledData दिखाता है, जो true पर सेट होता है.

अगर डेटा का सैंपल लिया जाता है, तो Analytics Reporting API v4 बूलियन को नहीं दिखाता है, बल्कि एपीआई samplesReadCounts और samplingSpaceSizes फ़ील्ड दिखाता है. अगर नतीजे सैंपल नहीं किए गए हैं, तो इन फ़ील्ड को तय नहीं किया जाएगा. Python के इस उदाहरण में, यह कैलकुलेट करने का तरीका बताया गया है कि किसी रिपोर्ट में सैंपल डेटा शामिल है या नहीं:

def ContainsSampledData(report):
  """Determines if the report contains sampled data.

   Args:
       report (Report): An Analytics Reporting API v4 response report.

  Returns:
      bool: True if the report contains sampled data.
  """
  report_data = report.get('data', {})
  sample_sizes = report_data.get('samplesReadCounts', [])
  sample_spaces = report_data.get('samplingSpaceSizes', [])
  if sample_sizes and sample_spaces:
    return True
  else:
    return False

यहां जवाब का एक उदाहरण दिया गया है. इसमें, तारीख की दो सीमाओं वाले अनुरोध का सैंपल डेटा दिया गया है. नतीजों की गिनती करीब 1.5 करोड़ सेशन के सैंपलिंग स्पेस के करीब 5 लाख नमूनों से की गई थी:

{
  "reports":
  [
    {
      "columnHeader": {
        ...
      },
      "data": {
        ...
        "samplesReadCounts": [ "499630","499630"],
        "samplingSpaceSizes": ["15328013","15328013"],
      }
    }
  ]
}

v4 रिस्पॉन्स को पार्स करना

यहां दिया गया सैंपल कोड, Analytics Reporting API के v4 वर्शन वाले रिस्पॉन्स को पार्स और प्रिंट करता है:

Python

def printResponse(self, response):
  """Parses and prints the Analytics Reporting API v4 response"""

  for report in response.get('reports', []):
    columnHeader = report.get('columnHeader', {})
    dimensionHeaders = columnHeader.get('dimensions', [])
    metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])
    rows = report.get('data', {}).get('rows', [])

    for row in rows:
      dimensions = row.get('dimensions', [])
      dateRangeValues = row.get('metrics', [])

      for header, dimension in zip(dimensionHeaders, dimensions):
        print header + ': ' + dimension

      for i, values in enumerate(dateRangeValues):
        print 'Date range (' + str(i) + ')'
        for metricHeader, value in zip(metricHeaders, values.get('values')):
          print metricHeader.get('name') + ': ' + value

Java

public static void printResponse(GetReportsResponse response) {

  for (Report report: response.getReports()) {
    ColumnHeader header = report.getColumnHeader();
    List<String> dimensionHeaders = header.getDimensions();
    List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries();
    List<ReportRow> rows = report.getData().getRows();

    for (ReportRow row: rows) {
      List<String> dimensions = row.getDimensions();
      List<DateRangeValues> metrics = row.getMetrics();
      for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) {
        System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i));
      }

      for (int j = 0; j < metrics.size(); j++) {
        System.out.print("Date Range (" + j + "): ");
        DateRangeValues values = metrics.get(j);
        for (int k = 0; k < values.size() && k < metricHeaders.size(); k++) {
          System.out.println(metricHeaders.get(k).getName() + ": " + values.get(k));
        }
      }
    }
  }
}

गड़बड़ी ठीक करना

v4 में गड़बड़ी रिस्पॉन्स का फ़ॉर्मैट, v3 से अलग होता है. इसलिए, v4 की गड़बड़ी के रिस्पॉन्स को मैनेज करने के लिए अपना कोड अपडेट करें.

नीचे दिए गए उदाहरण, v3 और v4 में गड़बड़ी वाले इसके बराबर रिस्पॉन्स की तुलना करते हैं:

v3

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "User does not have sufficient permissions for this profile.",

   }
  ],
  "code": 403,
  "message": "User does not have sufficient permissions for this profile."
 }
}

v4

{
 "error": {
  "code": 403,
  "message": "User does not have sufficient permissions for this profile.",
  "status": "PERMISSION_DENIED",
  "details": [
   {
    "@type": "type.googleapis.com/google.rpc.DebugInfo",
    "detail": "[ORIGINAL ERROR] generic::permission_denied: User does not have sufficient permissions for this profile. [google.rpc.error_details_ext] { message: \"User does not have sufficient permissions for this profile.\" }"
   }
  ]
 }
}