簡體   English   中英

使用 Python 將 JSON 數據從 API 發送到 Firestore 的最佳方式

[英]Best way to send JSON data from API to Firestore with Python

我已收到 JSON 數據,其中包含通過 API 進行的亞馬遜搜索結果,我正在嘗試將其發送到我的 Firestore 數據庫。 我希望它是一個已經搜索過的產品集合。

這表示; 對於搜索結果中的每個 position(產品),我想將其存儲為文檔嗎? 我已經手動制作了這個集合以展示它的外觀。

大概應該是什么樣子

我已使用以下代碼將 JSON 轉換為可讀的 json。

json_api = api_result.json()

def convert_json_to_dict(json_api):
    with open(json_api) as JSON:
        json_dict = json.load(JSON)
    return json_dict


def convert_dict_to_df(json_api):
    return pd.json_normalize(convert_json_to_dict(json_api))

這給了我以下數據,我想處理。 它是元數據和前兩個位置。

{'request_info': {'success': True,
  'credits_used': 46,
  'credits_remaining': 54,
  'credits_used_this_request': 1},
 'request_metadata': {'created_at': '2021-02-25T10:17:35.565Z',
  'processed_at': '2021-02-25T10:17:39.793Z',
  'total_time_taken': 4.23,
  'amazon_url': 'https://www.amazon.com/s/?k=beetle+chair&ref=nb_sb_noss_2'},
 'request_parameters': {'amazon_domain': 'amazon.com',
  'type': 'search',
  'search_term': 'beetle chair'},
 'search_results': [{'position': 1,
   'title': 'CosmoLiving by Cosmopolitan Astor Dining Chair Green',
   'asin': 'B07P6T73Y3',
   'link': 'https://www.amazon.com/dp/B07P6T73Y3',
   'categories': [{'name': 'All Departments', 'id': 'search-alias=aps'}],
   'image': 'https://m.media-amazon.com/images/I/81F4zscz2OL._AC_UL320_.jpg',
   'is_prime': True,
   'is_amazon_fresh': False,
   'is_whole_foods_market': False,
   'rating': 4.1,
   'ratings_total': 232,
   'sponsored': False,
   'prices': [{'symbol': '$',
     'value': 99.99,
     'currency': 'USD',
     'raw': '$99.99'}],
   'price': {'symbol': '$',
    'value': 99.99,
    'currency': 'USD',
    'raw': '$99.99'},
   'delivery': {'tagline': 'Get it as soon as Fri, Mar 5',
    'price': {'raw': 'FREE Shipping by Amazon',
     'symbol': '$',
     'currency': 'USD',
     'value': 0,
     'is_free': True}}},
  {'position': 2,
   'title': 'Guyou Modern Plush Velvet Accent Chairs, Upholstered Round Back Dining Chairs Living Room Decor Set of 2 with Brass Legs (Emerald Green)',
   'asin': 'B085NKFJ2Y',
   'link': 'https://www.amazon.com/dp/B085NKFJ2Y',
   'categories': [{'name': 'All Departments', 'id': 'search-alias=aps'}],
   'image': 'https://m.media-amazon.com/images/I/51Evpn0iw-L._AC_UL320_.jpg',
   'is_prime': False,
   'is_amazon_fresh': False,
   'is_whole_foods_market': False,
   'rating': 4.5,
   'ratings_total': 38,
   'sponsored': False,
   'prices': [{'symbol': '$',
     'value': 159.83,
     'currency': 'USD',
     'raw': '$159.83'}],
   'price': {'symbol': '$',
    'value': 159.83,
    'currency': 'USD',
    'raw': '$159.83'},
   'delivery': {'price': {'raw': 'FREE Shipping',
     'symbol': '$',
     'currency': 'USD',
     'value': 0,
     'is_free': True}}},

目的是在數千種產品上使用它。

您可以創建一個 for 循環來為每個search_result創建一個文檔,並使用 asin 作為文檔名稱。

使用您的數據集,我必須修復您顯示的數據集,因為它是無效的 JSON,這是用於測試的數據集:

data = {'request_info': {'success': True,
  'credits_used': 46,
  'credits_remaining': 54,
  'credits_used_this_request': 1},
 'request_metadata': {'created_at': '2021-02-25T10:17:35.565Z',
  'processed_at': '2021-02-25T10:17:39.793Z',
  'total_time_taken': 4.23,
  'amazon_url': 'https://www.amazon.com/s/?k=beetle+chair&ref=nb_sb_noss_2'},
 'request_parameters': {'amazon_domain': 'amazon.com',
  'type': 'search',
  'search_term': 'beetle chair'},
 'search_results': [{'position': 1,
   'title': 'CosmoLiving by Cosmopolitan Astor Dining Chair Green',
   'asin': 'B07P6T73Y3',
   'link': 'https://www.amazon.com/dp/B07P6T73Y3',
   'categories': [{'name': 'All Departments', 'id': 'search-alias=aps'}],
   'image': 'https://m.media-amazon.com/images/I/81F4zscz2OL._AC_UL320_.jpg',
   'is_prime': True,
   'is_amazon_fresh': False,
   'is_whole_foods_market': False,
   'rating': 4.1,
   'ratings_total': 232,
   'sponsored': False,
   'prices': [{'symbol': '$',
     'value': 99.99,
     'currency': 'USD',
     'raw': '$99.99'}],
   'price': {'symbol': '$',
    'value': 99.99,
    'currency': 'USD',
    'raw': '$99.99'},
   'delivery': {'tagline': 'Get it as soon as Fri, Mar 5',
    'price': {'raw': 'FREE Shipping by Amazon',
     'symbol': '$',
     'currency': 'USD',
     'value': 0,
     'is_free': True}}},
  {'position': 2,
   'title': 'Guyou Modern Plush Velvet Accent Chairs, Upholstered Round Back Dining Chairs Living Room Decor Set of 2 with Brass Legs (Emerald Green)',
   'asin': 'B085NKFJ2Y',
   'link': 'https://www.amazon.com/dp/B085NKFJ2Y',
   'categories': [{'name': 'All Departments', 'id': 'search-alias=aps'}],
   'image': 'https://m.media-amazon.com/images/I/51Evpn0iw-L._AC_UL320_.jpg',
   'is_prime': False,
   'is_amazon_fresh': False,
   'is_whole_foods_market': False,
   'rating': 4.5,
   'ratings_total': 38,
   'sponsored': False,
   'prices': [{'symbol': '$',
     'value': 159.83,
     'currency': 'USD',
     'raw': '$159.83'}],
   'price': {'symbol': '$',
    'value': 159.83,
    'currency': 'USD',
    'raw': '$159.83'},
   'delivery': {'price': {'raw': 'FREE Shipping',
     'symbol': '$',
     'currency': 'USD',
     'value': 0,
     'is_free': True}}}]}

使用此示例,您可以執行以下操作:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

# Use a service account
cred = credentials.Certificate('path/to/serviceAccount.json')
firebase_admin.initialize_app(cred)

db = firestore.client()
for result in data["search_results"]:
    doc_ref = db.collection(u'amazon').document(result["asin"])
    doc_ref.set(result)

這將使用 asin 創建一個文檔,但它可以是您想要的任何其他 id,甚至可以是 position 使用db.collection(u'amazon').document("position: " + str(result["position"]))

如果您使用 asin 作為文檔名稱,這就是它的外觀。 數據庫外觀示例

以下是有關通過設置服務帳戶和一些代碼片段快速啟動 python firestore 的更多信息

暫無
暫無

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

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