const express = require('express'); const axios = require('axios'); const cheerio = require('cheerio'); const cors = require('cors'); const app = express(); const PORT = 3213; // 引入并使用cors中间件,允许所有跨域访问 app.use(cors()); app.get('/api/minm/open', async (req, res) => { try { const { data } = await axios.get('https://stockanalysis.com/quote/otc/MINM/'); const $ = cheerio.load(data); let openValue = null; let volumeValue = null; let daysRangeValue = null; let week52RangeValue = null; let marketCapValue = null; let changeValue = []; const priceDiv = $("div.text-4xl.font-bold.transition-colors.duration-300.inline-block").first(); const price = priceDiv.text().trim(); const changeDiv = priceDiv.next("div.font-semibold.inline-block.text-2xl.text-red-vivid"); const change = changeDiv.text().trim(); if (price && change) { changeValue = [price, change]; } $('td').each((i, el) => { if ($(el).text().trim() === 'Open') { openValue = $(el).next('td').text().trim(); } if ($(el).text().trim() === 'Volume') { volumeValue = $(el).next('td').text().trim(); } if ($(el).text().trim() === "Day's Range") { daysRangeValue = $(el).next('td').text().trim(); } if ($(el).text().trim() === '52-Week Range') { week52RangeValue = $(el).next('td').text().trim(); } if ($(el).text().trim() === 'Market Cap') { marketCapValue = $(el).next('td').text().trim(); } }); if (openValue && volumeValue && daysRangeValue && week52RangeValue && marketCapValue && changeValue.length === 2) { res.json({ Open: openValue, Volume: volumeValue, DaysRange: daysRangeValue, Week52Range: week52RangeValue, MarketCap: marketCapValue, change: changeValue }); } else { res.status(404).json({ error: '未找到全部数据', Open: openValue, Volume: volumeValue, DaysRange: daysRangeValue, Week52Range: week52RangeValue, MarketCap: marketCapValue, change: changeValue }); } } catch (err) { res.status(500).json({ error: '请求或解析失败', detail: err.message }); } }); app.listen(PORT, () => { console.log(`Server running at http://localhost:${PORT}`); });