config: Add 34 files
This commit is contained in:
87
server.js
Normal file
87
server.js
Normal file
@@ -0,0 +1,87 @@
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const path = require('path');
|
||||
const { scrapePBTechCPUs } = require('./scrapers/pbtech');
|
||||
const { fetchBenchmarkData, findBenchmarkScore } = require('./scrapers/cpubenchmark');
|
||||
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.static('public'));
|
||||
|
||||
// Server-Sent Events endpoint for real-time progress
|
||||
app.get('/api/scrape', async (req, res) => {
|
||||
// Set headers for SSE
|
||||
res.setHeader('Content-Type', 'text/event-stream');
|
||||
res.setHeader('Cache-Control', 'no-cache');
|
||||
res.setHeader('Connection', 'keep-alive');
|
||||
|
||||
// Helper function to send progress updates
|
||||
const sendProgress = (message) => {
|
||||
res.write(`data: ${JSON.stringify({ type: 'progress', message })}\n\n`);
|
||||
};
|
||||
|
||||
try {
|
||||
sendProgress('Starting CPU comparison...');
|
||||
|
||||
// Fetch CPUs from PB Tech
|
||||
sendProgress('Step 1/3: Fetching CPUs from PB Tech...');
|
||||
const cpus = await scrapePBTechCPUs(sendProgress);
|
||||
|
||||
if (cpus.length === 0) {
|
||||
sendProgress('No CPUs found on PB Tech. Please check the website.');
|
||||
res.write(`data: ${JSON.stringify({ type: 'error', message: 'No CPUs found' })}\n\n`);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch benchmark data
|
||||
sendProgress('Step 2/3: Fetching CPU benchmarks...');
|
||||
const benchmarkData = await fetchBenchmarkData(sendProgress);
|
||||
|
||||
// Match CPUs with benchmarks and calculate performance per dollar
|
||||
sendProgress('Step 3/3: Calculating performance per dollar...');
|
||||
|
||||
const results = [];
|
||||
for (let i = 0; i < cpus.length; i++) {
|
||||
const cpu = cpus[i];
|
||||
const benchmark = findBenchmarkScore(cpu.name, benchmarkData);
|
||||
|
||||
if (benchmark) {
|
||||
const performancePerDollar = benchmark / cpu.price;
|
||||
results.push({
|
||||
name: cpu.name,
|
||||
price: cpu.price,
|
||||
benchmark: benchmark,
|
||||
performancePerDollar: performancePerDollar,
|
||||
inStock: cpu.inStock
|
||||
});
|
||||
}
|
||||
|
||||
if ((i + 1) % 5 === 0) {
|
||||
sendProgress(`Processed ${i + 1}/${cpus.length} CPUs...`);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort by performance per dollar (descending)
|
||||
results.sort((a, b) => b.performancePerDollar - a.performancePerDollar);
|
||||
|
||||
sendProgress(`Found ${results.length} CPUs with benchmark data!`);
|
||||
sendProgress('Analysis complete!');
|
||||
|
||||
// Send final results
|
||||
res.write(`data: ${JSON.stringify({ type: 'complete', data: results })}\n\n`);
|
||||
res.end();
|
||||
|
||||
} catch (error) {
|
||||
console.error('Scraping error:', error);
|
||||
sendProgress(`Error: ${error.message}`);
|
||||
res.write(`data: ${JSON.stringify({ type: 'error', message: error.message })}\n\n`);
|
||||
res.end();
|
||||
}
|
||||
});
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Server running on http://localhost:${PORT}`);
|
||||
});
|
Reference in New Issue
Block a user