CephasAldrich commited on
Commit
e581869
·
verified ·
1 Parent(s): 3c0d1d0

Update main.js

Browse files
Files changed (1) hide show
  1. main.js +74 -0
main.js CHANGED
@@ -72,3 +72,77 @@ setInterval(fetchTweets, 300000);
72
  // Initial fetch
73
  fetchTweets();
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  // Initial fetch
73
  fetchTweets();
74
 
75
+ let tweets = [];
76
+
77
+ function updateStats() {
78
+ document.getElementById('active-disasters').textContent =
79
+ tweets.filter(t => t.isDisaster).length;
80
+ document.getElementById('urgent-cases').textContent =
81
+ tweets.filter(t => t.sentiment === 'Urgent').length;
82
+ document.getElementById('total-tweets').textContent = tweets.length;
83
+ }
84
+
85
+ function getSentimentClass(sentiment) {
86
+ switch(sentiment) {
87
+ case 'Urgent': return 'sentiment-urgent';
88
+ case 'Neutral': return 'sentiment-neutral';
89
+ case 'Not Urgent': return 'sentiment-not-urgent';
90
+ default: return '';
91
+ }
92
+ }
93
+
94
+ function formatTimestamp(timestamp) {
95
+ return new Date(timestamp).toLocaleTimeString();
96
+ }
97
+
98
+ function renderTweets() {
99
+ const feed = document.getElementById('tweet-feed');
100
+ if (tweets.length === 0) {
101
+ feed.innerHTML = '<p>No new tweets available. This may be due to rate limiting or no recent disaster-related tweets.</p>';
102
+ } else {
103
+ feed.innerHTML = tweets.map(tweet => `
104
+ <div class="tweet">
105
+ <div class="tweet-header">
106
+ <strong>Disaster Alert</strong>
107
+ <span class="sentiment-badge ${getSentimentClass(tweet.sentiment)}">
108
+ ${tweet.sentiment.toUpperCase()}
109
+ </span>
110
+ </div>
111
+ <div class="tweet-content">
112
+ ${tweet.text}
113
+ </div>
114
+ <div class="tweet-footer">
115
+ <div class="location">
116
+ 📍 ${tweet.location}
117
+ </div>
118
+ <div style="margin-left: auto">
119
+ ${formatTimestamp(tweet.timestamp)}
120
+ </div>
121
+ </div>
122
+ </div>
123
+ `).join('');
124
+ }
125
+ }
126
+
127
+ function fetchTweets() {
128
+ fetch('/api/predict')
129
+ .then(response => response.json())
130
+ .then(data => {
131
+ if (data.error) {
132
+ console.error('Error:', data.error);
133
+ return;
134
+ }
135
+ const newTweets = JSON.parse(data.data);
136
+ tweets = [...newTweets, ...tweets].slice(0, 100); // Keep only the latest 100 tweets
137
+ updateStats();
138
+ renderTweets();
139
+ })
140
+ .catch(error => console.error('Error:', error));
141
+ }
142
+
143
+ // Fetch tweets every 5 minutes (300000 ms) instead of every 30 seconds
144
+ setInterval(fetchTweets, 300000);
145
+
146
+ // Initial fetch
147
+ fetchTweets();
148
+