Skip to main content

Riocloud Reader

GitHub License Python

Universal content reader — fetch, transcribe, and digest content from 30+ platforms. Combines the best of x-reader and OpenClaw-DeepReeder.

Supported Platforms

Platform Text Fetch Video/Audio Transcript API Key Required Notes
🐦 Twitter/X FxTwitter API + Nitter fallback
🟠 Reddit Native .json API
🎬 YouTube transcripts in multiple languages
📰 WeChat (微信公众号) Jina + Playwright fallback
📕 Xiaohongshu (小红书) Playwright with session
📕 Bilibili (B站) Video metadata + subtitles
📡 RSS/Atom feedparser
💬 Telegram Telethon (requires API credentials)
🌐 Generic (any URL) Trafilatura + Jina Reader
📓 NotebookLM Google authentication

Platform Details

🐦 Twitter/X

  • Regular tweets with engagement stats (likes, RTs, views, bookmarks)
  • Long tweets (Twitter Blue)
  • X Articles (long-form content)
  • Quoted tweets (nested content)
  • Reply threads (up to 5 via Nitter fallback)
  • Profile snapshots

🟠 Reddit

  • Self posts (full markdown body)
  • Link posts (URL + metadata)
  • Top comments (up to 15, sorted by score)
  • Nested reply threads (up to 3 levels deep)
  • Media URLs (images, galleries, videos)
  • Post stats (score, comment count, upvote ratio)
  • Flair tags

🎬 YouTube

  • Video transcripts in multiple languages
  • Metadata (title, description, channel)
  • Support for youtube.com, youtu.be, youtube.com/embed

📰 WeChat (微信公众号)

  • Articles from official accounts
  • Jina Reader as primary fetcher
  • Playwright fallback for anti-scraping pages

📕 Xiaohongshu (小红书)

  • Notes and posts
  • Images and media URLs
  • Playwright with session for authenticated requests

📕 Bilibili (B站)

  • Video metadata
  • Subtitles
  • Support for bilibili.com and b23.tv short links

📡 RSS/Atom

  • Any standard RSS or Atom feed
  • Auto-detection of feed URLs

💬 Telegram

  • Channel messages
  • Requires TG_API_ID and TG_API_HASH from my.telegram.org

🌐 Generic (Any URL)

  • Any webpage via Trafilatura
  • Jina Reader as fallback
  • Best effort content extraction

📓 NotebookLM (Integration)

  • Upload content as sources
  • Generate Audio Overview (podcast-style)
  • Requires Google authentication

Installation

Basic Install

pip install git+https://github.com/Riocloud/riocloud-reader.git

With All Dependencies

pip install "riocloud-reader[all] @ git+https://github.com/Riocloud/riocloud-reader.git"
playwright install chromium

Optional Dependencies

# Browser support (WeChat, Xiaohongshu)
pip install "riocloud-reader[browser]"

# YouTube transcripts
pip install "riocloud-reader[youtube]"

# Telegram support
pip install "riocloud-reader[telegram]"

# NotebookLM integration
pip install "riocloud-reader[notebooklm]"

# Generic URL parsing
pip install "riocloud-reader[generic]"

# Development
pip install "riocloud-reader[dev]"

Usage

CLI

# Single URL
riocloud-reader https://twitter.com/user/status/123456
riocloud-reader https://youtube.com/watch?v=dQw4w9WgXcQ
riocloud-reader https://reddit.com/r/python/comments/abc123

# Multiple URLs
riocloud-reader https://url1.com https://url2.com

# Save to file
riocloud-reader https://example.com/article --output article.md

Python Library

import asyncio
from riocloud_reader import Reader

async def main():
    reader = Reader()
    
    # Single URL
    content = await reader.read("https://twitter.com/user/status/123456")
    print(content.title)
    print(content.content[:500])
    
    # Batch
    results = await reader.read_batch([
        "https://twitter.com/user/status/1",
        "https://reddit.com/r/python/comments/abc",
    ])

asyncio.run(main())

OpenClaw Skill

from skills.reader import run

# Read content directly into agent memory
result = run("Check out this: https://x.com/elonmusk/status/123456")

MCP Server

# Start MCP server
python -m riocloud_reader.mcp

# Configure in claude_desktop_config.json
{
  "mcpServers": {
    "riocloud-reader": {
      "command": "python",
      "args": ["-m", "riocloud_reader.mcp"]
    }
  }
}

Configuration

Environment Variables

Variable Required Description
TG_API_ID Telegram only From my.telegram.org
TG_API_HASH Telegram only From my.telegram.org
GROQ_API_KEY Whisper only Free from console.groq.com
FIRECRAWL_API_KEY Optional For paywalled content
DEEPREEDER_MEMORY_PATH Optional Where to save content

.env File

cp .env.example .env
# Edit with your credentials

Architecture

riocloud_reader/
├── parsers/
│   ├── base.py          # Base parser + ParseResult
│   ├── twitter.py       # Twitter/X (FxTwitter + Nitter)
│   ├── reddit.py        # Reddit (.json API)
│   ├── youtube.py       # YouTube transcripts
│   ├── wechat.py        # WeChat articles
│   ├── xhs.py           # Xiaohongshu
│   ├── bilibili.py      # Bilibili
│   ├── rss.py           # RSS/Atom
│   ├── telegram.py      # Telegram channels
│   └── generic.py       # Any URL (Trafilatura)
├── core/
│   ├── router.py        # URL → Parser routing
│   ├── storage.py       # File I/O
│   └── config.py        # Settings
├── skills/
│   └── reader/          # OpenClaw skill
├── integrations/
│   └── notebooklm.py   # NotebookLM API
├── mcp/
│   └── server.py        # MCP server
├── reader.py            # Main Reader class
└── schema.py           # Data models

Development

# Clone and install
git clone https://github.com/Riocloud/riocloud-reader.git
cd riocloud-reader
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black .
ruff check --fix .

License

MIT — Riocloud

Release files for riocloud-reader 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for riocloud-reader 1.0.0
File Size Uploaded
riocloud_reader-1.0.0.tar.gz 22.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for riocloud-reader 1.0.0
File Interpreter ABI Platform
riocloud_reader-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 46.6 kB

Release files / riocloud_reader-1.0.0.tar.gz

Download URL riocloud_reader-1.0.0.tar.gz
Size 22.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ee2c3b943b5101fbe56340b89e13073bb95b0301cc0e40d12e94aca896374f62
BLAKE2b-256 checksum
How to use checksums
d9d0bc2a0c830fff8ca8cd7e03864bfe88e983c6a1e394b9961919983620161d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.2

Release files / riocloud_reader-1.0.0-py3-none-any.whl

Download URL riocloud_reader-1.0.0-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b6a996d98a6e02d512910f879df1d1672f45f5ad6a41df9afcb900f86c331f1
BLAKE2b-256 checksum
How to use checksums
fbd623f4be617f95323e13599d595b27e1a37b1c805d68c1b30ba3702305375f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page