Baseball Scores Middleware
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}`);
});
no comments