やること
- Googleのスプレットシートからデータを読み取る
- Googleのスプレットシートにデータを書き出す
前提
以前作成した下記の環境からスタート
インストール
flaskの下に2つ追加
gspread
oauth2client
pip install -r requirements.txt
を実行
下準備
-
GCP
APIとサービス
→認証情報
→ 認証情報を作成
→ サービスアカウント
→ 名前をつけて、続行
→ ロール「編集者」
→ 完了
→ 再度、作ったサービスアカウントをクリック
→ キーから鍵を追加
→ JSONで作成 -
VSCode
ダウンロードされたJSONをcredential.jsonとしてVSCodeに保管 -
SpreadSheet
credential.jsonの中に入っているclient_emailをspreadsheetの共有で追加する
読み取りコード
spreadsheet.pyを新たに作成
import gspread
from oauth2client.service_account import ServiceAccountCredentials
def get():
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
credentials = ServiceAccountCredentials.from_json_keyfile_name("./credential.json",scope)
client = gspread.authorize(credentials)
sheet = client.open_by_key("スプレットシートのID").sheet1
list = sheet.get_all_records()
print(list)
※スプレットシートのID = URLにあるxxxxxxxxxxの部分spreadsheets/d/xxxxxxxxxx
最後の行をprintにしているので、python3 app.py
を実行してデータを取得できているか確認
大丈夫そうであれば、printをreturn
に変更する
app.py
from flask import Flask
import spreadsheet
app = Flask(__name__)
@app.route("/")
def test():
spread = spreadsheet.get()
print(spread)
return "Hello World!"
if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port= 8080)
appの中でspreadsheetを実行することで関数をまとめる
追加記事:書き込みコード
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
credentials = ServiceAccountCredentials.from_json_keyfile_name("./credential.json",scope)
client = gspread.authorize(credentials)
sheet = client.open_by_key("スプレットシートのID").sheet1
※読み取りと同じ上記が必要
1セルずつ更新
for i , value in enumerate(values):
sheet.update_cell(i+1, 1, value)
- for文で回して1つのセルに対して更新
- update_cell(行数, 列数, 値)
- enumerate()を使用して要素とインデックスを同時に取得 → iが使えるようになる!
範囲指定して一気に更新
data = [[1,2,3],[4,5,6],[7,8,9]]
sheet.update('A1:C3', data)
- 3行3列一気に更新
- sheet.update(範囲 , 値)
- 更新するデータは二重配列
最後に
- ターミナルで
python3 app.py
を実行 - 別のターミナルで
curl http://localhost:8080
を実行
→ 別のターミナル側でHello World!
が表示され、ターミナル側でデータ
が表示されればOK!!
書き込みも追加して更新しました!
書き込む方法は様々あるので、データ量なども加味して決めていければ良いかなと思います。
参考文献が非常に分かりやすかったので、この記事で分からなければ読んでみると良いです。
参考文献