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
});