Extracts
Read from various data sources.
Transforms
Shape and optimize for your needs.
Loads
Store and secure in one of many available data sinks.
Examples:
composer.json
{
"name": "flow-php/examples",
"description": "Flow PHP - Examples",
"license": "MIT",
"type": "library",
"require": {
"flow-php/etl": "1.x-dev",
"flow-php/etl-adapter-http": "1.x-dev",
"nyholm/psr7": "^1.8",
"php-http/curl-client": "^2.3"
},
"config": {
"allow-plugins": {
"php-http/discovery": false
}
}
}
code.php
<?php
declare(strict_types=1);
use function Flow\ETL\DSL\{data_frame, ref, to_stream};
use Flow\ETL\Adapter\Http\DynamicExtractor\NextRequestFactory;
use Flow\ETL\Adapter\Http\PsrHttpClientDynamicExtractor;
use Http\Client\Curl\Client;
use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Http\Message;
require __DIR__ . '/vendor/autoload.php';
$factory = new Psr17Factory();
$client = new Client($factory, $factory);
$from_github_api = new PsrHttpClientDynamicExtractor($client, new class implements NextRequestFactory {
public function create(?Message\ResponseInterface $previousResponse = null) : ?Message\RequestInterface
{
$factory = new Psr17Factory();
if ($previousResponse === null) {
return $factory
->createRequest('GET', 'https://api.github.com/orgs/flow-php')
->withHeader('Accept', 'application/vnd.github.v3+json')
->withHeader('User-Agent', 'flow-php/etl');
}
return null;
}
});
data_frame()
->read($from_github_api)
->withEntry('unpacked', ref('response_body')->jsonDecode())
->withEntry('unpacked', ref('unpacked')->unpack())
->renameAll('unpacked.', '')
->drop('unpacked')
->select('name', 'html_url', 'blog', 'login', 'public_repos', 'followers', 'created_at')
->write(to_stream(__DIR__ . '/output.txt', truncate: false))
->run();
Output
+----------+-----------------------------+---------------------+----------+--------------+-----------+----------------------+
| name | html_url | blog | login | public_repos | followers | created_at |
+----------+-----------------------------+---------------------+----------+--------------+-----------+----------------------+
| Flow PHP | https://github.com/flow-php | http://flow-php.com | flow-php | 38 | 111 | 2020-10-26T18:40:27Z |
+----------+-----------------------------+---------------------+----------+--------------+-----------+----------------------+
1 rows