Importance Filtering
Filter news by importance level to control data volume:
// High-importance news only (9-10)
socket.emit('news:subscribe', {
minImportance: 9
});
// Medium-importance and above (6-10)
socket.emit('news:subscribe', {
minImportance: 6
});
Importance Levels:
10
- Market-moving breaking news
8-9
- High-impact company/sector news
6-7
- Notable market developments
4-5
- Regular business news
1-3
- Minor updates and announcements
Symbol Filtering
Subscribe to news for specific stocks:
// Single symbol
socket.emit('news:subscribe', {
symbol: 'AAPL',
minImportance: 6
});
// Multiple symbols (separate subscriptions)
const portfolio = ['AAPL', 'GOOGL', 'MSFT'];
portfolio.forEach(symbol => {
socket.emit('news:subscribe', {
symbol,
minImportance: 5
});
});
// Earnings reports only
socket.emit('news:subscribe', {
minImportance: 6
});
// Market and economy news
socket.emit('news:subscribe', {
minImportance: 7
});
socket.emit('news:subscribe', {
minImportance: 8
});
Combined Filtering
Use multiple filters together:
// High-importance AAPL news
socket.emit('news:subscribe', {
symbol: 'AAPL',
minImportance: 8,
startDate: '2024-01-01T00:00:00.000Z',
endDate: '2024-01-31T23:59:59.999Z'
});
// General high-importance market news
socket.emit('news:subscribe', {
minImportance: 7,
startDate: '2024-01-01T00:00:00.000Z'
});
Category filtering is not supported in subscriptions. The category
field is read-only and only appears in response data for classification purposes.
Client-Side Filtering
Additional filtering on received data:
socket.on('news:data', (response) => {
const { data } = response;
const { news } = data;
// Filter by category
const fedNews = news.filter(article =>
article.category === 'fed'
);
// Filter by sentiment
const positiveNews = news.filter(article =>
article.sentiment === 'positive'
);
// Filter by time (last 1 hour)
const recent = news.filter(article => {
const publishTime = new Date(article.date);
const hourAgo = new Date(Date.now() - 60 * 60 * 1000);
return publishTime > hourAgo;
});
// Filter by keywords in title
const filtered = news.filter(article =>
article.title.toLowerCase().includes('earnings') ||
article.title.toLowerCase().includes('acquisition')
);
// Filter by symbols
const appleNews = news.filter(article =>
article.symbols && article.symbols.includes('AAPL')
);
});
Subscription Management
Manage multiple filtered subscriptions:
class NewsSubscriptionManager {
constructor(socket) {
this.socket = socket;
this.subscriptions = new Map();
}
subscribe(id, filters) {
this.socket.emit('news:subscribe', filters);
this.subscriptions.set(id, filters);
}
unsubscribe(id) {
const filters = this.subscriptions.get(id);
if (filters) {
this.socket.emit('news:unsubscribe', filters);
this.subscriptions.delete(id);
}
}
updateSubscription(id, newFilters) {
this.unsubscribe(id);
this.subscribe(id, newFilters);
}
}
// Usage
const manager = new NewsSubscriptionManager(socket);
manager.subscribe('portfolio', {
symbol: 'AAPL',
minImportance: 6
});
manager.subscribe('market', {
minImportance: 8
});