如何使用 python 监听 firebase 数据库的变化?
How to listen to firebase database changes using python?
我正在尝试使用 webhook 将 IFTTT 服务与 firebase 连接。为此,我使用 Flask 在 pythonanywhere 上构建了一个 python 服务器。我成功地做到了这一点,但我想在每次节点中的数据更改时监听数据库更改,而不是每次都触发 IFTTT。为此,我使用了 while 循环并且它正在工作但是当我尝试更改我想从 IFTTT 收听的节点时出现问题。
from flask import Flask
from flask import request
import requests
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello!'
@app.route("/SENSORS", methods=["POST","GET"])
def handler1():
val1= [0,0]
while True:
username1 = request.get_data()
username1 = username1.decode("utf-8")
result1 = [x.strip() for x in username1.split(',')]
print(result1)
r1 = requests.get('https://myproject-024.firebaseio.com/USERS/DATA.json')
r2 = r1.text #Converting it into text
r3 = [x.strip() for x in r2.split('"')] #Removing double quotes
print(r3)
#Swapping values to compare the previous and current value
val1[1] = r2
val1[1],val1[0] = val1[0],val1[1]
requests.patch('https://myproject-024.firebaseio.com/USERS.json', json = { "SENSOR" : "1"} )
if val1[0]!=val1[1]:
responce = {"value1":"DATA1","value2":"DATA2","value3":"DATA3"}
requests.post('https://maker.ifttt.com/trigger/USERS/with/key/, data=responce)
您正在使用 Firebase REST API 从实时数据库获取数据。您现在使用它的方式,REST API 提供了一个基本的 request/response 模型,并且始终 returns 您请求的位置的数据。
要检查数据更新,您可以request and pass an ETag。使用 ETag 可以防止多次获取相同的数据(节省带宽),但它不会为您提供数据更改的实时更新。
要通过常规 HTTP 侦听该位置的数据实时更新,您可以 use the REST streaming API,它使用服务器发送的事件 (SSE) 通知客户端更新。您会注意到此 API 与您现在所做的有很大不同,因此您需要进行一些更改。
我正在尝试使用 webhook 将 IFTTT 服务与 firebase 连接。为此,我使用 Flask 在 pythonanywhere 上构建了一个 python 服务器。我成功地做到了这一点,但我想在每次节点中的数据更改时监听数据库更改,而不是每次都触发 IFTTT。为此,我使用了 while 循环并且它正在工作但是当我尝试更改我想从 IFTTT 收听的节点时出现问题。
from flask import Flask
from flask import request
import requests
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello!'
@app.route("/SENSORS", methods=["POST","GET"])
def handler1():
val1= [0,0]
while True:
username1 = request.get_data()
username1 = username1.decode("utf-8")
result1 = [x.strip() for x in username1.split(',')]
print(result1)
r1 = requests.get('https://myproject-024.firebaseio.com/USERS/DATA.json')
r2 = r1.text #Converting it into text
r3 = [x.strip() for x in r2.split('"')] #Removing double quotes
print(r3)
#Swapping values to compare the previous and current value
val1[1] = r2
val1[1],val1[0] = val1[0],val1[1]
requests.patch('https://myproject-024.firebaseio.com/USERS.json', json = { "SENSOR" : "1"} )
if val1[0]!=val1[1]:
responce = {"value1":"DATA1","value2":"DATA2","value3":"DATA3"}
requests.post('https://maker.ifttt.com/trigger/USERS/with/key/, data=responce)
您正在使用 Firebase REST API 从实时数据库获取数据。您现在使用它的方式,REST API 提供了一个基本的 request/response 模型,并且始终 returns 您请求的位置的数据。
要检查数据更新,您可以request and pass an ETag。使用 ETag 可以防止多次获取相同的数据(节省带宽),但它不会为您提供数据更改的实时更新。
要通过常规 HTTP 侦听该位置的数据实时更新,您可以 use the REST streaming API,它使用服务器发送的事件 (SSE) 通知客户端更新。您会注意到此 API 与您现在所做的有很大不同,因此您需要进行一些更改。