Baseball Scores Middleware

node v18.11.0
version: 1.0.0
endpointsharetweet
const express = require('express'); const axios = require('axios'); const app = express(); const server = require('http').Server(app); const io = require('socket.io')(server); app.use(express.json()); async function fetchData() { // Get current date in Pacific Standard Time const currentDate = new Date(); const pacificOffset = 8 * 60; const localOffset = currentDate.getTimezoneOffset(); currentDate.setMinutes(currentDate.getMinutes() + pacificOffset - localOffset); const dateString = currentDate.toISOString().split('T')[0]; // Query first API endpoint const endpoint = `https://statsapi.mlb.com/api/v1/schedule?sportId=1&date=${dateString}`; const response = await axios.get(endpoint); const games = response.data.dates[0].games; const gameData = []; // Query second API endpoint for each gamePk for (const game of games) { const gamePk = game.gamePk; const gameEndpoint = `https://statsapi.mlb.com/api/v1.1/game/${gamePk}/feed/live`; const gameResponse = await axios.get(gameEndpoint); gameData.push(gameResponse.data); } return gameData; } let gameData = []; async function updateGameData() { const newGameData = await fetchData(); // Compare newGameData with gameData and emit changes via Socket.io for (let i = 0; i < newGameData.length; i++) { if (JSON.stringify(newGameData[i]) !== JSON.stringify(gameData[i])) { gameData[i] = newGameData[i]; io.emit('gameDataUpdate', gameData[i]); } } } // Periodically update game data every 2 seconds setInterval(updateGameData, 2000); io.on('connection', (socket) => { console.log('A user connected'); socket.emit('initialGameData', gameData); socket.on('disconnect', () => { console.log('A user disconnected'); }); }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });
Loading…

no comments

    sign in to comment