social-reader
by @hacksing
Social media content scraping and automation skill. Supports real-time single post reading, as well as scheduled batch patrol, LLM distillation, and review n...
clawhub install social-readerπ About This Skill
name: social-reader description: Social media content scraping and automation skill. Supports real-time single post reading, as well as scheduled batch patrol, LLM distillation, and review notifications.
Social Reader Skill
This skill provides a social media content scraping and monitoring workflow. It offers two usage modes:
Dependencies
pip install requests
Configuration Files
| File | Purpose |
|------|---------|
| prompt.txt | LLM system prompt for the Processor node |
| sources.json | List of monitored accounts and fetch intervals (pipeline mode) |
| input_urls.txt | Manually entered post URLs (one per line, # for comments) |
| seen_ids.json | Deduplication cache for seen post IDs (pipeline mode only) |
| pending_tweets.json | Queue of unprocessed posts from the Watcher |
| drafts.json | LLM-distilled drafts from the Processor |
| archive.json | Archived history records |
Environment Variables (required only for Pipeline Mode Processor)
| Variable | Description | Default |
|----------|-------------|---------|
| LLM_API_KEY | LLM API key (required) | None |
| LLM_BASE_URL | API endpoint | https://api.openai.com/v1 |
| LLM_MODEL | Model name | gpt-4o-mini |
Mode 1: Agent Interactive Call (Recommended)
When a user sends a social media post link and asks you to "read and discuss" or "generate a quality reply", call fetcher.py directly β do NOT use run_pipeline.py.
run_pipeline.py triggers deduplication cache, fixed LLM distillation, and browser popups, which are unsuitable for interactive scenarios.
Usage Example
import sysskill_dir = r"d:\AIWareTop\Agent\openclaw-skills\social-reader"
if skill_dir not in sys.path:
sys.path.append(skill_dir)
from fetcher import get_tweet
result = get_tweet("https://x.com/user/status/123456")
if result.get("success"):
content = result["content"]
# Now you can discuss the content with the user or generate a reply
get_tweet() Return Structure
{
"source": "fxtwitter",
"success": true,
"type": "tweet",
"content": {
"text": "Post body text",
"author": "Display name",
"username": "Username handle",
"created_at": "Publish time",
"likes": 123,
"retweets": 45,
"views": 6789,
"replies": 10,
"media": ["image_url_1", "image_url_2"]
}
}
When type is "article" (long-form post), content additionally contains:
title: Article titlepreview: Preview textfull_text: Full article body (Markdown format)cover_image: Cover image URLThis call is completely stateless β it writes no cache files and triggers no notification services.
Mode 2: Background Pipeline Batch Processing
Use run_pipeline.py to chain Watcher β Processor β Action nodes. Suitable for scheduled tasks or batch processing.
Three Core Nodes
1. Watcher (watcher.py)
- Reads input_urls.txt or sources.json, deduplicates via seen_ids.json, writes new posts to pending_tweets.json.
2. Processor (processor.py)
- Reads pending_tweets.json, calls LLM to generate commentary, outputs to drafts.json.
- Requires LLM_API_KEY environment variable.
3. Action (notifier.py)
- Starts a local HTTP review server (port 18923), opens a browser review page with approve/reject/rewrite/archive controls.
CLI Examples
# Full pipeline
python run_pipeline.pySpecific URL
python run_pipeline.py https://x.com/elonmusk/status/123456Single node execution
python run_pipeline.py --watch-only
python run_pipeline.py --process-only
python run_pipeline.py --notify-only