brahimbim/laravel-analytics-bugfix

一个用于检索 Google Analytics 数据的 Laravel 扩展包,包含针对 Laravel 8 和 PHP 8 的错误修复

dev-main 2023-12-07 02:54 UTC

This package is auto-updated.

Last update: 2024-09-07 04:56:39 UTC


README

Social Card of Laravel Analytics

从 Google Analytics 获取数据

Latest Version MIT Licensed Check & fix styling Total Downloads

使用此扩展包,您可以轻松地从 Google Analytics 获取数据。

以下是提供的一些方法示例

use Spatie\Analytics\Facades\Analytics;
use Spatie\Analytics\Period;

//fetch the most visited pages for today and the past week
Analytics::fetchMostVisitedPages(Period::days(7));

//fetch visitors and page views for the past week
Analytics::fetchVisitorsAndPageViews(Period::days(7));

大多数方法将返回一个包含结果的 \Illuminate\Support\Collection 对象。

支持我们

我们投入了大量资源来创建 一流的开放源代码包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从您的家乡寄来明信片,说明您正在使用我们的哪些包。您可以在 我们的联系页面 上找到我们的地址。我们在 我们的虚拟明信片墙 上发布所有收到的明信片。

安装

此扩展包可以通过 Composer 安装。

composer require spatie/laravel-analytics

可选地,您可以使用以下命令发布此扩展包的配置文件

php artisan vendor:publish --tag="analytics-config"

以下配置文件将发布到 config/analytics.php

return [

    /*
     * The property id of which you want to display data.
     */
    'property_id' => env('ANALYTICS_PROPERTY_ID'),

    /*
     * Path to the client secret json file. Take a look at the README of this package
     * to learn how to get this file. You can also pass the credentials as an array
     * instead of a file path.
     */
    'service_account_credentials_json' => storage_path('app/analytics/service-account-credentials.json'),

    /*
     * The amount of minutes the Google API responses will be cached.
     * If you set this to zero, the responses won't be cached at all.
     */
    'cache_lifetime_in_minutes' => 60 * 24,

    /*
     * Here you may configure the "store" that the underlying Google_Client will
     * use to store it's data.  You may also add extra parameters that will
     * be passed on setCacheConfig (see docs for google-api-php-client).
     *
     * Optional parameters: "lifetime", "prefix"
     */
    'cache' => [
        'store' => 'file',
    ],
];

如何获取与 Google Analytics 通信的凭证

获取凭证

您首先需要获取一些凭证以使用 Google API。我假设您已经创建了一个 Google 账户并已登录。前往 Google API 站点 并选择或创建一个项目。

1

接下来,我们必须指定项目可以消耗哪些 API。转到 API 库并搜索 "Google Analytics Data API"。

2 3

选择启用以启用 API。 4

现在您已经创建了一个可以访问 Analytics API 的项目,是时候下载包含这些凭证的文件了。在侧边栏中单击 "凭证"。您需要创建一个 "服务账户密钥"。 5

在下一屏幕上,您可以给服务账户起一个名字。您想叫什么都可以。在服务账户 ID 中,您会看到一个电子邮件地址。我们将在本指南的后续部分使用此电子邮件地址。

6

转到您创建的服务账户的详细信息页面,并选择 "密钥",从 "添加密钥" 下拉菜单中选择 "创建新密钥"。

7

选择 "JSON" 作为密钥类型,然后单击 "创建" 下载 JSON 文件。

8

将 json 保存到 Laravel 项目的指定位置,该位置在扩展包配置文件中的 service_account_credentials_json 键中指定。由于 json 文件包含可能敏感的信息,我不建议将其提交到您的 git 仓库。

为您的 Analytics 属性授予权限

我假设您已经在 Analytics 网站上 创建了一个 Analytics 账户,并正在使用新的 GA4 属性。

首先,您需要知道您的属性 ID。在 Analytics 中,转到设置 > 属性设置。在这里,您可以复制您的属性 ID。将此值用于 .env 文件中的 ANALYTICS_PROPERTY_ID 键。

a1

现在我们需要为您创建的服务账户提供访问权限。转到属性管理部分的“属性访问管理”。点击右上角的加号以添加新用户。

在此屏幕上,您可以授予访问上一步骤中下载的 json 文件中的 client_email 键中找到的电子邮件地址的权限。分析师角色就足够了。

a2

用法

安装完成后,您可以轻松检索 Analytics 数据。几乎所有方法都将返回一个 Illuminate\Support\Collection 实例。

以下是一些使用周期(period)的示例

use Spatie\Analytics\Facades\Analytics;

//retrieve visitors and page view data for the current day and the last seven days
$analyticsData = Analytics::fetchVisitorsAndPageViews(Period::days(7));

//retrieve visitors and page views since the 6 months ago
$analyticsData = Analytics::fetchVisitorsAndPageViews(Period::months(6));

$analyticsData 是一个 Collection,其中每个条目都是一个包含 datevisitorspageViews 键的数组

如果您想对要获取数据的周期有更多的控制,可以向周期对象传递一个 startDate 和一个 endDate

$startDate = Carbon::now()->subYear();
$endDate = Carbon::now();

Period::create($startDate, $endDate);

提供的方法

访问者和页面浏览量

public function fetchVisitorsAndPageViews(Period $period): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 activeUsersscreenPageViewspageTitle 键的数组。

按日期访问者和页面浏览量

public function fetchVisitorsAndPageViewsByDate(Period $period): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 dateactiveUsersscreenPageViewspageTitle 键的数组。

总访问者和页面浏览量

public function fetchTotalVisitorsAndPageViews(Period $period): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 datevisitorspageViews 键的数组。

最常访问的页面

public function fetchMostVisitedPages(Period $period, int $maxResults = 20): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 fullPageUrlpageTitlescreenPageViews 键的数组。

顶级引用者

public function fetchTopReferrers(Period $period, int $maxResults = 20): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 screenPageViewspageReferrer 键的数组。

用户类型

public function fetchUserTypes(Period $period): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 activeUsersnewVsReturning 键的数组,其中可以等于 newreturning

顶级浏览器

public function fetchTopBrowsers(Period $period, int $maxResults = 10): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 screenPageViewsbrowser 键的数组。

顶级国家

public function fetchTopCountries(Period $period, int $maxResults = 10): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 screenPageViewscountry 键的数组。

顶级操作系统

public function fetchTopOperatingSystems(Period $period, int $maxResults = 10): Collection

该函数返回一个 Collection,其中每个条目都是一个包含 screenPageViewsoperatingSystem 键的数组。

所有其他 Google Analytics 查询

对于所有其他查询,您可以使用 get 函数。

public function get(Period $period, array $metrics, array $dimensions = [], int $limit = 10, array $orderBy = [], FilterExpression $dimensionFilter = null): Collection

以下是关于您可以传递的参数的一些额外信息

Period $period:一个 Spatie\Analytics\Period 对象,用于指示查询的开始和结束日期。

array $metrics:要检索的度量值的数组。您可以在 这里 找到所有度量的列表。

array $dimensions:要按结果分组的维度的数组。您可以在 这里 找到所有维度的列表。

int $limit:要返回的最大结果数。

数组 $orderBy:按结果排序的OrderBy对象。

数组 $offset:默认值为0,您可以与$limit参数结合使用以实现分页。

布尔 $keepEmptyRows:如果为false或未指定,则所有指标均等于0的行将不会返回。如果为true,则如果这些行没有被过滤器单独移除,则将返回这些行。

例如

$orderBy = [
    OrderBy::dimension('date', true),
    OrderBy::metric('pageViews', false),
];

FilterExpression $dimensionFilter:筛选结果,只包含特定的维度值。更多详细信息请参阅此处

例如

use Google\Analytics\Data\V1beta\Filter;
use Google\Analytics\Data\V1beta\FilterExpression;
use Google\Analytics\Data\V1beta\Filter\StringFilter;
use Google\Analytics\Data\V1beta\Filter\StringFilter\MatchType;

$dimensionFilter = new FilterExpression([
    'filter' => new Filter([
        'field_name' => 'eventName',
        'string_filter' => new StringFilter([
            'match_type' => MatchType::EXACT,
            'value' => 'click',
        ]),
    ]),    
]);

测试

使用以下命令运行测试

vendor/bin/pest

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全性

如果您发现有关安全性的错误,请通过邮件security@spatie.be联系,而不是使用问题跟踪器。

致谢

特别感谢Caneco为标志✨做出的贡献

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件