2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FirebaseにPythonからアクセスする(ファイル保存編)

Posted at

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)

4.今後の発展に向けた課題

おそらくFirebaseの利用シーンとしては、IphoneやAndroidアプリ、ウェブアプリなどマルチなフロントエンドから一元的なFirebase上のデータベース にアクセスするケースが想定されると思います。 英語のサイトですが、Django+Firebaseの組み合わせて使用する場合の解説を見つけました。こうしたものも参考にしながら、Firebaseを使いこなしていただければと思います。くどいようですが、データベースのセキュリティの問題はくれぐれもお気をつけください。
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?