| # import streamlit as st | |
| # import requests | |
| # import pandas as pd | |
| # # Your backend functions | |
| # def jina(url): | |
| # base_url = "https://r.jina.ai/" | |
| # url = base_url + url | |
| # response = requests.get(url) | |
| # return response.text | |
| # def price_cities(url): | |
| # text = jina(url) | |
| # pos1 = text.find('**') | |
| # new = text[:pos1] | |
| # twentytwok = new[int(new.find('22K')):int(new.find('24K'))] | |
| # value_22k = twentytwok[int(twentytwok.find('\n\n') + 1): int(twentytwok.find('\n\n+'))][3:] | |
| # value_22k = value_22k.split('\n')[0] | |
| # twentyfourk = new[int(new.find('24K')):int(new.find('18K'))] | |
| # value_24k = twentyfourk[int(twentyfourk.find('\n\n') + 1): int(twentyfourk.find('\n\n+'))][3:] | |
| # value_24k = value_24k.split('\n')[0] | |
| # eighteenk = new[int(new.find('18K')):] | |
| # value_18k = eighteenk[int(eighteenk.find('\n\n') + 1): int(eighteenk.find('\n\n+'))][3:] | |
| # value_18k = value_18k.split('\n')[0] | |
| # return value_24k, value_22k, value_18k | |
| # # List of cities | |
| # cities = ['Ahmedabad', 'Ayodhya', 'Bangalore', 'Bhubaneswar', 'Chandigarh', 'Chennai', | |
| # 'Coimbatore', 'Delhi', 'Hyderabad', 'Jaipur', 'Kerala', 'Kolkata', 'Lucknow', | |
| # 'Madurai', 'Mangalore', 'Mumbai', 'Mysore', 'Nagpur', 'Nashik', 'Patna', | |
| # 'Pune', 'Rajkot', 'Salem', 'Surat', 'Trichy', 'Vadodara', 'Vijayawada', 'Visakhapatnam'] | |
| # # Sidebar content | |
| # st.sidebar.title("About the Project") | |
| # st.sidebar.write("This project fetches current gold rates for 24K, 22K, and 18K gold from GoodReturns for 28 Indian states. The rates for 1g, 8g, and 10g are displayed.") | |
| # st.sidebar.write("**Developed by:**") | |
| # st.sidebar.write("[Srish Rachamalla](https://www.linkedin.com/in/srishrachamalla/)") | |
| # st.sidebar.write("[Sai Teja Pallerla](https://www.linkedin.com/in/saiteja-pallerla-668734225/)") | |
| # # Main UI | |
| # st.title('Gold Rates in Indian Cities') | |
| # st.subheader('Select a city to view the current gold rates') | |
| # # Dropdown for city selection | |
| # selected_city = st.selectbox('Select a City', cities) | |
| # # Fetch and display gold rates | |
| # if selected_city: | |
| # city_url = f"https://www.goodreturns.in/gold-rates/{selected_city}.html" | |
| # # Fetch the prices using your backend function | |
| # try: | |
| # value_24k, value_22k, value_18k = price_cities(city_url) | |
| # # Convert string values to float for calculation | |
| # value_22k = round(float(value_22k.replace(',', '')),2) | |
| # value_24k = round(float(value_24k.replace(',', '')),2) | |
| # value_18k = round(float(value_18k.replace(',', '')),2) | |
| # # Prepare data for table | |
| # data = { | |
| # # 'SNO': [1, 2, 3], | |
| # 'Gold Purity': ['24K', '22K', '18K'], | |
| # '1g Price (₹)': [value_24k, value_22k, value_18k], | |
| # '8g Price (₹)': [value_24k * 8, value_22k * 8, value_18k * 8], | |
| # '10g Price (₹)': [value_24k * 10, value_22k * 10, value_18k * 10] | |
| # } | |
| # # Create a DataFrame for display | |
| # df = pd.DataFrame(data,index=[1, 2, 3]) | |
| # # Display the DataFrame as a table | |
| # st.write(f"Gold rates in {selected_city}:") | |
| # st.dataframe(df.style.format(precision=2).set_properties(**{ | |
| # 'background-color': 'black', | |
| # 'color': 'white', | |
| # 'border-color': 'ash' | |
| # })) | |
| # except Exception as e: | |
| # st.error(f"Could not fetch the gold rates. Please try again.{e}") | |
| # st.markdown("<br><hr><center><p style='color: grey;'>© 2024 All Rights Reserved</p></center><br>", unsafe_allow_html=True) | |
| # import streamlit as st | |
| # import requests | |
| # import pandas as pd | |
| # import pymongo | |
| # import datetime | |
| # from pymongo import MongoClient | |
| # import matplotlib.pyplot as plt | |
| # import os | |
| # import ssl | |
| # import pytz # Importing pytz for timezone handling | |
| # # Fetch the secret key from environment variables | |
| # Mongo_ip = os.getenv("Mongo_IP") | |
| # # Setting up IST timezone | |
| # ist_timezone = pytz.timezone("Asia/Kolkata") | |
| # # Connect to MongoDB | |
| # client = MongoClient( | |
| # Mongo_ip, | |
| # ssl=True, | |
| # ssl_cert_reqs=ssl.CERT_NONE # Bypass SSL certificate verification | |
| # ) | |
| # db = client.GoldRates | |
| # collection = db['GoldRates'] | |
| # # Backend functions | |
| # def jina(url): | |
| # base_url = "https://r.jina.ai/" | |
| # url = base_url + url | |
| # response = requests.get(url) | |
| # return response.text | |
| # def price_cities(url): | |
| # text = jina(url) | |
| # pos1 = text.find('**') | |
| # new = text[:pos1] | |
| # twentytwok = new[int(new.find('22K')):int(new.find('24K'))] | |
| # value_22k = twentytwok[int(twentytwok.find('\n\n') + 1): int(twentytwok.find('\n\n+'))][3:] | |
| # value_22k = value_22k.split('\n')[0] | |
| # twentyfourk = new[int(new.find('24K')):int(new.find('18K'))] | |
| # value_24k = twentyfourk[int(twentyfourk.find('\n\n') + 1): int(twentyfourk.find('\n\n+'))][3:] | |
| # value_24k = value_24k.split('\n')[0] | |
| # eighteenk = new[int(new.find('18K')):] | |
| # value_18k = eighteenk[int(eighteenk.find('\n\n') + 1): int(eighteenk.find('\n\n+'))][3:] | |
| # value_18k = value_18k.split('\n')[0] | |
| # return value_24k, value_22k, value_18k | |
| # # Helper function to insert data only once per day (no time constraint) | |
| # def insert_data_if_not_exists(city, date, value_24k, value_22k, value_18k): | |
| # query = {"Date": date, "Place": city} | |
| # if not collection.find_one(query): | |
| # document = { | |
| # "Date": date, | |
| # "Place": city, | |
| # "GoldRate_24k": float(value_24k.replace(',', '')), | |
| # "GoldRate_22k": float(value_22k.replace(',', '')), | |
| # "GoldRate_18k": float(value_18k.replace(',', '')) | |
| # } | |
| # collection.insert_one(document) | |
| # # Function to fetch weekly data for chart | |
| # def fetch_weekly_data(city): | |
| # today = datetime.datetime.now(ist_timezone) | |
| # start_date = today - datetime.timedelta(days=7) | |
| # query = {"Place": city, "Date": {"$gte": start_date.strftime("%Y-%m-%d")}} | |
| # return list(collection.find(query).sort("Date", -1)) | |
| # # Function to check if it's the first run of the day after 12:30 PM IST | |
| # def is_first_run_after_1230(): | |
| # today = datetime.datetime.now(ist_timezone) | |
| # time_check = today.replace(hour=12, minute=30, second=0, microsecond=0) | |
| # date_check = today.strftime("%Y-%m-%d") | |
| # return today >= time_check and not collection.find_one({"Date": date_check}) | |
| # # Fetch and save rates for all cities | |
| # def fetch_and_save_all_cities(): | |
| # date_today = datetime.datetime.now(ist_timezone).strftime("%Y-%m-%d") | |
| # for city in cities: | |
| # city_url = f"https://www.goodreturns.in/gold-rates/{city}.html" | |
| # try: | |
| # value_24k, value_22k, value_18k = price_cities(city_url) | |
| # insert_data_if_not_exists(city, date_today, value_24k, value_22k, value_18k) | |
| # except Exception as e: | |
| # st.error(f"Could not fetch the gold rates for {city}. {e}") | |
| # # List of cities | |
| # cities = ['Hyderabad', 'Ahmedabad', 'Ayodhya', 'Bangalore', 'Bhubaneswar', 'Chandigarh', 'Chennai', | |
| # 'Coimbatore', 'Delhi', 'Jaipur', 'Kerala', 'Kolkata', 'Lucknow', | |
| # 'Madurai', 'Mangalore', 'Mumbai', 'Mysore', 'Nagpur', 'Nashik', 'Patna', | |
| # 'Pune', 'Rajkot', 'Salem', 'Surat', 'Trichy', 'Vadodara', 'Vijayawada', 'Visakhapatnam'] | |
| # # Main UI | |
| # st.title('Gold Rates in Indian Cities') | |
| # st.subheader('Select a city to view the current gold rates and a weekly trend.') | |
| # st.sidebar.title("About the Project") | |
| # st.sidebar.write("This project fetches current gold rates for 24K, 22K, and 18K gold from GoodReturns for 28 Indian states. The rates for 1g, 8g, and 10g are displayed.") | |
| # st.sidebar.write("**Developed by:**") | |
| # st.sidebar.write("[Srish Rachamalla](https://www.linkedin.com/in/srishrachamalla/)") | |
| # st.sidebar.write("[Sai Teja Pallerla](https://www.linkedin.com/in/saiteja-pallerla-668734225/)") | |
| # # Dropdown for city selection | |
| # selected_city = st.selectbox('Select a City', cities) | |
| # # Generate button | |
| # if st.button("Generate Gold Rates"): | |
| # # If it's the first time after 12:30 PM, fetch and save rates for all cities | |
| # if is_first_run_after_1230(): | |
| # fetch_and_save_all_cities() | |
| # st.success("Gold rates for all cities have been fetched and saved.") | |
| # # Fetch and display gold rates for the selected city | |
| # if selected_city: | |
| # date_today = datetime.datetime.now(ist_timezone).strftime("%Y-%m-%d") | |
| # city_url = f"https://www.goodreturns.in/gold-rates/{selected_city}.html" | |
| # try: | |
| # value_24k, value_22k, value_18k = price_cities(city_url) | |
| # insert_data_if_not_exists(selected_city, date_today, value_24k, value_22k, value_18k) | |
| # # Prepare data for current rates | |
| # current_data = { | |
| # 'Gold Purity': ['24K', '22K', '18K'], | |
| # '1g Price (₹)': [float(value_24k.replace(',', '')), float(value_22k.replace(',', '')), float(value_18k.replace(',', ''))], | |
| # '8g Price (₹)': [float(value_24k.replace(',', '')) * 8, float(value_22k.replace(',', '')) * 8, float(value_18k.replace(',', '')) * 8], | |
| # '10g Price (₹)': [float(value_24k.replace(',', '')) * 10, float(value_22k.replace(',', '')) * 10, float(value_18k.replace(',', '')) * 10] | |
| # } | |
| # # Display current data | |
| # df = pd.DataFrame(current_data) | |
| # st.write(f"Gold rates in {selected_city} as of {date_today}:") | |
| # st.dataframe(df.style.format(precision=2).set_properties(**{ | |
| # 'background-color': 'black', | |
| # 'color': 'white', | |
| # 'border-color': 'gray' | |
| # })) | |
| # # Weekly trend data | |
| # weekly_data = fetch_weekly_data(selected_city) | |
| # if weekly_data: | |
| # dates = [doc["Date"] for doc in weekly_data] | |
| # rates_24k = [doc["GoldRate_24k"] for doc in weekly_data] | |
| # rates_22k = [doc["GoldRate_22k"] for doc in weekly_data] | |
| # rates_18k = [doc["GoldRate_18k"] for doc in weekly_data] | |
| # # Plot weekly trends | |
| # plt.figure(figsize=(10, 5)) | |
| # plt.plot(dates, rates_24k, label="24K Gold", color="gold", marker='o') | |
| # plt.plot(dates, rates_22k, label="22K Gold", color="red", marker='o') | |
| # plt.plot(dates, rates_18k, label="18K Gold", color="brown", marker='o') | |
| # plt.title(f"Gold Rates Trend in {selected_city} (Past Week)") | |
| # plt.xlabel("Date") | |
| # plt.ylabel("Price (₹)") | |
| # plt.legend() | |
| # plt.xticks(rotation=45) | |
| # st.pyplot(plt) | |
| # except Exception as e: | |
| # st.error(f"Could not fetch the gold rates. Please try again. {e}") | |
| # # Footer | |
| # st.markdown("<br><hr><center><p style='color: grey;'>© 2024 All Rights Reserved</p></center><br>", unsafe_allow_html=True) | |
| import streamlit as st | |
| import requests | |
| import pandas as pd | |
| import pymongo | |
| import datetime | |
| import pytz | |
| from pymongo import MongoClient | |
| import plotly.graph_objs as go | |
| from plotly.subplots import make_subplots | |
| import os | |
| # Setting up IST timezone | |
| ist_timezone = pytz.timezone("Asia/Kolkata") | |
| Mongo_ip = os.getenv("Mongo_IP") | |
| # Connect to MongoDB | |
| MONGO_URI = Mongo_ip | |
| # client = MongoClient(MONGO_URI, ssl=True, ssl_cert_reqs=ssl.CERT_NONE) | |
| client = MongoClient( | |
| MONGO_URI, | |
| tls=True, tlsAllowInvalidCertificates=True) # Bypass SSL certificate verification | |
| db = client.GoldRates | |
| collection = db['GoldRates'] | |
| # List of cities | |
| cities = ['Hyderabad', 'Ahmedabad', 'Ayodhya', 'Bangalore', 'Bhubaneswar', 'Chandigarh', 'Chennai', | |
| 'Coimbatore', 'Delhi', 'Jaipur', 'Kerala', 'Kolkata', 'Lucknow', | |
| 'Madurai', 'Mangalore', 'Mumbai', 'Mysore', 'Nagpur', 'Nashik', 'Patna', | |
| 'Pune', 'Rajkot', 'Salem', 'Surat', 'Trichy', 'Vadodara', 'Vijayawada', 'Visakhapatnam'] | |
| # Backend functions | |
| def jina(url): | |
| base_url = "https://r.jina.ai/" | |
| response = requests.get(base_url + url) | |
| return response.text | |
| def price_cities(url): | |
| text = jina(url) | |
| pos1 = text.find('**') | |
| new = text[:pos1] | |
| twentytwok = new[int(new.find('22K')):int(new.find('24K'))] | |
| value_22k = twentytwok[int(twentytwok.find('\n\n') + 1): int(twentytwok.find('\n\n+'))][3:] | |
| value_22k = value_22k.split('\n')[0] | |
| twentyfourk = new[int(new.find('24K')):int(new.find('18K'))] | |
| value_24k = twentyfourk[int(twentyfourk.find('\n\n') + 1): int(twentyfourk.find('\n\n+'))][3:] | |
| value_24k = value_24k.split('\n')[0] | |
| eighteenk = new[int(new.find('18K')):] | |
| value_18k = eighteenk[int(eighteenk.find('\n\n') + 1): int(eighteenk.find('\n\n+'))][3:] | |
| value_18k = value_18k.split('\n')[0] | |
| return value_24k, value_22k, value_18k | |
| def insert_data_if_not_exists(city, date, value_24k, value_22k, value_18k): | |
| if not collection.find_one({"Date": date, "Place": city}): | |
| document = { | |
| "Date": date, | |
| "Place": city, | |
| "GoldRate_24k": float(value_24k.replace(',', '')), | |
| "GoldRate_22k": float(value_22k.replace(',', '')), | |
| "GoldRate_18k": float(value_18k.replace(',', '')) | |
| } | |
| collection.insert_one(document) | |
| def fetch_weekly_data(city): | |
| today = datetime.datetime.now(ist_timezone) | |
| start_date = today - datetime.timedelta(days=7) | |
| return list(collection.find({"Place": city, "Date": {"$gte": start_date.strftime("%Y-%m-%d")}}).sort("Date", -1)) | |
| def is_first_run_after_1230(): | |
| today = datetime.datetime.now(ist_timezone) | |
| time_check = today.replace(hour=12, minute=30, second=0, microsecond=0) | |
| date_check = today.strftime("%Y-%m-%d") | |
| return today >= time_check and not collection.find_one({"Date": date_check}) | |
| def fetch_and_save_all_cities(): | |
| date_today = datetime.datetime.now(ist_timezone).strftime("%Y-%m-%d") | |
| for city in cities: | |
| city_url = f"https://www.goodreturns.in/gold-rates/{city}.html" | |
| try: | |
| value_24k, value_22k, value_18k = price_cities(city_url) | |
| insert_data_if_not_exists(city, date_today, value_24k, value_22k, value_18k) | |
| except Exception as e: | |
| st.error(f"Could not fetch the gold rates for {city}. {e}") | |
| # Get last Friday's date | |
| def get_last_friday(): | |
| today = datetime.datetime.now(ist_timezone) | |
| last_friday = today - datetime.timedelta(days=(today.weekday() - 4) % 7) | |
| return last_friday.strftime("%Y-%m-%d") | |
| def fetch_historical_data(city, days=365): # Default to the past year | |
| end_date = datetime.datetime.now(ist_timezone) | |
| start_date = end_date - datetime.timedelta(days=days) | |
| return list(collection.find({"Place": city, "Date": {"$gte": start_date.strftime("%Y-%m-%d"), "$lte": end_date.strftime("%Y-%m-%d")}}).sort("Date", 1)) | |
| def display_city_gold_rates(city): | |
| today = datetime.datetime.now(ist_timezone) | |
| date_to_fetch = today.strftime("%Y-%m-%d") | |
| if today.weekday() >= 5: # Weekend | |
| st.info("Today is a weekend. Showing last available data.") | |
| # Attempt to retrieve document for today's date | |
| doc = collection.find_one({"Date": date_to_fetch, "Place": city}) | |
| if not doc: | |
| st.warning(f"No data found for {city} on {date_to_fetch}. Scraping for latest data...") | |
| city_url = f"https://www.goodreturns.in/gold-rates/{city}.html" | |
| try: | |
| value_24k, value_22k, value_18k = price_cities(city_url) | |
| insert_data_if_not_exists(city, date_to_fetch, value_24k, value_22k, value_18k) | |
| st.success(f"Fetched latest gold rates for {city}.") | |
| # Prepare current rates table with newly scraped data | |
| current_data = { | |
| 'Gold Purity': ['24K', '22K', '18K'], | |
| '1g Price (₹)': [float(value_24k.replace(',', '')), float(value_22k.replace(',', '')), float(value_18k.replace(',', ''))], | |
| '8g Price (₹)': [float(value_24k.replace(',', '')) * 8, float(value_22k.replace(',', '')) * 8, float(value_18k.replace(',', '')) * 8], | |
| '10g Price (₹)': [float(value_24k.replace(',', '')) * 10, float(value_22k.replace(',', '')) * 10, float(value_18k.replace(',', '')) * 10] | |
| } | |
| # Display current data | |
| df = pd.DataFrame(current_data) | |
| # st.dataframe(df) | |
| # Create a styled dataframe for Streamlit | |
| styled_df = df.style.format(precision=2).set_properties(**{ | |
| 'background-color': 'black', | |
| 'color': 'white', | |
| 'border-color': 'gray', | |
| 'font-size': '16px', | |
| 'text-align': 'center' | |
| }).set_table_attributes('style="width: 80%; margin: auto;"') # Center the table | |
| st.dataframe(styled_df) | |
| # Fetch historical data | |
| historical_data = fetch_historical_data(city) | |
| if historical_data: | |
| dates = [doc["Date"] for doc in historical_data] | |
| rates_24k = [doc["GoldRate_24k"] for doc in historical_data] | |
| rates_22k = [doc["GoldRate_22k"] for doc in historical_data] | |
| rates_18k = [doc["GoldRate_18k"] for doc in historical_data] | |
| # Create an interactive Plotly line chart for the historical data | |
| fig = make_subplots(specs=[[{"secondary_y": False}]]) | |
| # Add 24K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_24k, mode='lines+markers', name="24K Gold", | |
| line=dict(color="gold"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Add 22K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_22k, mode='lines+markers', name="22K Gold", | |
| line=dict(color="red"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Add 18K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_18k, mode='lines+markers', name="18K Gold", | |
| line=dict(color="brown"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Set chart titles and layout | |
| fig.update_layout( | |
| title_text=f"Gold Rates Trend in {city} (Historical Data)", | |
| xaxis_title="Date", | |
| yaxis_title="Price (₹)", | |
| hovermode="x unified", | |
| template="plotly_dark" | |
| ) | |
| # Display the interactive chart in Streamlit | |
| st.plotly_chart(fig, use_container_width=True) | |
| else: | |
| st.warning(f"No historical data found for {city}.") | |
| except Exception as e: | |
| st.error(f"Could not fetch the gold rates for {city}. {e}") | |
| return | |
| # else: | |
| # st.success(f"Gold Rates for {city} on {date_to_fetch}") | |
| # Prepare current rates table | |
| if doc: | |
| st.success(f"Gold Rates for {city} on {date_to_fetch}") | |
| # Prepare data for current rates | |
| current_data = { | |
| 'Gold Purity': ['24K', '22K', '18K'], | |
| '1g Price (₹)': [doc["GoldRate_24k"], doc["GoldRate_22k"], doc["GoldRate_18k"]], | |
| '8g Price (₹)': [doc["GoldRate_24k"] * 8, doc["GoldRate_22k"] * 8, doc["GoldRate_18k"] * 8], | |
| '10g Price (₹)': [doc["GoldRate_24k"] * 10, doc["GoldRate_22k"] * 10, doc["GoldRate_18k"] * 10] | |
| } | |
| # Display current data as a stylish table | |
| df = pd.DataFrame(current_data) | |
| # Create a styled dataframe for Streamlit | |
| styled_df = df.style.format(precision=2).set_properties(**{ | |
| 'background-color': 'black', | |
| 'color': 'white', | |
| 'border-color': 'gray', | |
| 'font-size': '16px', | |
| 'text-align': 'center' | |
| }).set_table_attributes('style="width: 80%; margin: auto;"') # Center the table | |
| st.dataframe(styled_df) | |
| # Fetch historical data | |
| historical_data = fetch_historical_data(city) | |
| if historical_data: | |
| dates = [doc["Date"] for doc in historical_data] | |
| rates_24k = [doc["GoldRate_24k"] for doc in historical_data] | |
| rates_22k = [doc["GoldRate_22k"] for doc in historical_data] | |
| rates_18k = [doc["GoldRate_18k"] for doc in historical_data] | |
| # Create an interactive Plotly line chart for the historical data | |
| fig = make_subplots(specs=[[{"secondary_y": False}]]) | |
| # Add 24K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_24k, mode='lines+markers', name="24K Gold", | |
| line=dict(color="gold"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Add 22K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_22k, mode='lines+markers', name="22K Gold", | |
| line=dict(color="red"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Add 18K data trace | |
| fig.add_trace( | |
| go.Scatter(x=dates, y=rates_18k, mode='lines+markers', name="18K Gold", | |
| line=dict(color="brown"), marker=dict(size=8)), | |
| secondary_y=False, | |
| ) | |
| # Set chart titles and layout | |
| fig.update_layout( | |
| title_text=f"Gold Rates Trend in {city} (Historical Data)", | |
| xaxis_title="Date", | |
| yaxis_title="Price (₹)", | |
| hovermode="x unified", | |
| template="plotly_dark" | |
| ) | |
| # Display the interactive chart in Streamlit | |
| st.plotly_chart(fig, use_container_width=True) | |
| else: | |
| st.warning(f"No historical data found for {city}.") | |
| # else: | |
| # st.warning(f"No data found for {city} on {date_to_fetch}.") | |
| # Main UI | |
| st.title('Gold Rates in Indian Cities') | |
| st.subheader('Select a city to view the current gold rates and a weekly trend.') | |
| st.sidebar.title("About the Project") | |
| st.sidebar.write("This project fetches current gold rates for 24K, 22K, and 18K gold from GoodReturns for 28 Indian states. The rates for 1g, 8g, and 10g are displayed.") | |
| st.sidebar.write("**Developed by:**") | |
| st.sidebar.write("[Srish Rachamalla](https://www.linkedin.com/in/srishrachamalla/)") | |
| st.sidebar.write("[Sai Teja Pallerla](https://www.linkedin.com/in/saiteja-pallerla-668734225/)") | |
| selected_city = st.selectbox('Select a City', cities) | |
| if st.button("Generate Gold Rates for Selected City"): | |
| if is_first_run_after_1230() and datetime.datetime.now(ist_timezone).weekday() not in [5, 6]: | |
| fetch_and_save_all_cities() | |
| st.success("Gold rates for all cities have been fetched and saved.") | |
| if selected_city: | |
| display_city_gold_rates(selected_city) | |
| if st.button("Generate All Gold Rates"): | |
| current_time = datetime.datetime.now(ist_timezone).time() | |
| if current_time >= datetime.time(13, 0) and datetime.datetime.now(ist_timezone).weekday() not in [5, 6]: | |
| for city in cities: | |
| if not collection.find_one({"Date": datetime.datetime.now(ist_timezone).strftime("%Y-%m-%d"), "Place": city}): | |
| city_url = f"https://www.goodreturns.in/gold-rates/{city}.html" | |
| try: | |
| value_24k, value_22k, value_18k = price_cities(city_url) | |
| insert_data_if_not_exists(city, datetime.datetime.now(ist_timezone).strftime("%Y-%m-%d"), value_24k, value_22k, value_18k) | |
| st.success(f"Gold rates for {city} saved successfully.") | |
| except Exception as e: | |
| st.error(f"Could not fetch the gold rates for {city}. {e}") | |
| st.success("Gold rates for all cities have been fetched and saved.") | |
| else: | |
| st.warning("Gold rates can only be saved to the database after 1 PM on weekdays.") | |
| for city in cities: | |
| st.subheader(f"Gold Rates in {city} as of {datetime.datetime.now(ist_timezone).strftime('%Y-%m-%d')}") | |
| display_city_gold_rates(city) | |