9
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?