はじめに
前回、Google Finance APIの代替となるAPIを紹介したが、新しい選択肢を見つけたので紹介する。実はGoogle Spread SheetsではGoogle Finance関数が提供されており、スプリッドシート上では為替情報の取得が可能である。
そのため、Google Spread SheetsのGoogle Finance関数+Google Sheets APIを使用してAWS Lambda(Python)で利用する手順をまとめる。ただし、今回はGoogle Spread SheetをPythonで操作するところまでをゴールとする。
Google Finance関数とは
Google Spread Sheets上で使用できる関数である。この関数を利用することで株や為替の情報を得ることができる。ただし、最大20分の更新遅延があることに注意が必要である。
Google drive APIおよびGoogle Sheets APIの有効化
まず、GCPにアクセスし、新規プロジェクトを立ち上げる。
「プロジェクトの選択」から「新しいプロジェクト」を選択し、「作成」を押下する。
作成したプロジェクトを選択したのち、以下のように「Google Drive API」と「Google Sheets API」を有効にする。
APIアクセスのために秘密鍵を生成する
APIアクセス用のキーを生成する。APIとサービス画面の「認証情報」タブの「認証情報の作成」から「サービスアカウントを選択」を選択する。
「サービスアカウント名」と「ロール」をそれぞれ決め、アカウントを作成する。今回はシートの更新をPythonに行わせたいので「編集者」ロールを選択した。
その後、先ほどの「認証情報」画面から作成したアカウントをクリックし、「鍵の追加」から新しい鍵を作成する。
これにより、jsonファイルがダウンロードされたはずである。中にはキー情報などが記載されている。
スプレッドシートを作成する
Google Driveにて新しいスプレッドシートを作成する。
C列にはGOOGLEFINANCE関数を使用している。引数はB列に記載した通貨ペアである。
その後、下記のような「共有」ボタンを押下する。
そこで、上記でダウンロードしたjsonファイルの「client_email」に記載されているメールアドレスのアカウントを追加する。
また、上記「共有」ボタンから「リンクを取得」を押下して、リンクをコピーしてメモしておく。
Pythonライブラリのインストール
新規ライブラリとして「gspread」と「oauth2client」が必要となる。そのため下記の通りインストールする。
$ pip install gspread
$ pip install oauth2client
Pythonのサンプルコード
スプレッドシートにアクセスし、B1セルの値を出力するサンプルコードである。
import gspread
import json
from oauth2client.service_account import ServiceAccountCredentials
ACCESS_KEY_JSON = "XXXXXXXXXXXXXXX"
SPREAD_SHEET_KEY = "XXXXXXXXXXXXXXXX"
credentials = ServiceAccountCredentials.from_json_keyfile_name(ACCESS_KEY_JSON, ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'])
worksheet = gspread.authorize(credentials).open_by_key(SPREAD_SHEET_KEY).sheet1
print(worksheet.acell('B1').value)
このうち、以下を書き換えが必要である。
ACCESS_KEY_JSON | APIの認証情報作成時にダウンロードしたjsonファイル |
SPREAD_SHEET_KEY | 上記でメモしたスプレッドシートのURLのうち、下記赤字部分の値 https://docs.google.com/spreadsheets/d/XXX/edit?usp=sharing |
おわりに
今回はPythonからスプレッドシートへのアクセスまでを行った。次回はこれを用いて「AWSLambdaでLine通知を実装する」で作成したコードを書き直したサンプルコードをアップする。
追記(2021/2/5)
本記事のPythonからスプレッドシートを利用する方法を踏まえて、AWS LambdaでLine通知するサンプルコードを挙げました。