File size: 6,587 Bytes
ea7a6df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f9b02ab
ea7a6df
 
 
 
 
52637d4
e25cdc2
ea7a6df
 
52637d4
ea7a6df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52637d4
ea7a6df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29463cb
ea7a6df
 
 
 
 
 
 
 
 
 
 
e25cdc2
 
 
 
ea7a6df
e25cdc2
 
 
 
 
 
ea7a6df
 
328eb6d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import os
from langchain.tools import Tool
from langchain_community.utilities import GoogleSearchAPIWrapper
import requests
from bs4 import BeautifulSoup
import google.generativeai as genai
import os
from dotenv import load_dotenv
import os
import google.generativeai as genai
import streamlit as st
import pandas as pd

# Load all the environment variables
load_dotenv()

# Initialte the Google Search
search = GoogleSearchAPIWrapper()

def top5_results(query):
    return search.results(query, 10)

def google_search(user_input):
    tool = Tool(
        name="Google Search Snippets",
        description="Search Google for recent news.",
        func=top5_results,
    )
    res = tool.run("Latest Stock news about" + user_input)
    print(res)
    urls = []
    for i in range(len(res)):
        print(res[i]['link'])
        urls.append(res[i]['link'])
    update = extract_content(urls,user_input)
    return update

def extract_content(urls,user_input):
    # Get the relevent element from the news
    content_list = []

    for url in urls:
        try:
            # Make an HTTP GET request to the URL
            response = requests.get(url)

            # Check if the request was successful (status code 200)
            if response.status_code == 200:
                # Parse the HTML content using BeautifulSoup
                soup = BeautifulSoup(response.text, 'html.parser')

                # Find and extract relevant content based on user input
                relevant_content = ""
                for paragraph in soup.find_all('p'):
                    if user_input.lower() in paragraph.get_text().lower():
                        relevant_content += paragraph.get_text() + '\n'

                # Append the relevant content to the list
                content_list.append({'url': url, 'content': relevant_content.strip()})

        except Exception as e:
            print(f"Error fetching content from {url}: {e}")

    # Print the extracted content
    for content in content_list:
        print(f"URL: {content['url']}")
        print(f"Relevant Content:\n{content['content']}\n{'='*50}\n")

    # Store the content into a list
    text_input = []
    for content in content_list:
        text_input.append(content['content'])
    
    update = initiate_gemini(text_input)
    return update

def initiate_gemini(text_input):
    # Initiate the Gemini pro
    genai.configure(api_key=os.environ.get("GOOGLE_API_KEY"))
    model = genai.GenerativeModel(model_name = "gemini-pro")
    genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
    update = input_prompt(text_input)
    return update

def get_gemini_response(input_text):
    model = genai.GenerativeModel('gemini-pro')
    response = model.generate_content(input_text)
    return response.text

def input_prompt(text_input):
    input_prompt = """
    You are an expert in stock market analysis. Your task is to conduct a thorough analysis of a specific stock based on recent news. Provide results only in English. Your detailed analysis should cover the following aspects:
    1. **SEBI Warning:**
    Begin with a disclaimer stating that the analysis is for informational purposes only. Include a SEBI warning to highlight the speculative nature of stock market investments.
    2. **Stock Information:**
    - Current market performance: Include recent stock prices, market capitalization, and any significant fluctuations.
    - Financial indicators: Provide key financial metrics such as earnings per share (EPS), price-to-earnings ratio (P/E), and debt-equity ratio.
    3. **Recent News Analysis in Detail:**
    - Summarize news articles related to the stock.
    - Assess the impact of each news piece on the stock's performance.
    - Identify any emerging trends or patterns.
    - Provide the Sentiment for each news with this block and should include the sentiment scale between 1 to 5
    4. **Short Story about the Stock:**
    - Provide a concise narrative on the stock's history and evolution.
    - Highlight key milestones, mergers, or acquisitions that have shaped its trajectory.
    5. **Key Strength:**
    - Identify and elaborate on the primary strengths of the stock.
    - Discuss factors such as competitive advantages, market leadership, or innovative products.
    6. **Key Weakness:**
    - Highlight the main weaknesses or challenges faced by the stock.
    - Consider factors such as industry competition, regulatory risks, or financial vulnerabilities.
    7. **Products:**
    - Describe the core products or services offered by the company.
    - Discuss the significance of these products in driving the stock's performance.
    For each section, provide detailed insights, backed by data and relevant examples. Ensure that your analysis is objective and considers both positive and negative aspects. Conclude with a summary that synthesizes the key findings and offers potential insights into the stock's future prospects.
    ---
    consider the following news for analysis. 
    Dont provide false dates
    """
    text_input.insert(0,input_prompt)
    #print(text_input)
    #print(stock_ref)
    response = get_gemini_response(text_input)
    print(response)
    return response


# Function to save feedback locally
def save_feedback(name, email, feedback):
    feedback_data = pd.DataFrame({'Name': [name], 'Email': [email], 'Feedback': [feedback]})
    
    # Check if the feedback file exists
    if not os.path.exists('feedback.csv'):
        feedback_data.to_csv('feedback.csv', index=False)
    else:
        # Append feedback to the existing file
        feedback_data.to_csv('feedback.csv', mode='a', header=False, index=False)

# Streamlit app
def main():
    st.title('Stock Insights App')

    # User Input
    user_input = st.text_input('Enter a Stock Name for analysis:', '')

    # Display response
    if st.button('Submit'):
        response = google_search(user_input)
        st.success('Analysis Result:')
        st.write(response)

    # Feedback box
    # st.subheader('Provide Feedback:')
    # name = st.text_input('Your Name*', '')
    # email = st.text_input('Your Email*', '')
    # feedback = st.text_area('Feedback*', '')
    
    # if st.button('Submit Feedback'):
        # if name.strip() == '' or email.strip() == '' or feedback.strip() == '':
            # st.markdown('<p style="color:red;">Please fill in all required fields.</p>', unsafe_allow_html=True)
        # else:
            # save_feedback(name, email, feedback)
            # st.success('Thank you for your feedback!')

# Execute the main function
main()