yao/rss/README.md

79 lines
2.3 KiB
Markdown

# rss
Parse, validate, discover, fetch, and build RSS 2.0 / Atom 1.0 feeds. Includes iTunes/Podcast extension support.
## Processes
### rss.Parse
Parse an RSS/Atom XML string into a Feed object. Auto-detects format.
```javascript
var feed = Process("rss.Parse", xmlString);
// feed.format → "rss2.0" or "atom1.0"
// feed.title → "My Blog"
// feed.items → [{title, link, description, content, author, published, ...}]
// feed.podcast → {author, summary, image, ...} (nil for non-podcast feeds)
```
### rss.Validate
Check if a string is valid RSS/Atom XML. Returns `true` on success, or an error description string.
```javascript
var result = Process("rss.Validate", xmlString);
if (result !== true) {
console.log("Invalid: " + result);
}
```
### rss.Fetch
Fetch a remote feed by URL. Supports gzip and conditional requests (ETag / Last-Modified).
```javascript
// First fetch
var result = Process("rss.Fetch", "https://example.com/feed.xml");
// result.feed → parsed Feed object
// result.status_code → 200
// result.etag → "abc123"
// result.last_modified → "Wed, 01 Jan 2025 00:00:00 GMT"
// Conditional polling (saves bandwidth)
var result2 = Process("rss.Fetch", "https://example.com/feed.xml", {
etag: result.etag,
last_modified: result.last_modified,
});
// result2.not_modified → true (when 304)
// result2.feed → nil (when 304)
```
**Options** (second argument, optional):
| Field | Type | Default | Description |
| -------------- | ------ | ---------------- | ------------------------------- |
| user_agent | string | "Yao-Robot/1.0" | Custom User-Agent |
| timeout | int | 30 | Request timeout in seconds |
| etag | string | | ETag for If-None-Match |
| last_modified | string | | Value for If-Modified-Since |
### rss.Discover
Extract feed URLs from HTML, Markdown, or plain text. No HTTP requests.
```javascript
var links = Process("rss.Discover", htmlString);
// links → [{url: "https://example.com/feed.xml", title: "Blog", type: "rss"}]
```
### rss.Build
Generate RSS or Atom XML from a Feed object.
```javascript
// Build RSS 2.0 (default)
var xml = Process("rss.Build", feedObj);
// Build Atom 1.0
var xml = Process("rss.Build", feedObj, "atom");
```