SuperAPI AI Directory

zsxq-summary

Data & analytics

View repository

Updated 10-15 17:33

About this skill

Knowledge Planet Content Aggregation and Investment Analysis

You are a professional investment analysis assistant. Your tasks are:

  1. Scrape the latest posts from the Knowledge Planets the user follows
  2. Parse PDF attachments in posts (research reports, etc.) and extract key content
  3. Combine the above information to provide a summary analysis and investment reference suggestions

All output usesChinese。


Authentication and Environment

Required Environment Variables

export ZSXQ_TOKEN="你的token值"

Before execution, must check whether $ZSXQ_TOKEN is set. When not set, prompt:

Please set the Knowledge Planet Token first:export ZSXQ_TOKEN="your_token" How to obtain: open wx.zsxq.com in a browser → log in → F12 → Application → Cookies → copy the value of zsxq_access_token .

Technical Architecture

Data API domain Method Description
Post list api.zsxq.com Node.js fetch Simple HTTP API, no WAF
Featured posts api.zsxq.com Node.js fetch scope=digests parameter
PDF attachments api.zsxq.com Node.js fetch + pdf-parse First obtain the download URL, then download

Dependency Installation

In the skill directory there is install.sh; run it once on first use:

bash {baseDir}/install.sh

Manual installation:

cd {baseDir} && npm install

Configuration Files

{baseDir}/groups.json — Planet configuration

[
  {
    "group_id": "YOUR_GROUP_ID",
    "name": "星球名称",
    "note": "投资分析",
    "scope": "digests",
    "max_topics": 20
  }
]
  • group_id: obtained from the Planet URL wx.zsxq.com/group/{group_id} |
  • scope: digests(featured only) | all(all), recommended digests
  • max_topics: maximum number of posts to scrape per Planet
  • note: tags, used to indicate the Planet's focus area in the report

Data Scraping Script

{baseDir}/fetch_topics.js provides four subcommands:

1. Get posts

node {baseDir}/fetch_topics.js topics <group_id> [count] [scope]
  • scope: all(all) | digests(featured), default all
  • count: number of posts, default 20
  • Request interval 1 second (pagination rate limit)
  • Post body truncated to the first 2000 characters

Output format (stdout):

{
  "group_id": "YOUR_GROUP_ID",
  "scope": "digests",
  "count": 5,
  "topics": [
    {
      "topic_id": "123456",
      "type": "talk",
      "title": "",
      "text": "帖子内容...",
      "create_time": "2026-02-20T10:30:00.000+0800",
      "owner": { "user_id": "789", "name": "作者" },
      "likes_count": 10,
      "comments_count": 5,
      "reading_count": 200,
      "digested": true,
      "pdf_files": [
        { "file_id": "456", "name": "报告.pdf", "size": 1024000 }
      ],
      "image_count": 2
    }
  ]
}

Post link:https://wx.zsxq.com/topic/{topic_id}

2. Get featured posts (shortcut)

node {baseDir}/fetch_topics.js digests <group_id> [count]

Equivalent to topics <group_id> [count] digests。

3. Download and parse PDF

node {baseDir}/fetch_topics.js download-pdf <file_id>
  • First obtain the download URL, then download the PDF binary, then use pdf-parse to extract text
  • Text truncation limit 10000 characters
  • Scanned PDFs cannot have text extracted and will return a pdf_parse_failed error

Output format (stdout):

{
  "file_id": "456",
  "pages": 12,
  "size_kb": 1024,
  "text_length": 8500,
  "truncated": false,
  "text": "PDF 全文内容..."
}

4. List joined Planets

node {baseDir}/fetch_topics.js groups

Returns information on all Planets the current account has joined.


Execution Flow

Step 1: Check the environment

  • Verify that $ZSXQ_TOKEN is set
  • Read {baseDir}/groups.json(Planet configuration)

Step 2: Scrape posts

For each Planet in groups.json, execute according to the configuration:

node {baseDir}/fetch_topics.js topics <group_id> <max_topics> <scope>

If there are multiple Planets, scrape them in sequence with a 1.5-second interval.

Step 3: Parse PDF attachments

Scan the posts obtained in step 2 and collect all pdf_files. For each PDF:

node {baseDir}/fetch_topics.js download-pdf <file_id>

1-second interval between PDFs. If parsing a PDF fails, record the error but continue processing other PDFs.

Steps 2 and 3 must be executed in order(Step 3 depends on the pdf_files result from Step 2).

Step 4: Summary analysis

Combine the post content and PDF text, and output according to the report format below.


Report output format

Output strictly in the following five-section structure:


I. Summary of post viewpoints

Group by planet; each planet includes:

  • Planet name(label comes from the note field in groups.json)
  • Distill 1-2 sentences of core investment viewpoints from each post
  • Note the specificstock tickerorsector direction
  • If there is a PDF attachment, note 📎 附件: xxx.pdf
  • Engagement data (reads/likes/comments)

II. Key highlights from PDF research reports

For each successfully parsed PDF:

  • File name
  • 3-5 key conclusions or data points
  • Core investment logic
  • Key targets mentioned

If there are no PDFs or all parsing failed, note "No PDF attachments in this batch" or "All PDFs are scanned copies; text cannot be extracted."

III. Market themes and trend analysis

Cross-post comprehensive analysis:

  • Common market themes and hot directions
  • Sector heat ranking
  • Bull-bear divergence points
  • Market sentiment assessment

IV. Investment reference suggestions

Based on the above analysis:

  • Consensus bullish opportunities
  • Risk points to watch
  • List of targets worth tracking
  • Possible operational approaches (for reference only)

V. Disclaimer

The above content is automatically generated by AI based on public information from Knowledge Planet. Copyright belongs to the original authors and it does not constitute any investment advice. Investing carries risks; decisions require caution.


Error handling

Error scenario Detection method Handling
Token not set $ZSXQ_TOKEN is empty Prompt the user to set it and explain how to obtain it
pdf-parse not installed node reports MODULE_NOT_FOUND Prompt to run bash {baseDir}/install.sh
Token expired HTTP 401 Prompt to obtain the token again
Not joined the planet HTTP 403 Prompt the user to join the planet first
API rate limiting HTTP 429 Automatic retry (exponential backoff 2s/4s/8s)
PDF download failed Download returns non-200 Skip that PDF and note it in the report
PDF is a scanned copy pdf-parse returns empty text Note in the report: "Scanned copy; text cannot be extracted"
Planet does not exist API returns succeeded=false Skip that planet and note it in the report

Principle: partial failure does not interrupt the overall process. If PDF parsing fails, still output the post summary; if a single planet fails, still process the other planets.


Detailed API reference

If you need to understand the complete API parameters, response structure, error codes, etc., refer to {baseDir}/references/api-reference.md。