Как прослушать изменения базы данных firebase, используя python? - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь подключить службу IFTTT к firebase через webhooks. Для этого я создал сервер python на pythonanywhere, используя Flask. И мне это удалось, но я хотел прислушиваться к изменениям базы данных каждый раз, когда данные меняются в узле, не вызывая IFTTT каждый раз. Для этого я использовал while l oop, и оно работало, но проблема возникает, когда я пытаюсь изменить узел, который я хочу слушать, из 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)

1 Ответ

1 голос
/ 14 марта 2020

Вы используете Firebase REST API для получения данных из базы данных в реальном времени. Как вы используете сейчас, REST API предоставляет базовую c модель запроса / ответа и всегда возвращает данные в запрошенном вами месте.

Чтобы проверить наличие обновлений данных, вы можете запросить и передать ETag . Используя ETag, вы можете запретить получение одних и тех же данных несколько раз (экономя пропускную способность), но он не даст вам оперативных обновлений изменений данных.

Чтобы прослушивать обновления данных в реальном времени в расположении через regulat HTTP, вы можете использовать потоковый API REST , который использует отправленные сервером события (SSE), чтобы сообщить клиенту об обновлениях. Вы заметите, что этот API сильно отличается от того, что вы делаете сейчас, поэтому вам нужно будет немного его изменить.

...