Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/docs.php
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ public function execute(InputInterface $input, OutputInterface $output) : int
__DIR__ . '/../src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-doctrine/src/Flow/ETL/Adapter/Doctrine/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/DSL/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-json/src/Flow/ETL/Adapter/JSON/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php',
__DIR__ . '/../src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php',
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -139,7 +139,7 @@
"src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php",
"src/adapter/etl-adapter-doctrine/src/Flow/ETL/Adapter/Doctrine/functions.php",
"src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/functions.php",
"src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/functions.php",
"src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/DSL/functions.php",
"src/adapter/etl-adapter-json/src/Flow/ETL/Adapter/JSON/functions.php",
"src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php",
"src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php",
@@ -208,6 +208,7 @@
},
"extra": {
"google/apiclient-services": [
"Drive",
"Sheets"
]
},
60 changes: 53 additions & 7 deletions documentation/components/adapters/google-sheet.md
Original file line number Diff line number Diff line change
@@ -27,23 +27,69 @@ composer require flow-php/etl-adapter-google-sheet:~--FLOW_PHP_VERSION--
```php
<?php

use function Flow\ETL\Adapter\GoogleSheet\{from_google_sheet};
use Flow\ETL\Adapter\GoogleSheet\GoogleSheetRange;
use Flow\ETL\DSL\GoogleSheet;
use Flow\ETL\Flow;

$rows = (new Flow())
->read(GoogleSheet::from($auth_config, $spreadsheet_document_id, $sheet_name)))
->read(from_google_sheet($auth_config, $spreadsheet_document_id, $sheet_name)))
->fetch();
```

## Needed parameters
## Required parameters

- `$auth_config`

- Create project: [console.cloud.google.com](https://console.cloud.google.com/projectcreate) choosing the right organization.
- Enable google sheet API for created project on [api sheets.googleapis.com](https://console.cloud.google.com/apis/library/sheets.googleapis.com)
- To work with google sheet enable it on [serviceaccounts](https://console.cloud.google.com/iam-admin/serviceaccounts/create) this will generate email for example `serviceaccounts@project.iam.gserviceaccount.com`
- Generate json (auth config) for created serviceaccounts on `Keys` tab.
- Create a project: [console.cloud.google.com](https://console.cloud.google.com/projectcreate) choosing the right organization,
- Enable Google Sheet API for a created project on [API sheets.googleapis.com](https://console.cloud.google.com/apis/library/sheets.googleapis.com),
- To work with Google Sheet enable it on a [serviceaccounts](https://console.cloud.google.com/iam-admin/serviceaccounts/create) this will generate email for example `serviceaccounts@project.iam.gserviceaccount.com`,
- Generate JSON (auth config), for created "serviceaccounts" on `Keys` tab.

- `$spreadsheet_document_id` ID needs to be readded from the document we want to use, example URL `https://docs.google.com/spreadsheets/d/xyzID-for-documentxyz/edit` ID is `xyzID-for-documentxyz`
- `$sheet_name` - Name of sheet from document you want to read.
- `$sheet_name` - Name of the sheet from the document you want to read.

## Loader

```php
<?php

use function Flow\ETL\Adapter\GoogleSheet\{google_create_spreadsheet,
google_sheets,
to_google_sheet};
use function Flow\ETL\DSL\{config, flow_context};
use Flow\ETL\Flow;
use Flow\ETL\Row;
use Flow\ETL\Rows;
use Google\Service\Sheets;

// Create a Google spreadsheet
$service = google_sheets(
$auth_config,
// Scope required to creating & updating spreadsheets
Sheets::SPREADSHEETS
);

$sheetName = 'Flow test sheet';
$spreadsheet = google_create_spreadsheet(
$service,
'Flow test spreadsheet',
$sheetName,
'random@gmail.com'
);

(new Flow())
->process(
new Rows(
...\array_map(
fn (int $i) : Row => Row::create(
new Row\Entry\IntegerEntry('id', $i),
new Row\Entry\StringEntry('name', 'name_' . $i)
),
\range(0, 10)
)
)
)
->write(to_google_sheet($service, $spreadsheet->spreadsheetId, $sheetName))
->run();
```
4 changes: 4 additions & 0 deletions documentation/upgrading.md
Original file line number Diff line number Diff line change
@@ -58,6 +58,10 @@ Selected transformers were deprecated in favor of using `DataFrame::renameEach()
- `RenameAllCaseTransformer` -> `RenameCaseTransformer`,
- `RenameStrReplaceAllEntriesTransformer` -> `RenameReplaceStrategy`,

### 3) Moved `src/Flow/ETL/Adapter/GoogleSheet/functions.php` file

The file was moved to subfolder and now is located at: `src/Flow/ETL/Adapter/GoogleSheet/DSL/functions.php`

---

## Upgrading from 0.14.x to 0.15.x
3 changes: 3 additions & 0 deletions examples/topics/data_reading/google_sheet/.env.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GOOGLE_SPREADSHEET_NAME='Flow test spreadsheet'
GOOGLE_SHEET_NAME='Flow test sheet'
GOOGLE_SHEET_EMAIL='random@gmail.com'
3 changes: 3 additions & 0 deletions examples/topics/data_reading/google_sheet/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.env
auth.json
vendor
11 changes: 11 additions & 0 deletions examples/topics/data_reading/google_sheet/auth.json.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"type": "service_account",
"project_id": "flow-test",
"client_email": "flow-test@flow-test.iam.gserviceaccount.com",
"client_id": "1234567890",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/flow-test%flow-test.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
54 changes: 54 additions & 0 deletions examples/topics/data_reading/google_sheet/code.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

declare(strict_types=1);

use function Flow\ETL\Adapter\GoogleSheet\{from_google_sheet, google_create_spreadsheet, google_sheets, to_google_sheet};
use function Flow\ETL\DSL\{data_frame, from_array, to_stream};
use Google\Service\Sheets;
use Symfony\Component\Dotenv\Dotenv;

require __DIR__ . '/vendor/autoload.php';

if (!\file_exists(__DIR__ . '/auth.json')) {
print 'Example skipped. Please create .env file with Google Auth credentials.' . PHP_EOL;

return;
}

if (!\file_exists(__DIR__ . '/.env')) {
print 'Example skipped. Please create .env file with Google Sheet details.' . PHP_EOL;

return;
}

$dotenv = new Dotenv();
$dotenv->load(__DIR__ . '/.env');

$service = google_sheets(
\json_decode((string) \file_get_contents(__DIR__ . '/auth.json'), true, 512, JSON_THROW_ON_ERROR),
Sheets::SPREADSHEETS
);

$spreadsheet = google_create_spreadsheet(
$service,
$_ENV['GOOGLE_SPREADSHEET_NAME'],
$sheetName = $_ENV['GOOGLE_SHEET_EMAIL'],
$_ENV['GOOGLE_SHEET_EMAIL']
);

data_frame()
->read(from_array([
['id' => 1, 'text' => 'lorem ipsum'],
['id' => 2, 'text' => 'lorem ipsum'],
['id' => 3, 'text' => 'lorem ipsum'],
['id' => 4, 'text' => 'lorem ipsum'],
['id' => 5, 'text' => 'lorem ipsum'],
['id' => 6, 'text' => 'lorem ipsum'],
]))
->write(to_google_sheet($service, $spreadsheet->spreadsheetId, $sheetName))
->run();

data_frame()
->read(from_google_sheet($service, $spreadsheet->spreadsheetId, $sheetName))
->write(to_stream(__DIR__ . '/output.txt', truncate: false))
->run();
23 changes: 23 additions & 0 deletions examples/topics/data_reading/google_sheet/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "flow-php/examples",
"description": "Flow PHP - Examples",
"license": "MIT",
"type": "library",
"require": {
"flow-php/etl": "1.x-dev",
"flow-php/etl-adapter-google-sheet": "1.x-dev",
"symfony/dotenv": "^7.2"
},
"config": {
"allow-plugins": {
"php-http/discovery": false
}
},
"archive": {
"exclude": [
".env",
"auth.json.dist",
"vendor"
]
}
}
Loading