Firebase

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/

プロジェクトがなければ新しく作成する。とりあえず、管理画面まで進みます。

f:id:qed805:20200211174328p:plain

管理画面

f:id:qed805:20200211174409p:plain

設定画面

設定画面の「プロジェクトの設定」を選択する

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

f:id:qed805:20200211174537p:plain

サービスアカウントのタブを選択する

Pythonを選択して、「新しい秘密鍵を生成する」ボタンをタップする。

f:id:qed805:20200211174715p:plain

新しい秘密鍵を生成する

タップするとjsonファイルをダウンロードできる。
このjsonを同じPythonファイルのディレクトリにまとめておく。
jsonファイル名が[サービスアカウントの秘密鍵のjsonファイル名]になる。

[Firebase のDatabaseのURL]は下のスクリーンショットの赤枠のURLを使う

f:id:qed805:20200211175232p:plain

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コマンドを実行するとデータを保存できます。

ABOUT ME
tamappe
都内で働くiOSアプリエンジニアのTamappeです。 当ブログではモバイルアプリの開発手法について紹介しています。メインはiOS、サブでFlutter, Android も対応できます。 執筆・講演のご相談は tamapppe@gmail.com までお問い合わせください。