Skip to content

feat(xiaoe): add 小鹅通 (Xiaoe-tech) student platform adapter#617

Open
yulin7645 wants to merge 1 commit intojackwener:mainfrom
yulin7645:feat/xiaoe-adapter
Open

feat(xiaoe): add 小鹅通 (Xiaoe-tech) student platform adapter#617
yulin7645 wants to merge 1 commit intojackwener:mainfrom
yulin7645:feat/xiaoe-adapter

Conversation

@yulin7645
Copy link
Copy Markdown

Summary

  • Add 5 YAML adapters for 小鹅通 (xiaoe-tech.com), the leading Chinese online education platform with 1M+ instructors
  • Supports 3 course types: normal courses, columns, and big columns (大专栏)
  • Video play URL retrieval via direct API chain (detail_info.getgetPlayUrl), bypassing browser rendering (~1s vs ~15s)
  • Live replay support via Performance API + Vue component tree polling

Commands

Command Description
courses List purchased courses with URLs and shop names
detail <url> Course info (name, price, user count, shop)
catalog <url> Full course outline (chapters + lessons with type/status)
play-url <url> M3U8 play URL (API direct for video, polling for live replay)
content <url> Extract rich-text page content as plain text

Technical Details

  • Strategy: cookie — reuses Chrome login session via Vuex Store data extraction
  • Framework: Vue 2 + Vuex (SPA on *.h5.xet.citv.cn domains)
  • Video courses (v_ prefix): Two-step API → play_sign from detail_infogetPlayUrl returns M3U8. Sub-second latency.
  • Live replays (l_ prefix): M3U8 obtained via performance.getEntriesByType('resource') + Vue component tree deep search with 500ms polling
  • Catalog: Expands folded chapters by invoking Vue component's internal getSecitonList() method
  • Cross-store: Works across different xiaoe shops (each shop has its own subdomain)

Test Plan

  • opencli validate xiaoe — PASS (0 errors, 0 warnings)
  • courses — returns 16 purchased courses with correct URLs
  • detail — returns course name, price, user count
  • catalog on normal course (type 50) — 34 lessons across 7 chapters
  • catalog on big column (type 8) — 8 sub-columns
  • catalog on sub-column (type 6) — 5 video lessons
  • play-url on video course — method=api_direct, M3U8 obtained
  • play-url on live replay — method=perf_api, M3U8 obtained
  • Downloaded video via ffmpeg from obtained M3U8 — success
  • Tested after full logout + re-login — all commands pass
  • Tested across 2 different shops

🤖 Generated with Claude Code

Add 5 YAML adapters for 小鹅通 (xiaoe-tech.com), the leading Chinese
online education platform:

- courses: list purchased courses with URLs and shop names
- detail: course info (name, price, user count, shop)
- catalog: full course outline supporting normal courses (type 50),
  columns (type 6), and big columns (type 8)
- play-url: get M3U8 play URL via direct API for video courses,
  and Vue component tree search + Performance API polling for
  live replay courses
- content: extract rich-text page content as plain text

Technical notes:
- Strategy: cookie (reuses Chrome login session)
- Framework: Vue 2 + Vuex Store (SPA)
- Video courses use a two-step API chain:
  detail_info.get → play_sign → getPlayUrl → M3U8
- Live replays use Performance API + Vue data tree polling
- Catalog expands chapters via Vue component method getSecitonList()
- Supports multiple stores (cross-domain cookie sharing via
  study.xiaoe-tech.com)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant