Spaces:
Running
Running
import streamlit as st | |
import time | |
import requests | |
from bs4 import BeautifulSoup | |
from datetime import date | |
import openai | |
import smtplib | |
from email.mime.text import MIMEText | |
from email.mime.multipart import MIMEMultipart | |
import requests | |
import json | |
from groq import Groq | |
import os | |
template = """Shared with you the horoscopes of today, this week, and this month for a couple. | |
Your task is to analyse them provide insights to the couple from all the horoscopes. | |
If you find any event or scenarios mentioned in this month's horoscope and that event is not mentioned in this week's horoscope, consider that as a predicting next week's scenarios. | |
If you find any event or scenarios mentioned in this week's horoscope and that event is not mentioned in today's horoscope, consider that for predicting tommorow's scenarios. | |
Add a section for Today's HoroScope Summary for Husband. | |
Add a section for Today's HoroScope Summary for Wife. | |
Add a section for Couple's HoroScope Insights For This Month. | |
Add a section to aware the couple for any upcoming negative traits or events or scenarios. | |
Add a section to notify about all the Lucky Dates. | |
Add a section for Next Week's Prediction and Tommorow's Prediction. | |
Add a section of Couple Compatibility based on the moon signs of the couple, use your own knowledge and intelligence to deduce it. | |
Use BOLD headlines for all sections using MARKDOWN (**bold**). | |
Use bullets for details for all sections. | |
Add EMOJI for headlines to look interesting. | |
""" | |
def get_daily_pred(url): | |
URL = url | |
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"} | |
r = requests.get(URL,headers=headers) | |
soup = BeautifulSoup(r.content, 'html.parser') # If this line causes an error, run 'pip install html5lib' or install html5lib | |
#print(soup.prettify()) | |
elements = soup.find_all("div", class_="daily-horo text-center") | |
today=elements[0].text.strip() | |
return(today) | |
def get_monthly_pred(url): | |
URL = url | |
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"} | |
r = requests.get(URL,headers=headers) | |
soup = BeautifulSoup(r.content, 'html.parser') # If this line causes an error, run 'pip install html5lib' or install html5lib | |
#print(soup.prettify()) | |
article_block =soup.find_all('div', class_="monthly-content") | |
data=[] | |
for articles in article_block: | |
br = articles.find_all('br') | |
for val in br: | |
br_val = val.text.strip() | |
data.append(br_val) | |
monthly = ' '.join(map(str, data)) | |
mday=article_block[0].text.strip() | |
return(mday) | |
def get_weekly_pred(url): | |
URL = url | |
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"} | |
r = requests.get(URL,headers=headers) | |
soup = BeautifulSoup(r.content, 'html.parser') # If this line causes an error, run 'pip install html5lib' or install html5lib | |
#print(soup.prettify()) | |
article_block =soup.find_all('div', class_="daily-horo text-center") | |
data=[] | |
for articles in article_block: | |
br = articles.find_all('br') | |
for val in br: | |
br_val = val.text.strip() | |
data.append(br_val) | |
weekly = ' '.join(map(str, data)) | |
wday=article_block[0].text.strip() | |
return(wday) | |
def predict_horoscope(m_sign, f_sign,strtime,m_daily_pred,f_daily_pred,m_monthly_pred,f_monthly_pred,m_weekly_pred,f_weekly_pred): | |
# Add your horoscope prediction logic here | |
client = Groq() | |
client = Groq(api_key = os.getenv("GROQ_API_KEY")) | |
chatresponse = client.chat.completions.create( | |
model="deepseek-r1-distill-llama-70b", | |
messages=[ | |
{"role": "system", "content": "You are a Horoscope Analyser. Think step by step. Answer in details with professional and dramatic tone"}, | |
{"role": "user", "content": template}, | |
{"role": "user", "content": "Today's date is: " + strtime}, | |
{"role": "user", "content": "Husband's Moon Sign: " + m_sign}, | |
{"role": "user", "content": "Wife's Moon Sign: " + f_sign}, | |
{"role": "user", "content": "Husband Daily Horoscope: " + m_daily_pred}, | |
{"role": "user", "content": "Husband Weekly Horoscope: " + m_weekly_pred}, | |
{"role": "user", "content": "Husband Monthly Horoscope: " + m_monthly_pred}, | |
{"role": "user", "content": "Wife Daily Horoscope: " + f_daily_pred}, | |
{"role": "user", "content": "Wife Weekly Horoscope: " + f_weekly_pred}, | |
{"role": "user", "content": "Wife Monthly Horoscope: " + f_monthly_pred} | |
], | |
temperature=0.6, | |
stop=None, | |
stream=False | |
) | |
time.sleep(1) | |
prediction = chatresponse.choices[0].message.content | |
return prediction | |
def send_email(email,msg,stdate): | |
# Your Gmail credentials | |
sender_email = "[email protected]" | |
sender_password = "ibxccfsdcyzeittm" | |
# Recipient email address | |
receiver_email = email | |
message = MIMEMultipart("alternative") | |
message["Subject"] = "Horoscope Insights of " + stdate | |
message["From"] = sender_email | |
message["To"] = receiver_email | |
text = msg | |
part1 = MIMEText(text, "plain") | |
message.attach(part1) | |
server = smtplib.SMTP('smtp.gmail.com', 587) | |
server.starttls() | |
server.login(sender_email, sender_password) | |
server.sendmail(sender_email, receiver_email, message.as_string()) | |
server.quit() | |
st.success("Email sent successfully!") | |
#yagmail | |
def send_yagmail(email,msg,stdate): | |
import yagmail | |
#receiver = email | |
#body = "Hello there from Yagmail HF" | |
#filename = "document.pdf" | |
sender_email = "[email protected]" | |
sender_password = "ibxccfsdcyzeittm" | |
yag = yagmail.SMTP(sender_email,sender_password) | |
yag.send( | |
to=email, | |
subject="Horoscope Insights of " + stdate, | |
contents=msg | |
#attachments=filename, | |
) | |
st.success("Yagmail sent successfully!") | |
def send_brevomail(email,msg,stdate): | |
url = 'https://api.brevo.com/v3/smtp/email' | |
headers = { | |
'accept': 'application/json', | |
'api-key': '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', | |
'content-type': 'application/json' | |
} | |
sender_email = "[email protected]" | |
receiver_email = email | |
subject = "Your Horoscope for " + stdate | |
body = "<html><head></head><body><p>Hello, here is your today's hororscope in short...</p>"+msg+"</p></body></html>" | |
data = { | |
"sender": { | |
"name": "Einstein AI", | |
"email": sender_email | |
}, | |
"to": [ | |
{ | |
"email": receiver_email | |
} | |
], | |
"subject": subject, | |
"htmlContent": body | |
} | |
try: | |
response = requests.post(url, headers=headers, data=json.dumps(data)) | |
if response.status_code == 200: | |
st.success("Email sent successfully!") | |
#print(response.text) | |
else: | |
st.error(f"Error {response.status_code}: {response.text}") | |
except requests.exceptions.HTTPError as errh: | |
st.error(f"HTTP Error: {errh}") | |
except requests.exceptions.ConnectionError as errc: | |
st.error(f"Error Connecting: {errc}") | |
except requests.exceptions.Timeout as errt: | |
st.error(f"Timeout Error: {errt}") | |
except requests.exceptions.RequestException as err: | |
st.error(f"An unexpected error occurred: {err}") | |
def main(): | |
st.set_page_config( | |
page_title="Horoscope Insights", | |
page_icon="♏", | |
layout="wide" | |
) | |
st.title("Couple's Horoscope Insights") | |
st.markdown('Based on **Moon Signs** and **Vedic Astrology**. Get your Moon Sign from [here](https://instaastro.com/vedic-astrology/moon-sign-calculator/)') | |
signs = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", | |
"Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"] | |
col1, col2 = st.columns(2) # Create two columns | |
with col1: | |
male_sign = st.selectbox("Choose Husband's Moon Sign", signs) | |
with col2: | |
female_sign = st.selectbox("Choose Wife's Moon Sign", signs) | |
m_sign= male_sign | |
f_sign= female_sign | |
m_url_daily="https://www.indastro.com/horoscope/"+m_sign+"-daily-horoscope.html" | |
f_url_daily="https://www.indastro.com/horoscope/"+f_sign+"-daily-horoscope.html" | |
m_url_monthly="https://www.indastro.com/horoscope/"+m_sign+"-monthly-horoscope.html" | |
f_url_monthly="https://www.indastro.com/horoscope/"+f_sign+"-monthly-horoscope.html" | |
m_url_weekly="https://www.indastro.com/horoscope/weekly-horoscope/"+m_sign+".html" | |
f_url_weekly="https://www.indastro.com/horoscope/weekly-horoscope/"+f_sign+".html" | |
m_daily_pred = get_daily_pred(m_url_daily) | |
f_daily_pred = get_daily_pred(f_url_daily) | |
m_monthly_pred = get_monthly_pred(m_url_monthly) | |
f_monthly_pred = get_monthly_pred(f_url_monthly) | |
m_weekly_pred = get_weekly_pred(m_url_weekly) | |
f_weekly_pred = get_weekly_pred(f_url_weekly) | |
today = date.today() | |
strtime = today.strftime("%d-%B-%Y") | |
pred = [] | |
if st.button("Show Insights"): | |
with st.spinner("Generating Insights..."): | |
prediction = predict_horoscope(m_sign, f_sign,strtime,m_daily_pred,f_daily_pred,m_monthly_pred,f_monthly_pred,m_weekly_pred,f_weekly_pred) | |
st.info("**Today's is**: " + strtime + " | **Husband's Moon Sign**: " + m_sign + " | **Wife's Moon Sign**: " + f_sign) | |
title = "Today's is: " + strtime + " | Husband's Moon Sign: " + m_sign + " | Wife's Moon Sign: " + f_sign | |
#st.success("Insight generated!") | |
pred.append(prediction) | |
st.markdown(prediction) | |
#st.text(prediction) | |
email = st.text_input("Enter email address", "") | |
if st.button("Send Email"): | |
remail=email.strip() | |
msg = ' '.join(map(str, pred)) | |
if msg == '' : | |
st.error("Message Body is Null") | |
else: | |
send_brevomail(remail,msg,strtime) | |
time.sleep(2) | |
st.success("Have a Great Day !") | |
if __name__ == '__main__': | |
main() |