LoginSignup
1
1

[Google Photos Library API(V1)] JavaでPhotos Library APIを使う

Last updated at Posted at 2024-04-16

Googleが提供しているPhotos Library APIをJavaで使ってみました。

Photos Library APIとは
Googleが提供しているAPIで、Googleフォトに関する操作ができます。

Google Photos Library APIの利用料金は無料です。
ただし、1日あたりのリクエスト数の上限があります。

対象 制限
通常のリクエスト 10,000 リクエスト/日
メディアバイトにアクセスするリクエスト 75,000 リクエスト/日

詳細は公式ドキュメントを参照ください。

APIを使う上で気をつけて欲しいのですが、
基本的に「Photos Library API」を使っての設定や更新の処理は、
同じGCP認証のAPIで実行して作成したアルバムやメディアアイテム(写真や動画)
に対してのみになります。
(なお、Googleフォト上の情報を取得する場合はその限りではありません。)

スマホで撮影した写真や動画をAPIを使っていろいろ整理しようと試みましたが、
このようなAPIの性質のせいで思ったようなことができませんでした。
情報の取得はできますが、exif情報(撮影日は無し)も一部しか取れないようです。

No 目次
1 Photos Library APIを使用するための準備
1 プロジェクトの作成
2 Photos Library APIの設定
3 OAuth2.0のクライアントIDを取得
2 Photos Library APIを使ってみる
1 googleライブラリの読み込み
2 PhotosLibraryClientインスタンスを取得
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 v1.albums
2 v1.mediaItems
3 v1.sharedAlbums

1. Photos Library APIを使用するための準備

設定は下記から行います。
⧉Google クラウド プラットフォーム

やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Photos Library APIの有効化
3.OAuth2.0のクライアントIDを取得

Photos Library APIはOAuthクライアントの使用のみサポートされています。

1.1. プロジェクトの作成

まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)

1.2. Photos Library APIの設定

Photos Library APIを使えるようにします。

1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2. photos と入力して「Photos Library API」を検索します。
3. 「有効にする」ボタンを押して「Photos Library API」を使用可能にします。

1.3. OAuth2.0のクライアントIDを取得

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う

2. Photos Library APIを使ってみる

2.1. googleライブラリの読み込み

Photos Library APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。

<dependencies>
    <dependency>
        <groupId>com.google.photos.library</groupId>
        <artifactId>google-photos-library-client</artifactId>
        <version>1.7.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.oauth-client</groupId>
        <artifactId>google-oauth-client-jetty</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>26.34.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2. PhotosLibraryClientインスタンスを取得

コード中の「JSONファイルのパス」は、
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2.1 認証情報の作成)
で取得したJSONファイルのパスを指定してください。

コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。

private static PhotosLibraryClient getPhotosLibraryClient() throws Exception{
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);
        
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                transport, jsonFactory, clientSecrets, 
                Arrays.asList("スコープ"))
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
            .build();
        
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        UserCredentials credentials = UserCredentials.newBuilder()
                .setClientId(clientSecrets.getDetails().getClientId())
                .setClientSecret(clientSecrets.getDetails().getClientSecret())
                .setRefreshToken(credential.getRefreshToken())
                .build();

        PhotosLibrarySettings settings = PhotosLibrarySettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credentials)) 
                .build();
        return PhotosLibraryClient.initialize(settings);
    }
}

2.3. プログラムの実行

プログラムを動かします。
サンプルでは、ユーザーのGoogleフォトライブラリから
すべてのメディアアイテムの一覧を表示しています。

public static void main(String[] args) throws Exception{
    try(PhotosLibraryClient client = getPhotosLibraryClient()){
          ListMediaItemsPagedResponse response = client.listMediaItems();
          for (MediaItem item : response.iterateAll()) {
            System.out.println(item);
          }
    }
}

3. いろいろとAPIを叩いてみる

いろいろなAPIを叩いてみます。

3.1. v1.albums

メソッド 概要 記事
addEnrichment 指定したアルバムにエンリッチメントを追加 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムにエンリッチメントを追加する
batchAddMediaItems 指定したアルバムにメディアアイテム(写真や動画)を追加 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムにメディアアイテム(写真や動画)を追加する
batchRemoveMediaItems 指定したアルバム内のメディアアイテム(写真や動画)を削除 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバム内のメディアアイテム(写真や動画)を削除する
create アルバムを作成 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを作成・更新する
get 指定したアルバムの情報を取得 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを取得する
list アルバム一覧を取得 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを取得する
patch 指定したアルバムを更新 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを作成・更新する
share 指定したアルバムを共有 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを共有・共有解除する
unshare 指定したアルバムの共有を解除 ⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを共有・共有解除する

3.2. v1.mediaItems

メソッド 概要 記事
batchCreate メディアアイテム(写真や動画)を作成 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を追加・更新する
batchGet 指定した複数のメディアアイテム(写真や動画)の情報を取得 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を取得する
get 指定したメディアアイテム(写真や動画)の情報を取得 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を取得する
list メディアアイテム(写真や動画)の一覧を取得 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を取得する
patch メディアアイテム(写真や動画)を更新 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を追加・更新する
search メディアアイテム(写真や動画)を検索 ⧉[Google Photos Library API] JavaでGoogleフォトのメディアアイテム(写真や動画)を検索する

3.3. v1.sharedAlbums

メソッド 概要 記事
get 指定した共有トークンの共有アルバムを取得 ⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムを取得する
join 指定した共有アルバムに参加 ⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムに参加・退出する
leave 指定した共有アルバムから退出 ⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムに参加・退出する
list 共有アルバム一覧を取得 ⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムを取得する


おしまい。。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1