博客监控

v1.0.0

博客监控技能 - 监控博客和网站更新,通过RSS或网页变化检测。

0· 34·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for 534422530/laosi-blog-watcher.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "博客监控" (534422530/laosi-blog-watcher) from ClawHub.
Skill page: https://clawhub.ai/534422530/laosi-blog-watcher
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install laosi-blog-watcher

ClawHub CLI

Package manager switcher

npx clawhub@latest install laosi-blog-watcher
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
名称和描述(博客/网站更新监控)与 SKILL.md 中的代码、依赖和使用示例一致:使用 feedparser 读取 RSS,使用 requests + BeautifulSoup 抓取并基于内容哈希检测网页变化。唯一小不一致是 SKILL.md 的 metadata.requires 列出 feedparser 和 beautifulsoup4,但 pip 安装命令还包含 requests(metadata 未列出 requests)。
Instruction Scope
说明文件仅说明安装依赖并展示了在内存中保存哈希、请求任意 URL 并比较内容的逻辑;它不读取本地文件或环境凭据. 风险点是该代码会对用户添加的任意 URL 发起请求(这是预期功能),但如果被配置为访问内部/私有地址,可能被用于探测内部服务(SSRF 类风险)。SKILL.md 没有对可监控 URL 的限制或输入校验说明。
Install Mechanism
这是指令式技能(无 install spec),在 README 中建议使用 pip install 从 PyPI 安装 feedparser、beautifulsoup4、requests。直接使用 pip 安装常见依赖是合理的,但未固定版本会带来供应链/兼容性风险;没有指示在虚拟环境中安装。
Credentials
技能不请求任何环境变量、凭据或配置路径,所需访问仅限于网络请求(根据功能需要)。没有看到超出监控用途的不相干权限请求。
Persistence & Privilege
技能没有 always:true,也不声明修改代理或系统范围配置;这是一个按需调用的指令式技能,权限/持久性合理。
Assessment
此技能在功能上与描述一致,但在安装和使用时请注意:1) 在受信任或隔离的环境中运行并用 virtualenv/venv 安装依赖,避免在全局环境直接 pip install;2) 将依赖版本固定(例如 feedparser==x.y.z)以降低供应链风险;3) 小心添加要监控的 URL ——不要将内部/私有地址加入 watch list(以防 SSRF/探测);4) 如果长期运行,考虑持久化与重启后的哈希存储并添加速率限制、错误处理与 URL 白名单;5) metadata 与 pip 安装命令不完全匹配(requests 未列入 metadata),建议作者同步修正。

Like a lobster shell, security has layers — review code before you run it.

blogvk976ndk35qq8z8sbbaxxmzb8es85qp54latestvk976ndk35qq8z8sbbaxxmzb8es85qp54monitorvk976ndk35qq8z8sbbaxxmzb8es85qp54websitevk976ndk35qq8z8sbbaxxmzb8es85qp54
34downloads
0stars
1versions
Updated 7h ago
v1.0.0
MIT-0

Blog Watcher - 博客监控

激活词: 博客监控 / 网站更新 / 追踪博客

安装

pip install feedparser beautifulsoup4 requests

功能

  • RSS订阅监控
  • 网页变化检测
  • 定时检查
  • 通知提醒

Python函数

import feedparser
import hashlib
import requests
from bs4 import BeautifulSoup
from datetime import datetime

class BlogWatcher:
    def __init__(self):
        self.watch_list = []
        self.content_hashes = {}
    
    def add_blog(self, name: str, url: str, use_rss: bool = True):
        self.watch_list.append({
            'name': name,
            'url': url,
            'use_rss': use_rss,
        })
    
    def check_updates(self):
        results = []
        for blog in self.watch_list:
            if blog['use_rss']:
                result = self._check_rss(blog)
            else:
                result = self._check_webpage(blog)
            
            if result:
                results.append(result)
        
        return results
    
    def _check_rss(self, blog: dict) -> dict:
        feed = feedparser.parse(blog['url'])
        if feed.entries:
            latest = feed.entries[0]
            return {
                'name': blog['name'],
                'title': latest.title,
                'link': latest.link,
                'published': latest.get('published', 'Unknown'),
            }
        return None
    
    def _check_webpage(self, blog: dict) -> dict:
        response = requests.get(blog['url'])
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 获取页面标题
        title = soup.title.string if soup.title else 'No title'
        
        # 计算内容哈希
        content_hash = hashlib.md5(response.text.encode()).hexdigest()
        
        if blog['url'] in self.content_hashes:
            if self.content_hashes[blog['url']] != content_hash:
                self.content_hashes[blog['url']] = content_hash
                return {'name': blog['name'], 'title': title, 'updated': True}
        else:
            self.content_hashes[blog['url']] = content_hash
        
        return None

使用示例

watcher = BlogWatcher()

# 添加博客
watcher.add_blog('技术博客', 'https://blog.example.com/feed.xml')
watcher.add_blog('AI新闻', 'https://news.example.com/rss')

# 检查更新
updates = watcher.check_updates()
for update in updates:
    print(f"[{update['name']}] {update['title']}")

输出格式

## 博客更新

### 检测到 3 个更新

1. **技术博客**
   - 新文章: Python新特性解析
   - 链接: https://blog.example.com/post/123
   - 时间: 2026-04-28

2. **AI新闻**
   - 新文章: GPT-5发布
   - 链接: https://news.example.com/gpt5
   - 时间: 2026-04-28

Comments

Loading comments...