# #python #firebase #google-cloud-firestore
Вопрос:
Я просто хочу узнать, как хранить данные в Firestore с помощью Python и облачной платформы Google, поэтому я вызываю API для запроса некоторых примеров данных. Для этого я использую библиотеку запросов и библиотеку Firebase из пакета google.cloud.
Вот код, который я запускаю в Cloud Shell:
import requests from google.cloud import firestore url = "https://api.coindesk.com/v1/bpi/currentprice.json" r = requests.get(url) resp: str = r.text if not (resp=="null" or resp=="[]"): db = firestore.Client() doc_ref=db.collection("CoinData").add(r.json())
Когда код пытается подключиться к Firebase, чтобы добавить json ответа API, я получил эту ошибку:
Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/google/api_core/grpc_helpers.py", line 66, in error_remapped_callable return callable_(*args, **kwargs) File "/usr/local/lib/python3.7/dist-packages/grpc/_channel.py", line 946, in __call__ return _end_unary_response_blocking(state, call, False, None) File "/usr/local/lib/python3.7/dist-packages/grpc/_channel.py", line 849, in _end_unary_response_blocking raise _InactiveRpcError(state) grpc._channel._InactiveRpcError: lt;_InactiveRpcError of RPC that terminated with: status = StatusCode.INVALID_ARGUMENT details = "Invalid resource field value in the request." debug_error_string = "{"created":"@1634689546.004704998","description":"Error received from peer ipv4:74.125.134.95:443","file":"src/core/lib/surface/call.cc","file_line":1070,"grpc_message":"Invalid resource field value in the request.","grpc_status":3}" gt; The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/antonyare_93/cloudshell_open/pruebas/data_coin_query.py", line 11, in lt;modulegt; doc_ref=db.collection("CoinData").add(r.json()) File "/home/antonyare_93/.local/lib/python3.7/site-packages/google/cloud/firestore_v1/collection.py", line 107, in add write_result = document_ref.create(document_data, **kwargs) File "/home/antonyare_93/.local/lib/python3.7/site-packages/google/cloud/firestore_v1/document.py", line 99, in create write_results = batch.commit(**kwargs) File "/home/antonyare_93/.local/lib/python3.7/site-packages/google/cloud/firestore_v1/batch.py", line 60, in commit request=request, metadata=self._client._rpc_metadata, **kwargs, File "/home/antonyare_93/.local/lib/python3.7/site-packages/google/cloud/firestore_v1/services/firestore/client.py", line 815, in commit response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,) File "/usr/local/lib/python3.7/dist-packages/google/api_core/gapic_v1/method.py", line 142, in __call__ return wrapped_func(*args, **kwargs) File "/usr/local/lib/python3.7/dist-packages/google/api_core/retry.py", line 288, in retry_wrapped_func on_error=on_error, File "/usr/local/lib/python3.7/dist-packages/google/api_core/retry.py", line 190, in retry_target return target() File "/usr/local/lib/python3.7/dist-packages/google/api_core/grpc_helpers.py", line 68, in error_remapped_callable raise exceptions.from_grpc_error(exc) from exc google.api_core.exceptions.InvalidArgument: 400 Invalid resource field value in the request.
Кто — нибудь знает, как я могу это исправить?
Ответ №1:
Я только что получил его.
Это была небольшая ошибка, я пропустил название проекта при вызове метода клиента firestore, вот рабочий код:
import requests from google.cloud import firestore url = "https://api.coindesk.com/v1/bpi/currentprice.json" r = requests.get(url) resp: str = r.text if not (resp=="null" or resp=="[]"): db = firestore.Client(project="mytwitterapitest") doc_ref=db.collection("CoinData").add(r.json())