私は現時点でpython-firebase
で作業しています。以前はJavaScriptとFirebaseで作業していました。 JSにはref.on('child_added')
がありましたが、私はpython-firebase
と同じことを探しています(ノードが追加されるたびにfirebaseをチェックする必要がありますので、このようなものが必要です)。python-firebaseは追加時にアイテムを取得します
これをどのように正確に行うことができますか?
私は現時点でpython-firebase
で作業しています。以前はJavaScriptとFirebaseで作業していました。 JSにはref.on('child_added')
がありましたが、私はpython-firebase
と同じことを探しています(ノードが追加されるたびにfirebaseをチェックする必要がありますので、このようなものが必要です)。python-firebaseは追加時にアイテムを取得します
これをどのように正確に行うことができますか?
(これはPython APIがそのフードの下にあるものです)を使用すると、追加された要素のIDを返すPOST要求を使用して要素を保存します。あなたの要素を取得し、関連するIDのためにそれらを繰り返します:
# assume your instance is called phones and your username is jack, change as appropriate
def get_object(newest_id):
objects = requests.get('https://samplechat.firebaseio-demo.com/users/jack/phones.json').json()
added_object = [obj for obj in objects if obj == newest_id][0]
return added_object
def add_object(dictionary_representing_object):
newest_id = requests.post('https://samplechat.firebaseio-demo.com/users/jack/phones.json', json=json.dumps(dictionary_representing_object), verify=False).json()['name']
stored_object = get_object(newest_id) # stored_object will be a superset of what's in dictionary_representing_object -- it will have an additional entry representing firebase's unique id
希望に役立ちます。
@ hd1の答えが働き、あなたがすでに使っているpython-firebaseライブラリを使用します。しかし、あなたが言うように、それは確かに更新をポーリングする必要があります。
代わりにFirebase's REST streaming APIを聞くこともできます。 Python example of how to consume the REST eventsがあります(Pythonリクエストライブラリとsseclientライブラリを使用しています)。読み取りループはhereです:あなたがPythonでその機能を得ることができるよう
self.sse = ClosableSSEClient(URL)
for msg in self.sse:
msg_data = json.loads(msg.data)
if msg_data is None: # keep-alives
continue
path = msg_data['path']
data = msg_data['data']
if path == '/':
# initial update
if data:
keys = data.keys()
keys.sort()
for k in keys:
self.message_queue.put(data[k])
else:
# must be a push ID
self.message_queue.put(data)
それはあなたが前に使用してきたネイティブJavaScriptクライアントのように単純ではありませんが、それは限り近いのです。
ありがとうございますが、何度も何度も何度もそれを呼び出す必要はありませんか?その考えは、レコードが追加されると通知を送信することです。 – dnsko
実際、リスナーは、私が概説したことを行うサーバー側プロセスです。 – hd1