Google Drive APIの設定
APIキー、OAuth、サービスアカウントなどの接続方法がありますが、本記事ではサービスアカウントを使用して接続します。
DriveAPI使用許可設定
1. ログインし、以下よりGoogle APIsのページに移動してGoogle Drive APIを検索
https://console.developers.google.com/apis/library
2. Google Drive APIを押下し、有効化する
認証ファイル作成
以下のページに移動する
https://console.developers.google.com/apis/dashboard
1. 新しいプロジェクトを作成
2. プロジェクト名「任意のプロジェクト名」
3. 作成後、「認証情報」ページに移動し、サービスアカウントの「サービスアカウントの管理」リンクをクリック
4. ヘッダより「サービスアカウントを作成」
名前:任意の名前
説明:省略可能
メール:任意のサービスアカウント名@〜
5. 次にキーを作成する「鍵を追加」→「新しい鍵を追加」
6. 「JSON」を選択し、保存ボタンを押す
7. 生成された鍵を保存する
Googleドライブの設定
フォルダを作成
サービスアカウントを共同編集者に追加
先ほど作成したサービスアカウントがGoogleドライブ内のフォルダにアクセスできるよう、「共有」を選択してサービスアカウントのメールアドレスを追加します。
google-api-php-clientをインストール
1 |
composer require google/apiclient:^2.0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
Info from https://repo.packagist.org: #StandWithUkraine ./composer.json has been updated Running composer update google/apiclient Loading composer repositories with package information Updating dependencies Lock file operations: 8 installs, 0 updates, 1 removal - Removing jonnyw/php-phantomjs (v2.0.1) - Locking firebase/php-jwt (v6.8.1) - Locking google/apiclient (v2.14.0) - Locking google/apiclient-services (v0.310.0) - Locking google/auth (v1.26.0) - Locking paragonie/constant_time_encoding (v2.6.3) - Locking paragonie/random_compat (v9.99.100) - Locking phpseclib/phpseclib (3.0.21) - Locking psr/cache (3.0.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 8 installs, 0 updates, 1 removal - Downloading paragonie/random_compat (v9.99.100) - Downloading paragonie/constant_time_encoding (v2.6.3) - Downloading phpseclib/phpseclib (3.0.21) - Downloading psr/cache (3.0.0) - Downloading firebase/php-jwt (v6.8.1) - Downloading google/auth (v1.26.0) - Downloading google/apiclient-services (v0.310.0) - Downloading google/apiclient (v2.14.0) - Removing jonnyw/php-phantomjs (v2.0.1) - Installing paragonie/random_compat (v9.99.100): Extracting archive - Installing paragonie/constant_time_encoding (v2.6.3): Extracting archive - Installing phpseclib/phpseclib (3.0.21): Extracting archive - Installing psr/cache (3.0.0): Extracting archive - Installing firebase/php-jwt (v6.8.1): Extracting archive - Installing google/auth (v1.26.0): Extracting archive - Installing google/apiclient-services (v0.310.0): Extracting archive - Installing google/apiclient (v2.14.0): Extracting archive 5 package suggestions were added by new dependencies, use `composer suggest` to see details. Package fabpot/goutte is abandoned, you should avoid using it. Use symfony/browser-kit instead. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi INFO Discovering packages. barryvdh/laravel-dompdf ........................................................................................................ DONE inertiajs/inertia-laravel ...................................................................................................... DONE kyslik/column-sortable ......................................................................................................... DONE laravel/sail ................................................................................................................... DONE laravel/sanctum ................................................................................................................ DONE laravel/tinker ................................................................................................................. DONE maatwebsite/excel .............................................................................................................. DONE milon/barcode .................................................................................................................. DONE nesbot/carbon .................................................................................................................. DONE nunomaduro/collision ........................................................................................................... DONE nunomaduro/termwind ............................................................................................................ DONE spatie/laravel-ignition ........................................................................................................ DONE tightenco/ziggy ................................................................................................................ DONE 96 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan vendor:publish --tag=laravel-assets --ansi --force INFO No publishable resources for tag [laravel-assets]. Found 1 security vulnerability advisory affecting 1 package. Run composer audit for a full list of advisories. |
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$client = new \Google_Client(); // サービスアカウント作成時にダウンロードしたJSONファイルの名前を「client_secret」変更し、configフォルダ内に設置 $client->setAuthConfig(config_path('client_secret.json')); $client->setScopes(['https://www.googleapis.com/auth/drive']); $fileMetadata = new \Google_Service_Drive_DriveFile([ 'name' => 'sample.txt', // Googleドライブへアップロードされた際のファイル名 'parents' => ['xxxxxxxxxxxxxxxxxx'], // 保存先のフォルダID ]); $driveClient->files->create($fileMetadata, [ 'data' => file_get_contents(storage_path('app/public/sample.txt')), // アップロード対象となるファイルのパス 'mimeType' => ' text/plain', 'uploadType' => 'media', 'fields' => 'id', ]); |
Googleドライブ内に「sample.txt」がアップロードされていれば成功です。
参考サイト
Google Drive APIを利用するための設定方法などは、下記の記事を参考にさせていただきました。
これらの記事については、とても丁寧にまとめられていますので、ぜひ、参考にしてみて下さい。
Google Drive APIの設定まとめ
https://qiita.com/hosomin/items/6884fa40c2ba0048c10e
【PHP】Laravelを使ってGoogleドライブにファイルをアップロードしてみる
https://qiita.com/kazama1209/items/94db0ff9d10df249bf14