tallesairan/laravel-plausible

用于与 plausible 分析 API 交互的 Laravel 扩展包。

1.5 2023-06-15 19:46 UTC

This package is auto-updated.

Last update: 2024-09-15 22:57:31 UTC


README

此包最初由 @njoguamos 创建 - njoguamos/laravel-plausible

我必须进行这种适配,因为原始项目只支持 Plausible.io,不支持自托管分析,我进行了一些更改,使得 plausible 的基本地址可以通过配置和方法进行操作,这样我们就可以在一个 Apis 系统中管理多个自托管的 Plausible。

Latest Version on Packagist Total Downloads

Plausible 是直观、轻量级且开源的网站分析。Plausible 没有cookies,完全符合 GDPR、CCPA 和 PECR。

Plausible 自托管文档 Plausible 分析是为通过 Docker 自托管而设计的。您不需要是 Docker 专家就可以启动自己的 Plausible 分析实例。您应该对命令行和网络有基本了解,以便成功设置自己的 Plausible 分析实例。

安装

您可以通过 composer 安装此包

   composer require tallesairan/laravel-plausible

您可以使用以下命令初始化包

  php artisan plausible:install

安装命令将发布 配置文件

请确保您已经更新了应用程序 .env 文件,并包含来自 Plausible 的凭据,即

#.env file

BASE_URL=https://your-self-hosted-address.io
PLAUSIBLE_SITE_ID=
PLAUSIBLE_API_KEY=

可选的 baseUrl 或 siteId 通过外观

开发这些方法以帮助远程管理多个自托管的 plausible

默认的基础 URL 为 "https://#",以确保操作时 URL 末尾没有斜杠

use Airan\Plausible\Facades\Plausible;

Plausible::setBaseUrl('https://your-self-hosted-address.io');
Plausible::setSiteId('newera.com');
Plausible::setApiKey('eg-nw88131238128jj9213u1h3h1hh13h2h31200x1h5hh5')
/**
* Practical example
*/
# Let's assume that the Site Model has a belongs to many relationship with a model called Plausible

$sites = Site:with('plausible')->get();

foreach ($sites as $site){
    Plausible::setBaseUrl($site->plausible->base_url); // eg https://stats.newera.com
    Plausible::setApiKey($site->plausible->api_key); // set default api key
    Plausible::setSiteId($site->plausible_slug); // eg newera.com 
    
    $visitors = Plausible::realtime();
    $aggregates = Plausible::aggregates();
    ...
    
}

用法

1. 获取实时访客

要获取您默认站点的当前访客,请运行以下请求。

use Airan\Plausible\Facades\Plausible;

$visitors = Plausible::realtime();

响应为一个单个数字

12

如果您喜欢使用外观,则可以这样做。

use Airan\Plausible\Facades\Plausible;

$all = Plausible::aggregates();

2. 获取聚合数据

要获取聚合数据,请运行以下请求。

use Airan\Plausible\Facades\Plausible;

// Simple with default
$aggregates = Plausible::aggregates();

// Or with optional custom parameters
$aggregates = Plausible::aggregates(
        period: 'custom',
        metrics: ['visitors', 'visits', 'pageviews'],
        filters: ['event:page==/blog**', 'visit:country==KE'],
        date: '2023-01-01,2023-01-31'
    );

成功的响应将是一个 json。示例;

{
    "bounce_rate": {
        "change": 4,
        "value": 71
    },
    "events": {
        "change": -24,
        "value": 1166
    },
    "pageviews": {
        "change": -24,
        "value": 1166
    },
    "views_per_visit": {
        "change": -26,
        "value": 3
    },
    "visit_duration": {
        "change": -37,
        "value": 132
    },
    "visitors": {
        "change": 1,
        "value": 360
    },
    "visits": {
        "change": 3,
        "value": 389
    }
}

聚合参数说明 展开以查看更多详细信息

Period - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(period: '7d')

period 必须是以下允许值之一,即 12mo6momonth0d7ddaycustom。如果未提供,则默认为 30d

Metrics - 数组,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(metrics: ['visitors', 'visits'])

metrics 必须包含以下允许值之一,即 visitorsvisitspageviewsviews_per_visitbounce_ratevisit_durationevents。如果未提供,则包含所有指标。

Compare - 布尔值,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(compare: false )

compare 默认为 true,表示将计算每个指标与上一个时期的百分比差异。

Filters - 数组,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(filters: ['event:page==/blog**', 'visit:country==KE|DE'])

您的过滤器必须根据 plausible 指令 正确形成。默认为 null

Date - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(period: 'custom', date: '2023-01-01,2023-01-31')

日期格式为 Y-m-d。单个日期,例如 2023-01-04 或范围 2023-01-01,2023-01-31。如果未提供,则日期默认为 当前日期

信息 当您提供日期范围时,必须包含 period: 'custom'

3. 获取时间序列数据

要获取特定时间段的时间序列数据,请按以下方式运行请求。

use Airan\Plausible\Facades\Plausible;

// Simple with default
$aggregates = Plausible::timeSeries();

// Or with optional custom parameters
$aggregates = Plausible::timeSeries(
        period: 'custom',
        metrics: ['visitors', 'visits', 'pageviews', 'views_per_visit', 'bounce_rate', 'visit_duration'],
        filters: ['event:page==/blog**'],
        interval: 'month',
        date: '2023-01-01,2023-01-31'
    );

成功的响应将是一个 json。示例;

[
    {
        "bounce_rate": 17,
        "date": "2023-01-01",
        "pageviews": 60,
        "views_per_visit": 19,
        "visit_duration": 525,
        "visitors": 6,
        "visits": 6
    },
    {
        "bounce_rate": 12,
        "date": "2023-01-02",
        "pageviews": 22,
        "views_per_visit": 4,
        "visit_duration": 149,
        "visitors": 6,
        "visits": 8
    },
    {
        "bounce_rate": 57,
        "date": "2023-01-03",
        "pageviews": 9,
        "views_per_visit": 2.57,
        "visit_duration": 48,
        "visitors": 7,
        "visits": 7
    },
    {
        "bounce_rate": 71,
        "date": "2023-01-04",
        "pageviews": 48,
        "views_per_visit": 8.43,
        "visit_duration": 301,
        "visitors": 7,
        "visits": 7
    }
]

时间序列参数说明 展开以查看更多细节

Period - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(period: '6mo')

period 必须是以下允许值之一,即 12mo6momonth0d7ddaycustom。如果未提供,则默认为 30d

Metrics - 数组,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(metrics: ['visits', 'pageviews', 'views_per_visit'])

metrics 必须包含以下允许值之一,即 visitorsvisitspageviewsviews_per_visitbounce_ratevisit_durationevents。如果未提供,则包含所有指标。

Filters - 数组,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(filters: ['event:page==/blog**', 'visit:browser==Firefox'])

您的过滤器必须根据 plausible 指令 正确形成。默认为 null

间隔 - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(interval: 'month')

间隔只能是 monthdate。如果未提供,则默认为 date。

Date - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(period: 'custom', date: '2023-01-01,2023-01-31')

日期格式为 Y-m-d。单个日期,例如 2023-01-04 或范围 2023-01-01,2023-01-31。如果未提供,则日期默认为 当前日期

信息 当您提供日期范围时,必须包含 period: 'custom'

4. 获取细分数据

要获取按某些属性统计的细分数据,请按以下方式运行请求。

use \Airan\Plausible\Facades\Plausible;

// Simple with defaults
$visitors = Plausible::breakdown();

// With optional parameters
$aggregates = Plausible::breakdown(
        property: 'event:page',
        period: '12mo',
        metrics: ['visitors', 'visits', 'pageviews'],
        filters: 'event:page==/blog**',
        limit: 500
    );

响应为一个单个数字

[
    {
        "bounce_rate": 71,
        "page": "/",
        "pageviews": 146,
        "visit_duration": 126,
        "visitors": 87,
        "visits": 77
    },
    {
        "bounce_rate": 54,
        "page": "/articles",
        "pageviews": 179,
        "visit_duration": 206,
        "visitors": 71,
        "visits": 50
    },
    {
        "bounce_rate": 81,
        "page": "/blog/about-laravel-plausible",
        "pageviews": 42,
        "visit_duration": 27,
        "visitors": 35,
        "visits": 37
    },
    {
        "bounce_rate": 52,
        "page": "/pricing",
        "pageviews": 72,
        "visit_duration": 147,
        "visitors": 31,
        "visits": 27
    },
    {
        "bounce_rate": 76,
        "page": "/aquatadas",
        "pageviews": 22,
        "visit_duration": 82,
        "visitors": 21,
        "visits": 21
    }
]

细分参数说明 展开以查看更多细节

属性 - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(property: '6mo')

property 必须是允许的之一,即 visitorsvisitspageviewsbounce_ratevisit_duration。如果未提供,则 period 默认为所有允许的;

Period - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(period: '6mo')

period 必须是以下允许值之一,即 12mo6momonth0d7ddaycustom。如果未提供,则默认为 30d

Date - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(date: '2023-01-01')

日期格式为 Y-m-d

信息 period: 'custom' 不受支持。`date: '2023-01-01,2023-02-02' 不受支持。

Metrics - 数组,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(metrics: ['visits', 'pageviews', 'views_per_visit'])

metrics 必须包含以下允许值之一,即 visitorsvisitspageviewsviews_per_visitbounce_ratevisit_durationevents。如果未提供,则包含所有指标。

限制 - 整数,可选
use Airan\Plausible\Facades\Plausible;;

$aggregates = Plausible::breakdown(limit: 200)

结果限制。它必须在 11000 之间。如果未提供,限制默认为 100

页面 - 整数,可选
use Airan\Plausible\Facades\Plausible;;

$aggregates = Plausible::breakdown(page: 2)

结果页面。如果未提供,页面默认为 1

过滤器 - 字符串,可选
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(filters: 'event:page==/blog**')

您的过滤器必须根据 plausible 指令 正确形成。默认为 null

信息 不支持多个过滤器。

5. 缓存响应

为了提高应用程序的性能并减少对可能的 api 的依赖,所有请求都缓存了 3 分钟。您可以使用以下环境变量指定缓存持续时间(以秒为单位)和驱动程序。

PLAUSIBLE_CACHE_DURATION=300
PLAUSIBLE_CACHE_DRIVER=redis

如果由于某些原因您不想缓存响应,您可以添加以下环境变量来完全关闭缓存。

PLAUSIBLE_CACHE=false

测试

信息 要测试此包,请运行以下命令。

composer test

变更日志

有关最近更改的更多信息,请参阅 发布

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

致谢

许可协议

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