import streamlit as st import pandas as pd import json from urllib.request import urlopen from bs4 import BeautifulSoup # import the dataset df = pd.read_json('recipes.json') df['liststring'] = [','.join(map(str, l)) for l in df['Ingredients']] st.write("#### Was koche ich heute?") ## Sidebar def user_input_features(): ingre1 = st.sidebar.text_input("Zutat 1") ingre2 = st.sidebar.text_input("Zutat 2", key = "zutat2") ingre3 = st.sidebar.text_input("Zutat 3", key = "zutat3") list_ingre = [ingre1, ingre2, ingre3] return list_ingre st.sidebar.write("Was hast du schon im Kühlschrank?") ingre = user_input_features() results_ingredients = st.sidebar.button("Suchen") st.sidebar.write("oder") results = st.sidebar.button("Überrasch mich!") # Sort the dataset #create a dataframe "new" with all the ingredients that are in the list ingre new = df[df['liststring'].apply(lambda x: ingre[0] in x)] if ingre[1]: new = new[new['liststring'].apply(lambda x: ingre[1] in x)] if ingre[2]: new = new[new['liststring'].apply(lambda x: ingre[2] in x)] #new = df[df['liststring'].apply(lambda x: ingre in x)] col1, col2 = st.columns(2) if not new.empty: if results_ingredients: bla = new.sample(1) #Opening header images url = str(bla["Url"].iloc[0]) htmldata = urlopen(url) soup = BeautifulSoup(htmldata, 'html.parser') images = soup.find_all('img') image = images[2]['src'] #Opening the Rest zutaten = bla["Ingredients"].iloc[0] instructions = str(bla["Instructions"].iloc[0]) name = str(bla["Name"].iloc[0]) with col1: st.write("# " + name) for i in zutaten: st.write("* "+i) with col2: st.image(image) st.text_area("Anleitung", instructions, height=300) else: st.write("### Sorry, nichts gefunden...") # Next if results: new_sample = df.sample(1) #Opening header images url = str(new_sample["Url"].iloc[0]) htmldata = urlopen(url) soup = BeautifulSoup(htmldata, 'html.parser') images = soup.find_all('img') image = images[2]['src'] # Rest zutaten = new_sample["Ingredients"].iloc[0] instructions = str(new_sample["Instructions"].iloc[0]) name = str(new_sample["Name"].iloc[0]) with col1: st.write("# " + name) for i in zutaten: st.write("* "+i) with col2: st.image(image) st.text_area("Anleitung", instructions, height=300)