Add Yelp Fusion API proxy endpoint for dynamic map search

This commit is contained in:
2026-04-29 15:43:40 +00:00
parent 0d01b83af6
commit 47acadc88c

View File

@@ -360,6 +360,62 @@ app.post('/api/polls', (req, res) => {
res.json({ success: true, pollsOpen: data.pollsOpen }); res.json({ success: true, pollsOpen: data.pollsOpen });
}); });
// ── Yelp Fusion API proxy ───────────────────────────────────
// API key lives server-side — never exposed to the browser.
// Get your free key at: https://www.yelp.com/developers
const YELP_API_KEY = process.env.YELP_API_KEY || '';
app.get('/api/yelp', async (req, res) => {
const { term, location } = req.query;
if (!term) return res.status(400).json({ error: 'term is required' });
if (!YELP_API_KEY) {
return res.status(503).json({
error: 'YELP_API_KEY not configured on server. Add it as an environment variable.'
});
}
try {
const params = new URLSearchParams({
term: term + ' in ' + location,
location: location || 'Los Cabos Mexico',
limit: '15',
sort_by: 'rating',
categories: 'restaurants,nightlife,active,arts,health',
});
const response = await fetch(`https://api.yelp.com/v3/businesses/search?${params}`, {
headers: {
'Authorization': `Bearer ${YELP_API_KEY}`,
'Accept': 'application/json',
}
});
if (!response.ok) {
const errText = await response.text();
return res.status(response.status).json({ error: `Yelp API error: ${errText}` });
}
const data = await response.json();
// Return only the fields we need to keep payload small
const businesses = (data.businesses || []).map(b => ({
name: b.name,
image_url: b.image_url,
url: b.url,
rating: b.rating,
price: b.price,
coordinates: b.coordinates,
location: b.location,
categories: b.categories,
display_phone: b.display_phone,
distance: b.distance,
}));
res.json({ businesses, total: data.total });
} catch (err) {
console.error('Yelp proxy error:', err);
res.status(500).json({ error: 'Failed to fetch from Yelp' });
}
});
// ── WebSocket ──────────────────────────────────────────────── // ── WebSocket ────────────────────────────────────────────────
wss.on('connection', (ws) => { wss.on('connection', (ws) => {