LoginSignup
9
13

More than 5 years have passed since last update.

Google Calendar APIで祝日を取得する

Last updated at Posted at 2018-11-04

記事の概要

  • MavenでGoogle Calendar APIを利用して祝日を取得する方法
  • 公式のサンプルコードをいじれば使える
  • トークンは定期的にリセット

背景

Google Calendar APIは有名なので利用方法はすぐに見つかるが、PHPやPythonばかりで少し手こずったので自分と同じような人のために書く。

目的

公式に載っているサンプルコードをMaven向けに書き換えて祝日を取得する。その内容を新卒半年の情弱エンジニアがわかりやすく書く。

手順

1. Mavenのプロジェクトを作成する(このあたりを参考)

  • プロジェクト内にsrcフォルダとpom.xmlができるはず
$ mvn archetype:generate \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false \
  -DgroupId={com.ikeponias} \
  -DartifactId={google-calendar-sample}

2. Credentialファイルをダウンロード

  1. "ENABLE GOOGLE CALENDAR API"をクリック

スクリーンショット_2018-11-04_14_09_17.png
2. "Select or create project"をクリック
スクリーンショット_2018-11-04_14_09_54.png
3. すでに存在するプロジェクトを選択するか"Create a new project"を選択してプロジェクト名を入力
4. "DOWNLOAD CLIENT CONFIGURATION"をクリック

スクリーンショット_2018-11-04_14_09_39.png
5. ダウンロードしたjsonファイルをプロジェクト内のsrc/main/resourcesフォルダ内に配置(おそらくresourcesフォルダは存在しないので新規作成)
6. 配置したjsonファイルをcredentials.jsonという名前にリネーム

3. ソースをコピー

  1. src/main内のApp.javaファイルをCalendarQuickstart.javaへリネーム
  2. CalendarQuickstart.java公式サンプルCalendarQuickstart.javaの中身を丸コピ

4. ソースファイルを編集

  1. src/main/CalendarQuickstart.javaの先頭行にパッケージ名を追加(フォルダ階層変更の有無にもよるが、基本的に最初に生成した際のgroupId。自分はpackage com.ikeponias;と追加)
  2. src/main/CalendarQuickstart.javamainメソッド内のservice.events().list()に渡す引数をprimaryからjapanese__ja@holiday.calendar.google.comにする(あくまでカレンダーのイベントを取得するAPIなのでこれやらないと自分のイベントが出てくる、参考)

スクリーンショット_2018-11-04_14_30_55.png

5. pom.xmlを編集

  1. 以下のdependencyを追加
  • google-api-client
  • google-oauth-client-jetty
  • google-api-services-calendar
  1. pluginexec-maven-pluginを追加
  • コマンドラインからmain関数を呼び出すため
  • goaljavaを指定
  • mainClassにはCalendarQuickstart.javaの場所を指定(自分の場合はcom.ikeponias.CalendarQuickstart

以下自分の例(junitはプロジェクト生成時に書かれている)

  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client -->
    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.26.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client-jetty</artifactId>
      <version>1.26.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-calendar -->
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-calendar</artifactId>
      <version>v3-rev355-1.25.0</version>
    </dependency>

    <!-- プロジェクト生成時にすでに存在するはず -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/exec-maven-plugin -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>com.ikeponias.CalendarQuickstart</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>

6. 実行する

  1. ターミナルでmvn clean installを実行
  2. mvn exec:javaを実行
  3. 実行日以降の祝日の一覧が10件出力される(詳しくはソースや公式ドキュメントを読むこと)

スクリーンショット 2018-11-04 14.53.17.png
4. 以降ソースの変更を反映する場合はmvn compileを行ってからmvn exec:javaを実行

ハマった点

以下自分がハマった点を書く

401 Unauthorized Errorがでる

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized

理由

トークンの有効期限が切れているため

対策

tokensフォルダを削除して再実行(実行時にtokensフォルダを削除する処理を入れておくと良いかも)

No upcoming events found.でイベントが見つからない

理由

src/main/CalendarQuickstart.javamainメソッド内のservice.events().list()に渡す引数がprimaryになっている

対策

primaryjapanese__ja@holiday.calendar.google.comにする

9
13
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
9
13