import requests import streamlit as st import groq # Access API keys from Streamlit secrets openweather_api_key = st.secrets["weather_api_key"] groq_api_key = st.secrets["groq_api_key"] # Function to get weather data from OpenWeatherMap def get_weather_data(city): api_key = openweather_api_key # Use the secret API key url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" try: response = requests.get(url) response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code return response.json() except requests.exceptions.HTTPError as err: st.error(f"HTTP error occurred: {err}") except Exception as err: st.error(f"An error occurred: {err}") return None # Function to parse weather data and categorize weather def parse_weather_data(weather_data): temperature = weather_data["main"]["temp"] weather_description = weather_data["weather"][0]["description"] return temperature, weather_description # Categorizing weather conditions def categorize_weather(description): description = description.lower() if "clear" in description or "sun" in description: return "Sunny", "☀️" elif "rain" in description or "drizzle" in description or "shower" in description: return "Rainy", "🌧️" elif "snow" in description or "sleet" in description: return "Cold", "❄️" elif "cloud" in description: return "Cloudy", "☁️" elif "wind" in description: return "Windy", "💨" elif "smoke" in description or "haze" in description: return "Smoky", "🌫️" else: return "Uncategorized", "🔍" # Function to get outfit suggestion using Groq's LLaMA model def get_outfit_suggestion(temperature, description, style, fabric, weather_category, weather_icon, gender): # Initialize Groq's API try: client = groq.Groq(api_key=groq_api_key) # Use the secret API key # Adjust the prompt based on the weather category and gender if gender == "Male": prompt = f"The current weather is {description} with a temperature of {temperature}°C. The weather category is {weather_category}. Suggest a stylish outfit for a man who prefers a {style} style and {fabric} fabric." elif gender == "Female": prompt = f"The current weather is {description} with a temperature of {temperature}°C. The weather category is {weather_category}. Suggest a stylish outfit for a woman who prefers a {style} style and {fabric} fabric." else: prompt = f"The current weather is {description} with a temperature of {temperature}°C. The weather category is {weather_category}. Suggest a stylish outfit for someone who prefers a {style} style and {fabric} fabric." # Use Groq's chat completion to get the text response response = client.chat.completions.create( messages=[{"role": "user", "content": prompt}], model="llama3-8b-8192", # Change to a valid Groq model if necessary ) return response.choices[0].message.content.strip(), weather_icon except Exception as e: st.error(f"Error using Groq API: {e}") return None, None # Streamlit UI for user input st.set_page_config(page_title="Weather-Based Outfit Suggestion", page_icon="🌤️", layout="wide") # Custom styles st.markdown(""" """, unsafe_allow_html=True) st.title("🌤️ Weather-Based Outfit Suggestion App") # User input city = st.text_input("Enter your location:", placeholder="E.g. Peshawar") # Gender selection gender = st.selectbox("Select your gender", ["Male", "Female"]) # Style and fabric preferences style = st.selectbox("Select your preferred style", ["Casual", "Formal", "Sporty", "Business", "Chic"]) fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) if city: weather_data = get_weather_data(city) if weather_data and weather_data["cod"] == 200: temperature, description = parse_weather_data(weather_data) # Categorize the weather weather_category, weather_icon = categorize_weather(description) # Display current weather info st.write(f"Current temperature in {city}: {temperature}°C") st.write(f"Weather: {description} {weather_icon}") st.write(f"Weather Category: {weather_category} {weather_icon}") # Get outfit suggestion based on user preferences and gender outfit_suggestion, weather_icon = get_outfit_suggestion(temperature, description, style, fabric, weather_category, weather_icon, gender) if outfit_suggestion: # Display outfit suggestion st.markdown(f"### 🌟 Outfit Suggestion 🌟") st.write(outfit_suggestion) # Additional section for Health and Comfort Tips st.markdown(f"### 🌿 Health & Comfort Tips 🌿") st.write(f"Given the {weather_category} weather, it's important to take care of your health:") st.write("- **Breathing**: A face mask or scarf covering your nose and mouth can help protect you from smoke inhalation.") st.write("- **Hydration**: Keep a water bottle with you, as smoke can dehydrate your body.") st.write("- **Rest**: Try to avoid strenuous activity outdoors and take breaks if you're feeling fatigued.") st.write("- **Eyes**: If you're feeling irritated, use eye drops to soothe any discomfort caused by smoke.") # Display weather icon icon_code = weather_data["weather"][0]["icon"] icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" st.image(icon_url) else: st.write("Could not retrieve weather data. Please check the location.") # Optional: Add CSS for styling st.markdown( """ """, unsafe_allow_html=True ) # import requests # import streamlit as st # import groq # # Access API keys from Streamlit secrets # openweather_api_key = st.secrets["weather_api_key"] # groq_api_key = st.secrets["groq_api_key"] # # Function to get weather data from OpenWeatherMap # def get_weather_data(city): # api_key = openweather_api_key # Use the secret API key # url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" # try: # response = requests.get(url) # response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code # return response.json() # except requests.exceptions.HTTPError as err: # st.error(f"HTTP error occurred: {err}") # except Exception as err: # st.error(f"An error occurred: {err}") # return None # # Function to parse weather data # def parse_weather_data(weather_data): # temperature = weather_data["main"]["temp"] # weather_description = weather_data["weather"][0]["description"] # return temperature, weather_description # # Function to get outfit suggestion using Groq's LLaMA model # def get_outfit_suggestion(temperature, description, style, fabric): # # Initialize Groq's API # try: # client = groq.Groq(api_key=groq_api_key) # Use the secret API key # prompt = f"The current weather is {description} with a temperature of {temperature}°C. Suggest an outfit. The user prefers a {style} style and {fabric} fabric." # # Use Groq's chat completion to get the text response # response = client.chat.completions.create( # messages=[{"role": "user", "content": prompt}], # model="llama3-8b-8192", # Change to a valid Groq model if necessary # ) # return response.choices[0].message.content.strip() # except Exception as e: # st.error(f"Error using Groq API: {e}") # return None # # Streamlit UI for user input # st.title("Weather-Based Outfit Suggestion App") # city = st.text_input("Enter your location:") # # Add style and fabric input options # style = st.selectbox("Select your preferred style", ["Casual", "Formal", "Sporty", "Business", "Chic"]) # fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) # if city: # weather_data = get_weather_data(city) # if weather_data and weather_data["cod"] == 200: # temperature, description = parse_weather_data(weather_data) # # Display current weather info # st.write(f"Current temperature in {city}: {temperature}°C") # st.write(f"Weather: {description}") # # Get outfit suggestion based on user preferences # outfit_suggestion = get_outfit_suggestion(temperature, description, style, fabric) # if outfit_suggestion: # # Display outfit suggestion # st.write("Outfit Suggestion:") # st.write(outfit_suggestion) # # Display weather icon # icon_code = weather_data["weather"][0]["icon"] # icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" # st.image(icon_url) # else: # st.write("Could not retrieve weather data. Please check the location.") # # Optional: Add CSS for styling # st.markdown( # """ # # """, # unsafe_allow_html=True # ) # -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # import requests # import streamlit as st # import groq # import os # # Function to get weather data from OpenWeatherMap # import os # # Replace with environment variables # openweather_api_key = os.getenv("weather_api_key") # groq_api_key = os.getenv("groq_api_key") # def get_weather_data(city): # api_key = openweather_api_key # Replace with your OpenWeatherMap API key # url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" # try: # response = requests.get(url) # response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code # return response.json() # except requests.exceptions.HTTPError as err: # st.error(f"HTTP error occurred: {err}") # except Exception as err: # st.error(f"An error occurred: {err}") # return None # # Function to parse weather data # def parse_weather_data(weather_data): # temperature = weather_data["main"]["temp"] # weather_description = weather_data["weather"][0]["description"] # return temperature, weather_description # # Function to get outfit suggestion using Groq's LLaMA model # def get_outfit_suggestion(temperature, description, style, fabric): # # Initialize Groq's API # try: # client = groq.Groq(api_key=groq_api_key) # Replace with your Groq API key # prompt = f"The current weather is {description} with a temperature of {temperature}°C. Suggest an outfit. The user prefers a {style} style and {fabric} fabric." # # Use Groq's chat completion to get the text response # response = client.chat.completions.create( # messages=[{"role": "user", "content": prompt}], # model="llama3-8b-8192", # Change to a valid Groq model if necessary # ) # return response.choices[0].message.content.strip() # except Exception as e: # st.error(f"Error using Groq API: {e}") # return None # # Streamlit UI for user input # st.title("Weather-Based Outfit Suggestion App") # city = st.text_input("Enter your location:") # # Add style and fabric input options # style = st.selectbox("Select your preferred style", ["Casual", "Formal", "Sporty", "Business", "Chic"]) # fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) # if city: # weather_data = get_weather_data(city) # if weather_data and weather_data["cod"] == 200: # temperature, description = parse_weather_data(weather_data) # # Display current weather info # st.write(f"Current temperature in {city}: {temperature}°C") # st.write(f"Weather: {description}") # # Get outfit suggestion based on user preferences # outfit_suggestion = get_outfit_suggestion(temperature, description, style, fabric) # if outfit_suggestion: # # Display outfit suggestion # st.write("Outfit Suggestion:") # st.write(outfit_suggestion) # # Display weather icon # icon_code = weather_data["weather"][0]["icon"] # icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" # st.image(icon_url) # else: # st.write("Could not retrieve weather data. Please check the location.") # # Optional: Add CSS for styling # st.markdown( # """ # # """, # unsafe_allow_html=True # )