anatolyben/universal-event-parser
GitHub: anatolyben/universal-event-parser
一个用于从多个活动平台和通用 JSON-LD 中解析并规范化事件数据的 Node.js 框架,解决跨平台时间、时区和地点提取不一致的问题。
Stars: 0 | Forks: 0
# 通用 Event Parser
一个高级的、独立的的开源 Node.js 框架,用于解析和规范化来自 Partiful、Luma、Eventbrite、Facebook 等分散平台以及通用 JSON-LD 的事件数据。
## 问题所在
抓取事件页面是出了名的困难。提取标题和描述只是成功了一半。每个平台嵌入开始日期、结束日期和时区的方式各不相同。有些使用 microdata,有些将复杂的 JSON 数据块注入到 script 标签中,还有些依赖于通用的 Open Graph 标签。准确地确定真实的底层时间戳和地理位置,且不受抓取服务器时区的影响,是一个复杂的问题。
**Universal Event Parser** 通过提供统一的提取引擎解决了这个问题。它负责处理 URL 检测、特定平台的适配器(用于深度数据提取)、时区解析、字段置信度评分,甚至去重逻辑——所有这些都不会将你与特定的数据库或基础设施耦合在一起。
## 安装
```
npm install universal-event-parser
```
## 编程式用法
核心框架为构建事件聚合器的开发者提供了一个简洁的 API。它作为一个纯函数引擎运行。
```
import { parseEvent } from 'universal-event-parser';
// Parse a public event page
const eventData = await parseEvent('https://partiful.com/e/example123');
console.log(eventData.title); // Standardized title
console.log(eventData.startAt); // Normalized UTC timestamp
console.log(eventData.timezone); // Resolved timezone string
```
### 自定义抓取器和适配器
你可以通过 Registry 模式注入你自己的自定义平台适配器。
```
import { parseEvent, createDefaultRegistry } from 'universal-event-parser';
import { MyCustomAdapter } from './MyCustomAdapter.js';
const registry = createDefaultRegistry();
registry.registerAdapter(new MyCustomAdapter());
const eventData = await parseEvent('https://custom-site.com/events/1', { registry });
```
### 高级 SSRF 防护
默认情况下,该库使用原生的 `fetch` 来解析页面。如果你在暴露于不受信任的用户输入的生产环境中运行此解析器,我们强烈建议注入一个 SSRF 安全的 fetch 实现:
```
import { parseEvent } from 'universal-event-parser';
import { secureFetchHtml } from 'your-security-lib';
await parseEvent('https://luma.com/event', { fetchImpl: secureFetchHtml });
```
## Express 微服务用法
想要“解析即服务”?`universal-event-parser` 开箱即用地包含了一个 Express 微服务,并带有速率限制和 payload 验证功能。
启动服务器:
```
npm run start:server
```
发送提取请求:
```
curl -X POST http://localhost:3000/api/extract \
-H "Content-Type: application/json" \
-d '{"url": "https://partiful.com/e/example123"}'
```
你可以选择通过 payload 中的 `html` 字段传入预先抓取好的原始 HTML,以绕过网络请求。
## 架构
这个库被设计为一个**纯引擎**:
- **无数据库耦合**:我们提供标准化的 JSON;你可以按自己的意愿进行保存。
- **去重工具**:导出的实用工具函数可让你在将数据插入自己的数据库时对重复项进行评分并查找相似性。
- **依赖注入**:网络调用是解耦的,允许你传入自定义的 `fetch` 实现或使用预先下载的 HTML。
## 许可证
MIT
标签:Express, GNU通用公共许可证, MITM代理, Node.js, Web爬虫, 数据可视化, 数据解析, 自定义脚本