【问题标题】:Best way to send JSON data from API to Firestore with Python使用 Python 将 JSON 数据从 API 发送到 Firestore 的最佳方式
【发布时间】:2021-05-27 22:13:00
【问题描述】:

我通过 API 收到带有 Amazon 搜索结果的 JSON 数据,我正在尝试将其发送到我的 Firestore 数据库。我希望它是已搜索的产品集合。

这意味着;对于搜索结果中的每个职位(产品),我想将其存储为文档吗?我已经手动制作了这个集合以展示它的外观。

我已使用以下代码将 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}}},

我们的目的是在数千种产品上使用它。

【问题讨论】:

    标签: python json python-3.x google-cloud-firestore


    【解决方案1】:

    您可以创建一个 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,甚至可以是使用 db.collection(u'amazon').document("position: " + str(result["position"])) 在搜索结果中的位置

    如果您使用 asin 作为文档名称,它会是什么样子。

    Here是更多关于通过设置服务账号和一些代码sn-ps快速启动python firestore的信息

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      相关资源
      最近更新 更多