last30days-cn: a Chinese-platform research skill for coding agents
last30days-cn 是一个 AI Agent 技能(Skill),能够自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分析后生成有据可查的研究报告。
At a glance
- What is it?
- The project wraps eight Chinese content platforms behind one CLI and ships as an installable Agent Skill. It trades API keys for Playwright browser automation, and that trade is the whole story: fewer setup steps, more platform fragility.
- Who is it for?
- Adopt last30days-cn if your agent already runs Bash and you need recent Chinese-platform material compiled into one report, and you accept that most of its data comes from a browser it drives rather than from stable APIs. Do not adopt it if you need guaranteed uptime, commercial redistribution, or WeChat coverage, since that platform still expects WECHAT_API_KEY.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 58 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap it fills: Chinese platforms behind one dated window
Most research skills assume English-language sources. Search for a topic on a Chinese platform and the results arrive as a mix of undated reposts, engagement bait, and content from years ago. last30days-cn exists to collapse that into one pass: it queries eight platforms (Weibo, Xiaohongshu, Bilibili, Zhihu, Douyin, WeChat, Baidu, Toutiao) for content from the last 30 days, then asks the agent to synthesize a report with citations. The README describes it as an AI Agent skill that "自动搜索中国互联网 8 大主流平台最近 30 天的内容". The audience is narrow and specific: developers running Claude Code, Cursor, OpenClaw, or Gemini CLI who need a current read on a Chinese topic and do not want to hand-build scrapers for each site. It is not a general web search tool, and it is not a monitoring product. It is a one-shot research pass triggered from inside an agent session.
Three-tier fallback: API first, then Playwright, then public search
The architecture is a per-platform module layout (weibo.py, xiaohongshu.py, bilibili.py, zhihu.py, douyin.py, wechat.py, baidu.py, toutiao.py) behind a single entry point, last30days.py. Each module tries data sources in order. The README calls this "API 优先 → 爬虫模式 → 公开接口,三级自动降级". The middle tier is the interesting one: v2.0 integrated the MediaCrawler approach, driving a real Chromium through Playwright rather than reversing signing algorithms. That is why seven of eight platforms work without an API key. The v3.2.0 notes describe a further shift on Xiaohongshu: the crawler no longer depends on a fixed endpoint, and it identifies note cards in the response body instead of treating search/recommend suggestion items as notes. XHR interception replaced DOM parsing, and Bing fallback was added. Douyin and Toutiao got public-search-engine fallbacks so that a risk-control block does not silently return zero results (issue #8). The honest framing is that this is a scraping pipeline with graceful degradation, not an API client.
Installing it into an agent, and the config keys that matter
The recommended path is one command: npx skills add Jesseovo/last30days-skill-cn -g. Manual installs clone into the agent's skill directory, for example ~/.claude/skills/last30days-cn for Claude Code or ~/.agents/skills/last30days-cn for OpenClaw. The v3.0.0 release restructured the payload so that skills/last30days is independently installable, with scripts under skills/last30days/scripts and the root scripts/ kept for local development. Optional dependencies are jieba for Chinese tokenization (CJK bigram fallback works without it) and Playwright, installed with python -m pip install playwright followed by python -m playwright install chromium. Configuration lives in ~/.config/last30days-cn/.env, created with chmod 600 on Unix; the README also gives PowerShell equivalents and notes the permission models differ. The only API key named in the material is WECHAT_API_KEY, and the README marks it optional. Two environment switches control browser behaviour: LAST30DAYS_BROWSER_PATH points Playwright at a locally installed Chromium or Chrome, LAST30DAYS_BROWSER_CHANNEL=chrome selects an installed Chrome channel, and LAST30DAYS_DISABLE_BROWSER=1 skips browser calls entirely. The v3.0.0 notes also mention LAST30DAYS_DEFAULT_SEARCH and EXCLUDE_SOURCES as configuration switches, plus --as-of for historical backfill and --diagnose for live platform probing.
The browser dependency is the failure mode, not a footnote
Everything that makes setup easy makes operation brittle. Playwright-managed Chromium raises its system requirements over time, and the README devotes a section to old macOS: on Catalina and similar, the bundled browser may simply refuse to start. The workarounds are to point LAST30DAYS_BROWSER_PATH at a browser the OS still supports, fall back to public APIs and Bing site search, or disable the browser outright. The project itself states it will not download or upgrade a system browser. Beyond the OS question, the disclaimer concedes that platform interfaces change without notice and that login state, CAPTCHAs, and endpoint revisions affect the crawler. The README recommends spacing searches at least five seconds apart to avoid bans. Treat any single run as a sample of what was reachable at that moment, not a complete index. A topic whose discussion lives mainly in WeChat public accounts is also poorly served: that platform still depends on a key and Sogou search, and the crawler tier does not cover it. And if you need scheduled, high-frequency collection, this is the wrong shape of tool; the disclaimer explicitly forbids large-scale, high-frequency scraping.
How it differs from the upstream skill it forked
The direct alternative is mvanhorn/last30days-skill, the project this one is localized from. The difference is not cosmetic. Upstream targets platforms where official APIs and English-language search behave predictably; the fork replaces that with Playwright automation for Weibo, Xiaohongshu, Douyin, and fallback tiers for Bilibili and Zhihu, because those platforms either lack accessible APIs or gate them behind credentials. The fork also adds China-specific handling that has no upstream equivalent: date archiving normalized to Beijing time (CST) in v3.1.0, CJK bigram tokenization with jieba as an optional enhancement, and Bing site search as a fallback when a platform's own search is blocked. Upstream capabilities were synced back in v3.0.0, including --as-of, cross-platform aggregation, and HTML report XSS hardening. If your research targets English-language sources, upstream is the better fit. If it targets Chinese platforms, the fork is doing work upstream does not attempt. The trade is that the fork inherits the maintenance burden of every platform it scrapes.
Maintenance cost, licence status, and what the release notes imply
The version history shows what maintenance looks like here: v3.0.0, v3.1.0, and v3.2.0 are all fix-driven releases. Xiaohongshu's search page changed and broke note detection. Dates drifted on non-Beijing machines. A broken symlink in skills/last30days/SKILL.md caused npx installs to fail (issue #10). Each release is a response to something a platform changed or a user hit. Budget for that cadence if you depend on a specific platform. The release notes state that the full test suite passes with python -m pytest tests -q at 214 tests, and that both entry points were verified with py scripts/last30days.py --diagnose and py skills/last30days/scripts/last30days.py --diagnose. On licensing, the repository metadata reports NOASSERTION, meaning GitHub could not classify the licence file automatically. The README's disclaimer restricts use to learning and research, prohibits commercial use, and prohibits providing automated data collection as a service. Those are project-stated terms, not an OSI licence, and they sit alongside the upstream project's own terms. If you plan to ship this inside a product, read both repositories' licence files yourself; this review is not legal advice. The disclaimer also cites Chinese laws on cybersecurity, data security, personal information, and anti-unfair competition, and warns that users bear the legal risk.
Who should pick this up, and the first command to run
The fit is an engineer or analyst with an agent that supports Bash, Read, and Write, working on a Chinese-language topic, who wants one report rather than a scraper project. The misfit is anyone needing guaranteed availability, commercial deployment, or WeChat-first coverage. Between those, the deciding factor is tolerance for browser automation: if a failed Playwright launch on your OS is a blocker rather than an inconvenience, set LAST30DAYS_DISABLE_BROWSER=1 and accept the public-API and search-fallback tier, which covers Baidu and Toutiao well and the rest less so. The first thing to run after install is py scripts/last30days.py --diagnose. In v3.2.0 it prints browser mode, the external browser path, and whether that path exists, which is exactly the information needed to tell a broken browser from a blocked platform. If the diagnosis shows a platform unreachable, the report will say which paths were attempted rather than returning an empty result, and that distinction is the difference between a useful run and a misleading one.
Editorial conclusion
Adopt last30days-cn if your agent already runs Bash and you need recent Chinese-platform material compiled into one report, and you accept that most of its data comes from a browser it drives rather than from stable APIs. Do not adopt it if you need guaranteed uptime, commercial redistribution, or WeChat coverage, since that platform still expects WECHAT_API_KEY. Before trusting a run, execute py scripts/last30days.py --diagnose and read the platform availability lines, then confirm the report's dates are archived in CST as v3.1.0 claims.
Community notes