Я пытаюсь создать приложение, которое принимает заказы на смузи.
Я хочу добавить пищевую ценность после выбора фруктов, но ее невозможно получить через API.
Вот код.
import streamlit as st
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import col
import requests
st.title("Customize your Smoothie! App :cup_with_straw:")
st.write(
"""Choose the fruits you want in your custom Smoothie!
"""
)
name_on_order = st.text_input('Name on Smoothie:')
st.write('The name on your Smoothie be:', name_on_order)
session = get_active_session()
my_dataframe = session.table("smoothies.public.fruit_options").select(col('FRUIT_NAME'))
ingredients_list = st.multiselect('Choose upto 5 ingredients:',my_dataframe,max_selections=5)
if ingredients_list:
ingredients_string = ""
for fruit_chosen in ingredients_list:
ingredients_string+= fruit_chosen+" "
fruityvice_response = requests.get("https://fruityvice.com/api/fruit/"+fruit_chosen)
st.text(fruityvice_response.json())
#fv_dv = st.dataframe(data=fruityvice_response.json(), use_container_width=True)
my_insert_stmt = """ insert into smoothies.public.orders(ingredients,name_on_order)
values ('""" + ingredients_string + """','""" + name_on_order + """')"""
#st.write(my_insert_stmt)
time_to_insert= st.button('Submit Order')
if time_to_insert:
session.sql(my_insert_stmt).collect()
st.success('Your Smoothie is ordered!', icon = "✅")
Это ошибка, которую я получаю:
ConnectionError: HTTPSConnectionPool(host='fruityvice.com', port=443): Max retries exceeded with url: /api/fruit/watermelonElderberries (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xffff79c51400>: Failed to resolve 'fruityvice.com' ([Errno -3] Temporary failure in name resolution)"))
Traceback:
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 552, in _run_script
exec(code, module.__dict__)
File "/home/udf/88736396/streamlit_app.py", line 33, in <module>
fruityvice_response = requests.get("https://fruityvice.com/api/fruit/watermelon"+fruit_chosen)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/adapters.py", line 519, in send
raise ConnectionError(e, request=request)
Я попробовал блок try-кроме и задержал время обработки, чтобы завершить цикл.
обратите внимание, чтоstreamlit здесь неправильный тег, он должен быть помечен запросами; вот в чем твоя проблема.
вы не предоставили ожидаемый ввод и вывод. рефакторинг в минимальный воспроизводимый пример. streamlit не является фактором вашей проблемы, вы можете иметь жестко запрограммированный список, чтобы продемонстрировать проблему и высмеивать все элементыstreamlit, и ваша проблема все равно будет присутствовать
Проблема выглядит так, будто у вас неправильный URL-адрес. Посмотрите на URL-адрес, который они отображают, но это не удалось.
Превышено максимальное количество повторов для URL: /api/fruit/watermelonElderberry (Вызвано NameResolutionError("<urllib3.connection.HTTPSConnection объект по адресу 0xffff79c51400>: не удалось разрешить «fruityvice.com» ([Errno -3] Временный сбой в разрешении имен))))
URL-адрес выглядит неправильно. /api/fruit/armelonEldererries ?
Обновление
Теперь, когда вы исправили свой URL-адрес, вам нужно учитывать возможность того, что пользователь попросит фрукт, которого нет в базе данных фруктов веб-сайта. Что мешает пользователю, например, попросить «тако»? Перед обработкой необходимо убедиться, что предмет найден.
Проблемы на самом деле не имеют ничего общего с streamlit
, а связаны с использованием вами модуля request
.
да, я исправил это, но все равно не получаю желаемого результата и застрял
перейдите по URL-адресу самостоятельно и посмотрите, что он отображает, это то, что получит ваш код
Проблему решил спасибо за помощь
если мой совет был полезен, пожалуйста, проголосуйте за него или примите мой ответ.
не создавайте строки sql с объединением строк и форматированием, это рецепт для атак с использованием sql-инъекций.