PythonでFirebaseのRealtime Databaseにアクセスする

個人開発でAPIのデータを作成するためにPythonでFirebaseにアクセスしたので備忘録としてソースコードをまとめます。
Firebaseのデータベースについて
もう説明不要なくらいに有名になったFirebaseさんですが、今の所2種類のデータベースがありますので
簡単に説明します。
これらのデータベースの説明はネットで検索すればたくさんの情報が得られます。
Firebase Realtime Database
データをNoSQL データベースに保存することができて、複数のユーザーで同期することができるデータベース。
オフラインでは端末のローカルのキャッシュに保存され、オンラインになったタイミングで同期される。
Cloud Firestore
Firebase Realtime Database と似たNoSQL データベース。
上述のFirebase Realtime Databaseと同じような感じ。
今回はこちらのデータベースにアクセスしますが、今後は後述するCloud Firestoreがメジャーになるような感じらしいです。
firebase-admin のインストール
PythonでFirebaseの操作を便利にできるfirebase-admin
をpipコマンドでインストールします。
pip3 install firebase-admin
Firebaseにアクセスする
これを参考にしてソースコードを作成する
基本形
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
cred = credentials.Certificate('./[サービスアカウントの秘密鍵のjsonファイル名]')
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://[Firebase のDatabaseのURL]',
'databaseAuthVariableOverride': {
'uid': 'my-service-worker'
}
})
サービスアカウントの秘密鍵のjsonファイル名 の取得方法
Firebaseにアクセスします。
https://console.firebase.google.com/
プロジェクトがなければ新しく作成する。とりあえず、管理画面まで進みます。

管理画面

設定画面
設定画面の「プロジェクトの設定」を選択する
リソースのロケーションが聞かれるときがあると思うので東京リージョンの「asia-northeast1」を選択する。

サービスアカウントのタブを選択する
Pythonを選択して、「新しい秘密鍵を生成する」ボタンをタップする。

新しい秘密鍵を生成する
タップするとjsonファイルをダウンロードできる。
このjsonを同じPythonファイルのディレクトリにまとめておく。
jsonファイル名が[サービスアカウントの秘密鍵のjsonファイル名]
になる。
[Firebase のDatabaseのURL]は下のスクリーンショットの赤枠のURLを使う

FirebaseのデータベースURL
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
cred = credentials.Certificate('XXXX-firebase-adminsdk-sv1af-f0b31ee7e2.json')
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://YYYY.firebaseio.com/',
'databaseAuthVariableOverride': {
'uid': 'my-service-worker'
}
})
XXXとYYYYにそれぞれ値をセットするとFirebaseへアクセスすることができるようになる。
questions のreferenceにアクセスする
quiz_ref = db.reference('questions')
データを保存する
quiz_ref.child('question001').set({
'sentence': 'This () a pen',
'a': 'are',
'b': 'is',
'c': 'were',
'd': 'was',
'answer': 'b'
})
これでPythonコマンドを実行するとデータを保存できます。