- wechat channel now supports both search and read - Search: miku_ai (sogou weixin search) → article list with URLs - Read: camoufox (stealth Firefox) → full Markdown content - Doctor shows granular status (search only / read only / both) - SKILL.md updated with search + read workflow examples Co-authored-by: Panniantong <panniantong@users.noreply.github.com>
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""WeChat Official Account articles — read and search.
|
||
|
||
Read: wechat-article-for-ai (Camoufox stealth browser)
|
||
Search: miku_ai (Sogou WeChat search)
|
||
"""
|
||
|
||
import shutil
|
||
import subprocess
|
||
from .base import Channel
|
||
|
||
|
||
class WeChatChannel(Channel):
|
||
name = "wechat"
|
||
description = "微信公众号文章"
|
||
backends = ["wechat-article-for-ai (Camoufox)", "miku_ai (搜狗搜索)"]
|
||
tier = 2
|
||
|
||
def can_handle(self, url: str) -> bool:
|
||
from urllib.parse import urlparse
|
||
d = urlparse(url).netloc.lower()
|
||
return "mp.weixin.qq.com" in d or "weixin.qq.com" in d
|
||
|
||
def check(self, config=None):
|
||
has_read = False
|
||
has_search = False
|
||
|
||
try:
|
||
import camoufox # noqa: F401
|
||
has_read = True
|
||
except ImportError:
|
||
pass
|
||
|
||
try:
|
||
import miku_ai # noqa: F401
|
||
has_search = True
|
||
except ImportError:
|
||
pass
|
||
|
||
if has_read and has_search:
|
||
return "ok", "完整可用(搜索 + 阅读公众号文章)"
|
||
elif has_read:
|
||
return "ok", "可阅读公众号文章(URL → Markdown)。安装 miku_ai 可解锁搜索:pip install miku_ai"
|
||
elif has_search:
|
||
return "warn", (
|
||
"可搜索公众号文章但无法阅读全文。安装阅读工具:\n"
|
||
" pip install camoufox[geoip] markdownify beautifulsoup4 httpx mcp"
|
||
)
|
||
else:
|
||
return "off", (
|
||
"需要安装微信公众号工具:\n"
|
||
" # 阅读(URL → Markdown):\n"
|
||
" pip install camoufox[geoip] markdownify beautifulsoup4 httpx mcp\n"
|
||
" # 搜索(关键词 → 文章列表):\n"
|
||
" pip install miku_ai\n"
|
||
" 详见 https://github.com/bzd6661/wechat-article-for-ai"
|
||
)
|