LoginSignup
8
8

More than 5 years have passed since last update.

Pythonでグーグルカレンダーを取得してSQLServerに突っ込むメモ

Last updated at Posted at 2019-02-04

はじめに

なんかこう1年のまとめって年末にするのめんどくさいなぁ~って思ってグーグルカレンダーからしょっぴけばよくね?って思ったわけ。で、意外に簡単そうだなってのが第一印象だったんだけど、てっきり「俺のカレンダー」みたいな感じでパッと持ってこれると思ってたら「credentials」とかいう認証情報をダウンロードしてプログラムファイルと同じディレクトリに置いたりしないといけないらしい...。もしかしてAPIからのダウンロード、配置をユーザーにやらせるの??なんか大企業にはびこる クソメーラー Notesを彷彿とさせますね...。あっ、違うのかな、API使用責任者が僕(の認証情報)ってこと?さて、マイブームとしての英語能力強化期間なので、英語のAPIページを生で読んでいくぜ!

参考ページ

Step 1: Turn on the Google Calendar API

グーグルカレンダーのAPIを有効にしろ!
image.png

「DOWNLOAD CLIENT CONFIGURATION」を押してダウンロードされたらプログラムがあるディレクトリに置け
image.png

補足

Google APIの認証の種類

APIキーは、ユーザーデータにアクセスする必要がない場合
OAuth 2.0は、不特定多数のユーザーのデータにアクセスする必要がある場合
サービスアカウントは自身のアカウントや会社の顧客などにアクセスする場合

あー、サービスアカウントだったんだな。

Step 2: Install the Google Client Library

グーグルクライアントが使うライブラリをインストールしろ!

ライブラリのインストール
C:\Users\yoshi> pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Step 3: Set up the sample

PyUtils.py(ライブラリに日時変換が増えました!)
import datetime

# 2019-02-06T06:00:00+09:00 > 2019/02/06 06:00:00
def ConvertIso2YMDHMS(v):
    return(datetime.datetime.fromisoformat(v).strftime("%Y/%m/%d %H:%M:%S"))

Step 4: Run the sample

実行
> python main.py

・自動的に認証画面が出てくる
あっそういうことね。勝手に出てきた。:astonished:
image.png

・このウィンドウは閉じていいぞ
image.png

・ファイルが生成された
image.png

・もういっちょ実行
おー、でてきたやんけ。給料日近いやん!:relaxed:

GoogleのサンプルのままやるとへんなT(タイムゾーン情報)がくっついてくる
> python main.py
  Getting the upcoming 10 events
  2019-02-05T21:00:00+09:00 7印刷)さくらのVPS請求書
  2019-02-06T06:00:00+09:00 燃えないゴミ
  2019-02-06T19:00:00+09:00 フロントエンドもくもく会 #22
  2019-02-07T17:00:00+09:00 スピードラーニング・本気コースイングリッシュチェック
  2019-02-10 給料日
  2019-02-10T10:00:00+09:00 NISA引き落とし 33,000
  2019-02-10T21:00:00+09:00 【57,073 支払】クレジットカード
  2019-02-11T21:00:00+09:00 board請求書
  2019-02-14T21:00:00+09:00 Meetup領収書発行される
  2019-02-17T21:00:00+09:00 freee請求書発行される

今回一番手こずったのが日時のフォーマット(SQLServerにInsertできない)
「2019-02-06T06:00:00+09:00」から「2019/02/06 06:00:00」に変える必要があった

日時変換を適用したあとはSQLServerにInsertできた!
> python main.py
  2019-02-05 20:00,python公式doc 「isoformat 語尾z いらない」にヒントありそう。yyyy-MM-ddTHH:mm:ssZ。zへらして、セパレート に空白指定すれば終わる??https://docs.python.jp/3/library/datetime.html
  2019-02-06 06:00,燃えないゴミ
  2019-02-06 06:30,粉コーヒー買って
  2019-02-06 19:00,フロントエンドもくもく会 #22
  2019-02-07 17:00,スピードラーニング・本気コースイングリッシュチェック
  2019-02-10 00:00,給料日
  2019-02-10 10:00,NISA引き落とし 33,000
  2019-02-10 21:00,【57,073 支払】クレジットカード
  2019-02-11 21:00,board請求書
  2019-02-14 21:00,Meetup領収書発行される

トラブルシューティング

APIからダウンロードした「credentials.json」と自動生成される「token.pickle」をそれぞれ「credentials」「token」フォルダにしまって整理しようとしたらうまく実行できなくなったから、なにがなんでも main.py のとこに置かないといけないみたい。

8
8
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
8
8