- Add RSS news crawler with 5 international medical tech news sources - Configure GitHub Actions for automated bi-daily news updates - Implement smart data loading with fallback mechanism - Clean up mock data (reduced from 55+ items to 1 fallback item) - Add comprehensive documentation and troubleshooting guide - Create verification and testing scripts Key Features: - Real-time news from MedTech Dive, Medical Device Network, etc. - Automated crawling via GitHub Actions (8:00 & 20:00 Beijing time) - Graceful degradation when crawler data unavailable - Date parsing fixes and User-Agent configuration - 20 real news articles successfully crawled Documentation: - NEWS_CRAWLER_USAGE.md - User guide - NEWS_CRAWLER_IMPROVEMENTS.md - Implementation details - REAL_NEWS_CRAWLER_DESIGN.md - Architecture design - TROUBLESHOOTING.md - Debug guide - test-news-data.html - Browser testing tool 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
144 lines
4.9 KiB
JSON
144 lines
4.9 KiB
JSON
{
|
|
"name": "omniverse-news-crawler",
|
|
"version": "1.0.0",
|
|
"lockfileVersion": 3,
|
|
"requires": true,
|
|
"packages": {
|
|
"": {
|
|
"name": "omniverse-news-crawler",
|
|
"version": "1.0.0",
|
|
"dependencies": {
|
|
"node-fetch": "^3.3.2",
|
|
"rss-parser": "^3.13.0"
|
|
}
|
|
},
|
|
"node_modules/data-uri-to-buffer": {
|
|
"version": "4.0.1",
|
|
"resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
|
|
"integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
|
|
"engines": {
|
|
"node": ">= 12"
|
|
}
|
|
},
|
|
"node_modules/entities": {
|
|
"version": "2.2.0",
|
|
"resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
|
|
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
|
|
"funding": {
|
|
"url": "https://github.com/fb55/entities?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/fetch-blob": {
|
|
"version": "3.2.0",
|
|
"resolved": "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz",
|
|
"integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/jimmywarting"
|
|
},
|
|
{
|
|
"type": "paypal",
|
|
"url": "https://paypal.me/jimmywarting"
|
|
}
|
|
],
|
|
"dependencies": {
|
|
"node-domexception": "^1.0.0",
|
|
"web-streams-polyfill": "^3.0.3"
|
|
},
|
|
"engines": {
|
|
"node": "^12.20 || >= 14.13"
|
|
}
|
|
},
|
|
"node_modules/formdata-polyfill": {
|
|
"version": "4.0.10",
|
|
"resolved": "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
|
|
"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
|
|
"dependencies": {
|
|
"fetch-blob": "^3.1.2"
|
|
},
|
|
"engines": {
|
|
"node": ">=12.20.0"
|
|
}
|
|
},
|
|
"node_modules/node-domexception": {
|
|
"version": "1.0.0",
|
|
"resolved": "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz",
|
|
"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
|
|
"deprecated": "Use your platform's native DOMException instead",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/jimmywarting"
|
|
},
|
|
{
|
|
"type": "github",
|
|
"url": "https://paypal.me/jimmywarting"
|
|
}
|
|
],
|
|
"engines": {
|
|
"node": ">=10.5.0"
|
|
}
|
|
},
|
|
"node_modules/node-fetch": {
|
|
"version": "3.3.2",
|
|
"resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz",
|
|
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
|
"dependencies": {
|
|
"data-uri-to-buffer": "^4.0.0",
|
|
"fetch-blob": "^3.1.4",
|
|
"formdata-polyfill": "^4.0.10"
|
|
},
|
|
"engines": {
|
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
},
|
|
"funding": {
|
|
"type": "opencollective",
|
|
"url": "https://opencollective.com/node-fetch"
|
|
}
|
|
},
|
|
"node_modules/rss-parser": {
|
|
"version": "3.13.0",
|
|
"resolved": "https://registry.npmmirror.com/rss-parser/-/rss-parser-3.13.0.tgz",
|
|
"integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==",
|
|
"dependencies": {
|
|
"entities": "^2.0.3",
|
|
"xml2js": "^0.5.0"
|
|
}
|
|
},
|
|
"node_modules/sax": {
|
|
"version": "1.4.1",
|
|
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
|
|
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
|
|
},
|
|
"node_modules/web-streams-polyfill": {
|
|
"version": "3.3.3",
|
|
"resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
|
|
"integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
|
|
"engines": {
|
|
"node": ">= 8"
|
|
}
|
|
},
|
|
"node_modules/xml2js": {
|
|
"version": "0.5.0",
|
|
"resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz",
|
|
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
|
|
"dependencies": {
|
|
"sax": ">=0.6.0",
|
|
"xmlbuilder": "~11.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=4.0.0"
|
|
}
|
|
},
|
|
"node_modules/xmlbuilder": {
|
|
"version": "11.0.1",
|
|
"resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
|
|
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
|
|
"engines": {
|
|
"node": ">=4.0"
|
|
}
|
|
}
|
|
}
|
|
}
|