Akshayram1 commited on
Commit
74265b0
·
verified ·
1 Parent(s): a90c02a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +2 -36
app.py CHANGED
@@ -9,31 +9,9 @@ nltk.downloader.download('vader_lexicon')
9
  from nltk.sentiment.vader import SentimentIntensityAnalyzer
10
  import datetime
11
  import requests
12
- from http.server import SimpleHTTPRequestHandler, HTTPServer
13
- from socketserver import ThreadingMixIn
14
- import threading
15
-
16
- # Enable CORS with a custom handler
17
- class CORSRequestHandler(SimpleHTTPRequestHandler):
18
- def end_headers(self):
19
- self.send_header('Access-Control-Allow-Origin', '*')
20
- self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
21
- self.send_header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type')
22
- SimpleHTTPRequestHandler.end_headers(self)
23
-
24
- class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
25
- """Handle requests in a separate thread."""
26
-
27
- def run_server(port=8501):
28
- server_address = ('', port)
29
- httpd = ThreadedHTTPServer(server_address, CORSRequestHandler)
30
- print(f'Serving on port {port}')
31
- httpd.serve_forever()
32
-
33
- # Streamlit page config
34
  st.set_page_config(page_title="Stock News Sentiment Analyzer", layout="wide")
35
 
36
- # Function to verify a link
37
  def verify_link(url, timeout=10, retries=3):
38
  for _ in range(retries):
39
  try:
@@ -44,7 +22,6 @@ def verify_link(url, timeout=10, retries=3):
44
  continue
45
  return False
46
 
47
- # Get news for a stock ticker from FinViz
48
  def get_news(ticker):
49
  finviz_url = 'https://finviz.com/quote.ashx?t='
50
  url = finviz_url + ticker
@@ -54,7 +31,6 @@ def get_news(ticker):
54
  news_table = html.find(id='news-table')
55
  return news_table
56
 
57
- # Parse news headlines and links
58
  def parse_news(news_table):
59
  parsed_news = []
60
 
@@ -87,7 +63,6 @@ def parse_news(news_table):
87
 
88
  return parsed_news_df
89
 
90
- # Score news sentiment using Vader
91
  def score_news(parsed_news_df):
92
  vader = SentimentIntensityAnalyzer()
93
 
@@ -99,7 +74,6 @@ def score_news(parsed_news_df):
99
 
100
  return parsed_and_scored_news
101
 
102
- # Plot hourly sentiment scores
103
  def plot_hourly_sentiment(parsed_and_scored_news, ticker):
104
  numeric_cols = parsed_and_scored_news.select_dtypes(include=['float64', 'int64'])
105
  mean_scores = numeric_cols.resample('h').mean()
@@ -118,7 +92,6 @@ def plot_hourly_sentiment(parsed_and_scored_news, ticker):
118
 
119
  return fig
120
 
121
- # Plot daily sentiment scores
122
  def plot_daily_sentiment(parsed_and_scored_news, ticker):
123
  numeric_cols = parsed_and_scored_news.select_dtypes(include=['float64', 'int64'])
124
  mean_scores = numeric_cols.resample('D').mean()
@@ -137,7 +110,6 @@ def plot_daily_sentiment(parsed_and_scored_news, ticker):
137
 
138
  return fig
139
 
140
- # Generate a stock recommendation based on sentiment
141
  def get_recommendation(sentiment_scores):
142
  avg_sentiment = sentiment_scores['sentiment_score'].mean()
143
 
@@ -148,7 +120,6 @@ def get_recommendation(sentiment_scores):
148
  else:
149
  return f"Neutral sentiment (Score: {avg_sentiment:.2f}). The recent news doesn't show a strong bias. Consider holding if you own the stock, or watch for more definitive trends before making a decision."
150
 
151
- # Streamlit UI
152
  st.header("Stock News Sentiment Analyzer")
153
 
154
  ticker = st.text_input('Enter Stock Ticker', '').upper()
@@ -193,15 +164,10 @@ except Exception as e:
193
  print(str(e))
194
  st.write("Enter a correct stock ticker, e.g. 'AAPL' above and hit Enter.")
195
 
196
- # Hide Streamlit menu and footer
197
  hide_streamlit_style = """
198
  <style>
199
  #MainMenu {visibility: hidden;}
200
  footer {visibility: hidden;}
201
  </style>
202
  """
203
- st.markdown(hide_streamlit_style, unsafe_allow_html=True)
204
-
205
- # Start CORS-enabled server
206
- if __name__ == "__main__":
207
- run_server()
 
9
  from nltk.sentiment.vader import SentimentIntensityAnalyzer
10
  import datetime
11
  import requests
12
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  st.set_page_config(page_title="Stock News Sentiment Analyzer", layout="wide")
14
 
 
15
  def verify_link(url, timeout=10, retries=3):
16
  for _ in range(retries):
17
  try:
 
22
  continue
23
  return False
24
 
 
25
  def get_news(ticker):
26
  finviz_url = 'https://finviz.com/quote.ashx?t='
27
  url = finviz_url + ticker
 
31
  news_table = html.find(id='news-table')
32
  return news_table
33
 
 
34
  def parse_news(news_table):
35
  parsed_news = []
36
 
 
63
 
64
  return parsed_news_df
65
 
 
66
  def score_news(parsed_news_df):
67
  vader = SentimentIntensityAnalyzer()
68
 
 
74
 
75
  return parsed_and_scored_news
76
 
 
77
  def plot_hourly_sentiment(parsed_and_scored_news, ticker):
78
  numeric_cols = parsed_and_scored_news.select_dtypes(include=['float64', 'int64'])
79
  mean_scores = numeric_cols.resample('h').mean()
 
92
 
93
  return fig
94
 
 
95
  def plot_daily_sentiment(parsed_and_scored_news, ticker):
96
  numeric_cols = parsed_and_scored_news.select_dtypes(include=['float64', 'int64'])
97
  mean_scores = numeric_cols.resample('D').mean()
 
110
 
111
  return fig
112
 
 
113
  def get_recommendation(sentiment_scores):
114
  avg_sentiment = sentiment_scores['sentiment_score'].mean()
115
 
 
120
  else:
121
  return f"Neutral sentiment (Score: {avg_sentiment:.2f}). The recent news doesn't show a strong bias. Consider holding if you own the stock, or watch for more definitive trends before making a decision."
122
 
 
123
  st.header("Stock News Sentiment Analyzer")
124
 
125
  ticker = st.text_input('Enter Stock Ticker', '').upper()
 
164
  print(str(e))
165
  st.write("Enter a correct stock ticker, e.g. 'AAPL' above and hit Enter.")
166
 
 
167
  hide_streamlit_style = """
168
  <style>
169
  #MainMenu {visibility: hidden;}
170
  footer {visibility: hidden;}
171
  </style>
172
  """
173
+ st.markdown(hide_streamlit_style, unsafe_allow_html=True)