View Source ReqGA (ReqGA v0.1.2)
A Req plugin for interacting with Google Analytics 4 APIs.
Currently implemented methods
| :ga API method | API | Endpoint | Req HTTP method supported |
|---|---|---|---|
| :run_report | Data API | ":runReport" | post |
| :batch_run_reports | Data API | ":batchRunReports" | post |
| :run_pivot_report | Data API | ":runPivotReport" | post |
| :batch_run_pivot_reports | Data API | ":batchRunPivotReports" | post |
| :run_realtime_report | Data API | ":runRealtimeReport" | post |
| :check_compatibility | Data API | ":checkCompatibility" | post |
| :metadata | Data API | "/metadata" | get |
| :audience_lists | Data API | "/audienceLists" | get |
| :audience_exports | Data API | "/audienceExports" | get |
| :account_summaries | Admin API | "/accountSummaries" | get |
| :custom_dimensions | Admin API | "/customDimensions" | get, post |
| :custom_metrics | Admin API | "/customMetrics" | get, post |
| :accounts | Admin API | "/accounts" | get, delete, post |
| :properties | Admin API | "/accounts" | get, delete, post |
| :key_events | Admin API | "/keyEvents" | get |
Example usage
# Authenticate with Google Cloud using Goth with the desired API scopes
iex> credentials = "credentials.json" |> File.read!() |> Jason.decode!()
iex> scopes = [
"https://www.googleapis.com/auth/analytics",
"https://www.googleapis.com/auth/analytics.edit",
"https://www.googleapis.com/auth/analytics.readonly",
"https://www.googleapis.com/auth/analytics.manage.users",
"https://www.googleapis.com/auth/analytics.manage.users.readonly"
]
iex> source = {:service_account, credentials, [scopes: scopes]}
iex> {:ok, _} = Goth.start_link(name: GA, source: source, http_client: &Req.request/1)
# Attach ReqGA to Req's request and response steps
iex> req = Req.new() |> ReqGA.attach(goth: GA)
# Query away!
# ID of property to query. In the format "properties/<id number>", e.g.:
iex> property_id = "properties/264264328"
# Define a report to be posted
iex> report = %{
"dateRanges" => [%{ "startDate" => "2023-09-01", "endDate" => "2023-09-15" }],
"dimensions" =>[%{ "name" => "country" }],
"metrics" => [
%{"name" => "activeUsers"},
%{"name" => "userEngagementDuration"},
%{"name" => "engagementRate"},
%{"name" => "organicGoogleSearchClickThroughRate"},
]
}
# Run the report with the :run_report method
iex> res = Req.post!(req, ga: :run_report, property_id: property_id, json: report)
# The response body will hold the decoded data
iex> res.body
%ReqGA.ReportResponse{
dimensions: ["country"],
metrics: [
{"activeUsers", "TYPE_INTEGER"},
{"userEngagementDuration", "TYPE_SECONDS"},
{"engagementRate", "TYPE_FLOAT"},
{"organicGoogleSearchClickThroughRate", "TYPE_FLOAT"}
],
columns: ["country", "activeUsers", "userEngagementDuration", "engagementRate",
"organicGoogleSearchClickThroughRate"],
rows: [
["Australia", 10089, 568807, 0.6080890737138641, 0.06607765656247402],
["India", 46, 1022, 0.6730769230769231, 0.006472491909385114]
],
totals: nil,
maximums: nil,
minimums: nil,
count: 2,
property_quota: nil,
metadata: %{
"currencyCode" => "AUD",
"subjectToThresholding" => true,
"timeZone" => "Australia/Melbourne"
}
}Use with Table
Some of the Structs implement the Table.Reader protocol (https://hex.pm/packages/table) and can be traversed by rows or columns.
- ReqGA.ReportResponse
- ReqGA.PivotReportResponse
- ReqGA.AccountList
- ReqGA.Account
This makes it easier to view in LiveBook as a table by piping it to Kino.DataTable.new or for creating a DataFrame with Explorer.DataFrame.new.
API methods
Below are the API methods from the Google Analytics Data API which have been implemented in this library.
The method is passed to Req using the :ga parameter. For example, the :run_report API method would be called as follows:
res = Req.post!(req, ga: :run_report, property_id: "properties/264264328", json: report):run_report
Returns a customized report of your Google Analytics data.
This is equivalent of the Google Analytics Data API endpoint: POST /v1beta/{property=properties/*}:runReport
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: reportwhere report is a map representing a JSON report
Example
report = %{
"dateRanges" => [%{ "startDate" => "2023-09-01", "endDate" => "2023-09-15" }],
"dimensions" =>[%{ "name" => "country" }],
"metrics" => [
%{"name" => "activeUsers"},
%{"name" => "userEngagementDuration"},
%{"name" => "engagementRate"},
%{"name" => "organicGoogleSearchClickThroughRate"},
]
}
res = Req.post!(req, ga: :run_report, property_id: "properties/264264328", json: report)More information:
- https://developers.google.com/analytics/devguides/reporting/data/v1/basics
- https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runReport
:batch_run_reports
Returns multiple reports in a batch.
This is equivalent of the Google Analytics Data API endpoint: POST /v1beta/{property=properties/*}:batchRunReports
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: batch_reportwhere batch_report is a map representing a JSON batch report request
:run_pivot_report
Returns a customized pivot report of your Google Analytics event data.
This is equivalent of the Google Analytics Data API endpoint: POST /v1beta/{property=properties/*}:runPivotReport
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: pivot_report_requestwhere pivot_report_request is a map representing a JSON pivot report request
batch_run_pivot_reports
Returns multiple pivot reports in a batch. All reports must be for the same GA4 Property.
This is equivalent of the Google Analytics Data API endpoint: POST https://analyticsdata.googleapis.com/v1beta/{property=properties/*}:batchRunPivotReports
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: batch_pivot_report_requestwhere batch_pivot_report_request is a map representing a JSON batch pivot report request
:run_realtime_report
Returns a customized report of realtime event data for your property.
This is equivalent of the Google Analytics Data API endpoint: POST /v1beta/{property=properties/*}:runRealtimeReport
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: realtime_report_requestwhere realtime_report_request is a map representing a JSON realtime report request
:check_compatibility
This compatibility method lists dimensions and metrics that can be added to a report request and maintain compatibility.
This is equivalent of the Google Analytics Data API endpoint: POST /v1beta/{property=properties/*}:checkCompatibility
Use Req.post or Req.post! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"json: compatibility_requestwhere compatibility_request is a map representing a JSON compatibility request
:metadata
Returns metadata for dimensions and metrics available in reporting methods.
This is equivalent of the Google Analytics Data API endpoint: GET /v1beta/{name=properties/*/metadata}
Use Req.get or Req.get! with the following parameters:
property_id:an ID of the GA4 property in the format "properties/264264328"
Summary
Functions
Attaches ReqGA to Req's request and response steps.