簡體   English   中英

從第 3 方 API 收集數據時如何更新 Firestore 文檔而不是創建新文檔

[英]How to update Firestore document when data changes when collected from 3rd Party API instead of creating new document

下面的代碼設置為從第三方 API 收集 NBA 比賽的數據。 目前一切正常,數據存儲在 GCP Firestore 中,但問題是每次調用 API 時,它都會為每個游戲創建一個新文檔。 所以說它每天調用 3 次,同一個游戲會有 3 個不同的文件。

我想要發生的是,每次調用 API 並且游戲的數據發生更改時,它都會更新原始文檔而不是創建新文檔。

任何幫助,將不勝感激。

import requests
import json
from firebase_admin import firestore

db = firestore.Client(project='xxxx')


def bluebet_nba_odds():
    # MAKE VARIABLES GLOBAL
    global away_team_win_odds, away_team, home_team_win_odds, home_team, start_time, event_title, event_id, competition

    # API CALL

    link = 'https://xxxxxxxxxx.com.au/json/reply/MasterCategoryRequest?EventTypeID=107&WithLevelledMarkets' \
           '=true&WithLevelledMarkets=true '
    # Request data from link as 'str'
    nbadata = requests.get(link).text
    # convert 'str' to Json
    nbadata = json.loads(nbadata)

    # JSON PARSE

    for nba_odds in nbadata['MasterCategories'][2]['Categories'][0]['MasterEvents']:
        competition = nba_odds['CategoryName']
        event_id = nba_odds['MasterEventId']
        event_title = nba_odds['MasterEventName']
        start_time = nba_odds['MaxAdvertisedStartTime']
        home_team = nba_odds['Markets'][0]['OutcomeName']
        home_team_win_odds = nba_odds['Markets'][0]['Price']
        away_team = nba_odds['Markets'][1]['OutcomeName']
        away_team_win_odds = nba_odds['Markets'][1]['Price']

# WRITE TO FIRESTORE

        data = {
            'competition': competition,
            'event_id': event_id,
            'event_title': event_title,
            'start_time': start_time,
            'home_team': home_team,
            'home_team_win_odds': home_team_win_odds,
            'away_team': away_team,
            'away_team_win_odds': away_team_win_odds,
            'timestamp': firestore.SERVER_TIMESTAMP,
            }

        db.collection('bluebet_nba_season_odds').document().set(data), print('Game Data Written to Firestore')


if __name__ == "__main__":
    bluebet_nba_odds()

沒有 arguments 的document()每次調用時都會生成一個隨機文檔 ID。 不要那樣做。 而是為文檔命名。

db.collection('bluebet_nba_season_odds').document('you-choose-a-name-here')

查看API 文檔可能會對您有所幫助,以更好地了解 API 的工作原理,尤其是對於您正在調用的document()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM