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-adminFirebaseにアクセスする
これを参考にしてソースコードを作成する
基本形
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コマンドを実行するとデータを保存できます。




