revolution/laravel-google-photos

Laravel 的 Google Photos API

6.0.3 2024-09-23 02:12 UTC

README

Maintainability Test Coverage

https://developers.google.com/photos/

要求

  • PHP >= 8.2
  • Laravel >= 11.0

版本控制

  • 基本: semver
  • 删除旧的 PHP 或 Laravel 版本: +0.1. composer 应该能很好地处理。
  • 仅支持最新主要版本(master分支),但您可以向旧分支提交PR。

安装

composer require revolution/laravel-google-photos

获取 API 凭证

https://developers.google.com/console
启用 Photos Library API

config/google.php

    'client_id'        => env('GOOGLE_CLIENT_ID', ''),
    'client_secret'    => env('GOOGLE_CLIENT_SECRET', ''),
    'redirect_uri'     => env('GOOGLE_REDIRECT', ''),
    'scopes'           => [
        'https://www.googleapis.com/auth/photoslibrary.appendonly',
        'https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata',
        'https://www.googleapis.com/auth/photoslibrary.edit.appcreateddata',
    ],
    'access_type'      => 'offline',
    'approval_prompt'  => 'force',
    'prompt'           => 'consent', //"none", "consent", "select_account" default:none

目前,您只能通过 API 上传的文件。

'access_type' => 'offline' 是获取刷新令牌所必需的。

Google Photos API 不支持服务帐户。

config/service.php for Socialite

    'google' => [
        'client_id'     => env('GOOGLE_CLIENT_ID', ''),
        'client_secret' => env('GOOGLE_CLIENT_SECRET', ''),
        'redirect'      => env('GOOGLE_REDIRECT', ''),
    ],

.env

GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT=

使用示例

目前,Google Photos Library API 只允许访问 通过 API 上传的文件,因此难以自由使用。

与其他帐户一起使用需要审查。

仍然可以单向上传,因此最好仅使用 上传功能到您的帐户

  1. 在 Google 控制台中启用 Photos Library API 并添加自己作为测试用户。
  2. 通过 Socialite 获取 refresh_token。将其保存在用户表中。
  3. 上传照片。
// Command or etc

use App\Models\User;
use Illuminate\Support\Facades\Storage;
use Revolution\Google\Photos\Facades\Photos;

Photos::withToken(User::find(1)->refresh_token);

with(Photos::upload(Storage::get('test.png'), 'test.png'), function (string $token) {
    Photos::batchCreate([$token]);
});

PhotosLibraryClient

此包依赖于 google/photos-library 并自动委托给 PhotosLibraryClient 上的方法。

use Revolution\Google\Photos\Facades\Photos;

$album = Photos::withToken('token')->updateAlbumTitle($albumId, $newTitle);

PagedListResponse

listMediaItems()listAlbums() 返回一个 PagedListResponse,基本上用于 foreach。

use Revolution\Google\Photos\Facades\Photos;
use Google\ApiCore\PagedListResponse;

$items = Photos::withToken('token')->listMediaItems();

foreach ($items as $item){
    dump($item->getBaseUrl());
}

创建新相册

PhotosLibraryResourceFactory 有各种创建方法。

use Google\Photos\Library\V1\PhotosLibraryResourceFactory;
use Revolution\Google\Photos\Facades\Photos;

$newAlbum = Photos::withToken('token')->createAlbum(PhotosLibraryResourceFactory::album('title'));

dump($newAlbum->getId());
dump($newAlbum->getTitle());

许可证

MIT