0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-04-14

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

Google Slides APIとは
Googleが提供しているAPIで、Googleスライドに関する操作ができます。

Google Slides APIの利用料金は無料です。
ただし下記の利用制限があります。

リクエスト 単位 1分単位の上限
読み取りリクエスト プロジェクト単位 3000回/分
ユーザー単位 600回/分
書き込みリクエスト プロジェクト単位 600回/分
ユーザー単位 60回/分
サムネイル取得リクエスト プロジェクト単位 300回/分
ユーザー単位 60回/分

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

No 目次
1 Google Slides APIを使用するための準備
1 プロジェクトの作成
2 Google Slides APIの設定
3 APIを使用するためのキー取得
2 Google Slides APIを使ってみる
1 googleライブラリの読み込み
2 Slidesインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 v1.presentations
2 v1.presentations.pages

1. Google Slides APIを使用するための準備

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

やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Google Slides APIの有効化
3.プログラムで使用するJSONファイルのダウンロード

最後の3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。
利用する方法によりアクセスできるGoogleスライドが異なります。
・サービスアカウント
 サービスアカウントと、 そのサービスアカウントに共有されたタスク
・OAuth2.0
 同意したユーザー と、 そのユーザーに共有されたタスク
用途に応じてどちらかを選択してください。

1.1. プロジェクトの作成

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

1.2. Google Slides APIの設定

Google Slides APIを使えるようにします。

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

1.3. APIを使用するためのキー取得

プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。

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

2. Google Slides APIを使ってみる

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

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

<dependencies>
    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-slides</artifactId>
        <version>v1-rev20240305-2.0.0</version>
    </dependency>
    <!-- OAuth2.0で認証を行う場合のみ使用します -->
    <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. Slidesインスタンスを取得

2.2.1. サービスアカウントを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。

private static Slides getSlides() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(InputStream input = new FileInputStream("JSONファイルのパス")){
        GoogleCredentials credentials = GoogleCredentials
                .fromStream(input)
                .createScoped(Arrays.asList("スコープ"));
        
        return new Slides.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
    }
}

2.2.2. OAuth 2.0 クライアントIDを利用する場合

コード中の「JSONファイルのパス」は、

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

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

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

private static Slides getSlides() 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");
        
        return new Slides.Builder(transport, jsonFactory, credential).build();
    }
}

2.3. プログラムの実行

プログラムを動かします。
サンプルではプレゼンテーションの情報を取得しています。

public static void main(String[] args) throws Exception{
    Slides slides = getSlides();
    Slides.Presentations presentations = slides.presentations();
    Slides.Presentations.Get get = presentations.get("プレゼンテーションID");
    
    Presentation res = get.execute();
    System.out.println(res);
}

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

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

3.1. v1.presentations

メソッド 概要 記事
batchUpdate プレゼンテーションを更新 ⧉[Google Slides API(V1)] Javaでプレゼンテーションを作成・更新・削除する
create 空白のプレゼンテーションを作成 ⧉[Google Slides API(V1)] Javaでプレゼンテーションを作成・更新・削除する
get プレゼンテーションの情報を取得 ⧉[Google Slides API(V1)] Javaでプレゼンテーションの情報を取得する

3.2. v1.presentations.pages

メソッド 概要 記事
get プレゼンテーション内のページを取得 ⧉[Google Slides API(V1)] Javaでプレゼンテーション内のページ情報を取得する
getThumbnail プレゼンテーション内のページのサムネイル画像を取得 ⧉[Google Slides API(V1)] Javaでプレゼンテーション内のページのサムネイル画像を取得する


おしまい。。
0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?