PHPackages                             omroepgelderland/atinternet-php-api - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. omroepgelderland/atinternet-php-api

ActiveLibrary[API Development](/categories/api)

omroepgelderland/atinternet-php-api
===================================

PHP implementation for the Piano Reporting API.

2.0.2(1y ago)3140MITPHPPHP ^8.0

Since Jun 24Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/omroepgelderland/piano-analytics-php-api)[ Packagist](https://packagist.org/packages/omroepgelderland/atinternet-php-api)[ RSS](/packages/omroepgelderland-atinternet-php-api/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependencies (2)Versions (8)Used By (0)

Piano analytics (formerly ‘AT Internet’) PHP client
===================================================

[](#piano-analytics-formerly-at-internet-php-client)

This library enables you to get queries from the Piano Analytics Reporting API v3. This is a third-party library. A subscription to Piano Analytics is required.

Requirements
------------

[](#requirements)

- [PHP 8.x](https://www.php.net/)

Installation
------------

[](#installation)

You can use **Composer** or **Download the Release**

### Composer

[](#composer)

The preferred method is via [composer](https://getcomposer.org/). Follow the [installation instructions](https://getcomposer.org/doc/00-intro.md) if you do not already have composer installed.

Once composer is installed, execute the following command in your project root to install this library:

```
composer require omroepgelderland/atinternet-php-api
```

Finally, be sure to include the autoloader:

```
require_once '/path/to/your-project/vendor/autoload.php';
```

Usage example
-------------

[](#usage-example)

1. Create an API key in your [Piano Analytics account](https://analytics.piano.io/profile/#/apikeys).
2. Get the access key and secret key from the API key.
3. Find the site ID’s in [Piano Analytics access management](https://analytics.piano.io/access-management/#/sites). Select a site on the page and copy the id from the address bar.

```
require_once __DIR__.'/../vendor/autoload.php';

use \piano_analytics_api\filter;
use \piano_analytics_api\period;

$site_id = 0;
$access_key = '';
$secret_key = '';

// Create API connection
$at = new \piano_analytics_api\Client($access_key, $secret_key);

// Get page titles and number of visits for each page,
// where the page title is not empty and domain is example.com,
// ordered by the number of visits from high to low.
$request = new \piano_analytics_api\Request($at, [
    'sites' => [$site_id],
    'columns' => [
        'date',
        'article_id',
        'site_id',
        'domain',
        'platform',
        'device_type',
        'os_group',
        'm_unique_visitors',
        'm_visits',
        'm_page_loads'
    ],
    'period' => new period\Day(
        new \DateTime('2023-06-01'),
        new \DateTime('2023-06-10')
    ),
    'sort' => [
        '-m_page_loads'
    ],
    'property_filter' => new filter\ListAnd(
        new filter\IsEmpty(
            'article_id',
            false
        ),
        new filter\Contains(
            'domain',
            [
                'example.nl',
                'www.example.nl'
            ]
        )
    )
]);

// All results
foreach ( $request->get_result_rows() as $item ) {
    echo \json_encode($item)."\n";
}

// Number of results
var_dump($request->get_rowcount());

// Cumulative metrics for all resulting rows
echo \json_encode($request->get_total())."\n";
```

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance62

Regular maintenance activity

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~163 days

Recently: every ~214 days

Total

7

Last Release

480d ago

Major Versions

0.1.2-alpha → 1.0.02023-08-24

1.0.0 → 2.0.02024-10-31

PHP version history (2 changes)0.1.0PHP ^7.4

1.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/0ac13e43c1c6df09a557996cf442c5318728ab0f7c5da7db9e6cf26ae464c9ae?d=identicon)[remyglaser](/maintainers/remyglaser)

---

Top Contributors

[![remyglaser](https://avatars.githubusercontent.com/u/11977799?v=4)](https://github.com/remyglaser "remyglaser (20 commits)")

---

Tags

at internetpiano analytics

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/omroepgelderland-atinternet-php-api/health.svg)

```
[![Health](https://phpackages.com/badges/omroepgelderland-atinternet-php-api/health.svg)](https://phpackages.com/packages/omroepgelderland-atinternet-php-api)
```

###  Alternatives

[exsyst/swagger

A php library to manipulate Swagger specifications

35816.3M7](/packages/exsyst-swagger)[hubspot/api-client

Hubspot API client

24015.5M18](/packages/hubspot-api-client)[pocketmine/bedrock-protocol

An implementation of the Minecraft: Bedrock Edition protocol in PHP

172437.8k11](/packages/pocketmine-bedrock-protocol)[botman/driver-telegram

Telegram driver for BotMan

93452.6k6](/packages/botman-driver-telegram)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
