1.はじめに
GoogleのFirebaseをデータベースとして使い、さまざまなアプリからアクセスできるようにされているケースも多いと思います。ここでは、FirebaseにPythonからアクセスし、ファイルをデータベース上に保存する基本的な方法について紹介をします。なお、ここでは、セキュリティが緩い形になっているので、本番環境では必ず公式ドキュメントのセキュリティルールをしっかり読んでいただき、誰でもデータベースにアクセスができるような状態にならないように注意しましょう。こうした話も含めて、毎回のことですが自己責任でお願いします。2.全体の流れと準備
・Firebaseのアカウント作成 ・プロジェクトの作成 ・ウェブアプリの作成 ・Storageの作成 は終わっていることを前提にします。あらかじめ、歯車のアイコンの「プロジェクトを設定」をクリックして、作成したウェブアプリを選択。SDKの設定と構成のところのスクリプトから、APIアクセスに必要な以下の情報を取得しておきます。
firebaseConfig = {
apiKey: "XXXX",
authDomain: "XXXX",
projectId: "XXXX",
storageBucket: "XXXX",
messagingSenderId: "XXXX",
appId: "XXXX"
};
また、Storageアイコンをクリックして、Storage → Rules を選択し、ルールを以下の通りに編集します。デフォルトでは、allo read, writeの後に、if request.auth != null が入っていますが、これを消しています。セキュリティに影響する部分なので、あくまで開発時の対応と考えてください。
しつこいですが、本番環境にするためには、基本的なセキュリティルール`に沿って設定をする必要があります。このセキュリティ設定ができていないことで情報漏洩(漏洩というか、意図せぬ公開)が発生してしまいます。
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
3. Pythonコード
Firebaseにアクセスするためのコードを書いていきます。ここでは、モジュールPyrebaseを使っています。公式ドキュメントはこちらです。 ここで注意したいのが、firebaseConfigの設定になります。Firebaseのプロジェクトの設定「SDK の設定と構成」の情報を入れるのですが、そのままのコピペではエラーが出てしまいますので、次の2点を修正しておきます。 ①Keyに””がついていないので、それぞれに””をつける作業が必要 ②databaseURLをダミーで構いませんので、設定しておくことが必要(""でOKです。)storage_access.py
import pyrebase
firebaseConfig = {
"apiKey": "XXXX",
"authDomain": "XXXX",
"databaseURL": "",
"projectId": "XXXX",
"storageBucket": "XXXX",
"messagingSenderId": "XXXX",
"appId": "XXXX"
}
firebase = pyrebase.initialize_app(firebaseConfig)
#保存したいファイルのパスを指定します。Google Colabでマウントしたドライブに保存したファイル
#なら、以下のような例になります。
path = '/content/drive/MyDrive/XXXX.jpg'
storage = firebase.storage()
#データベースに保存するファイルをファイル名をつけてアップします。
storage.child('image/01.jpg').put(path)
#アップしたファイルをダウンロードします。
storage.child("image/01.jpg").download("down.jpg")
#アップしたファイルをダウンロードするためのURLを取得して表示します。
image_url = storage.child('image/01.jpg').get_url(token=None)
print(image_url)