Google Spread Sheetsで為替情報を取得し、Pythonで使用する

はじめに

前回、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_JSONAPIの認証情報作成時にダウンロードした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通知するサンプルコードを挙げました。

Spread the love