我考虑通过 JavaScript SDK 或 REST API 将 Firebase 直接导入 Google Scripts。两者都有 Google 脚本无法满足或极难满足的要求/步骤。
- 没有可预见的在 Google Script 中下载 JavaScript SDK 的方法,因为几乎所有方法都需要 DOM,而 Google Sheet 则没有。
- REST API 需要
GoogleCredentials,乍一看,似乎也很难进入 Google 脚本
所以,另一种选择是在真正的服务器端环境中与 Firebase 交互。这将是很多代码,但这里是我将采取的步骤:
1) 设置一个Pyrebase 项目,以便您可以通过Python 与您的Firebase 项目进行交互。
import pyrebase
config = {
"apiKey": "apiKey",
"authDomain": "projectId.firebaseapp.com",
"databaseURL": "https://databaseName.firebaseio.com",
"storageBucket": "projectId.appspot.com",
"serviceAccount": "path/to/serviceAccountCredentials.json"
}
firebase = pyrebase.initialize_app(config)
...
db = firebase.database()
all_users = db.child("users").get()
2) 将Google Scripts/Sheets 项目设置为可以与您的 Google 表格交互的类
from __future__ import print_function
import httplib2
import os
from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'
class GoogleSheets:
...
# The rest of the functions from that link can go here
...
def write(self, sheet, sheet_name, row, col):
"""
Write data to specified google sheet
"""
if sheet == None or sheet == "":
print("Sheet not specified.")
return
day = time.strftime("%m/%d/%Y")
clock = time.strftime("%H:%M:%S")
datetime = day + " - " + clock
values = [[datetime]]
spreadsheetId = sheet
rangeName = sheet_name + "!" + str(row) + ":" + str(col)
body = {
'values': values
}
credentials = self.get_credentials()
http = credentials.authorize(httplib2.Http())
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
'version=v4')
service = discovery.build('sheets', 'v4', http=http,
discoveryServiceUrl=discoveryUrl)
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetId, range=rangeName,
valueInputOption="RAW", body=body).execute()
3) 在 Pyrebase 项目中的某处调用 Google 表格
from GoogleSheets import GoogleSheets
...
g = GoogleSheets()
g.write(<project-id>, <sheet-name>, <row>, <col>)
...
4) 设置一个 cron 作业以每隔一段时间运行一次 python 脚本
# every 2 minutes
*/2 * * * * /root/my_projects/file_example.py
您将需要一些基本服务器(Heroku、Digital Ocean)来运行它。
这并不广泛,因为要编写大量代码,但您可以完成基础知识。让我们现在想制作一个包。