feat: implement stats history, growth tracking, and mermaid trend charts
This commit is contained in:
18
README.md
18
README.md
@@ -8,7 +8,7 @@ A collection of enhancements, plugins, and prompts for [OpenWebUI](https://githu
|
||||
<!-- STATS_START -->
|
||||
## 📊 Community Stats
|
||||
|
||||
> 🕐 Auto-updated: 2026-02-11 11:11
|
||||
> 🕐 Auto-updated: 2026-02-11 11:40
|
||||
|
||||
| 👤 Author | 👥 Followers | ⭐ Points | 🏆 Contributions |
|
||||
| :---: | :---: | :---: | :---: |
|
||||
@@ -16,20 +16,20 @@ A collection of enhancements, plugins, and prompts for [OpenWebUI](https://githu
|
||||
|
||||
| 📝 Posts | ⬇️ Downloads | 👁️ Views | 👍 Upvotes | 💾 Saves |
|
||||
| :---: | :---: | :---: | :---: | :---: |
|
||||
| **22** | **4154** | **49223** | **231** | **274** |
|
||||
| **22** | **4154** | **45888** | **231** | **274** |
|
||||
|
||||
### 🔥 Top 6 Popular Plugins
|
||||
|
||||
> 🕐 Auto-updated: 2026-02-11 11:11
|
||||
> 🕐 Auto-updated: 2026-02-11 11:40
|
||||
|
||||
| Rank | Plugin | Version | Downloads | Views | Updated |
|
||||
| :---: | :--- | :---: | :---: | :---: | :---: |
|
||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-28 |
|
||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6695 | 2026-01-30 |
|
||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3022 | 2026-02-07 |
|
||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3750 | 2026-01-28 |
|
||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-09 |
|
||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4706 | 2026-01-29 |
|
||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-29 |
|
||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6698 | 2026-01-31 |
|
||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3026 | 2026-02-07 |
|
||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3754 | 2026-01-29 |
|
||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-10 |
|
||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4710 | 2026-01-29 |
|
||||
|
||||
*See full stats in [Community Stats Report](./docs/community-stats.md)*
|
||||
<!-- STATS_END -->
|
||||
|
||||
18
README_CN.md
18
README_CN.md
@@ -7,7 +7,7 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
|
||||
<!-- STATS_START -->
|
||||
## 📊 社区统计
|
||||
|
||||
> 🕐 自动更新于 2026-02-11 11:11
|
||||
> 🕐 自动更新于 2026-02-11 11:40
|
||||
|
||||
| 👤 作者 | 👥 粉丝 | ⭐ 积分 | 🏆 贡献 |
|
||||
| :---: | :---: | :---: | :---: |
|
||||
@@ -15,20 +15,20 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
|
||||
|
||||
| 📝 发布 | ⬇️ 下载 | 👁️ 浏览 | 👍 点赞 | 💾 收藏 |
|
||||
| :---: | :---: | :---: | :---: | :---: |
|
||||
| **22** | **4154** | **49223** | **231** | **274** |
|
||||
| **22** | **4154** | **45888** | **231** | **274** |
|
||||
|
||||
### 🔥 热门插件 Top 6
|
||||
|
||||
> 🕐 自动更新于 2026-02-11 11:11
|
||||
> 🕐 自动更新于 2026-02-11 11:40
|
||||
|
||||
| 排名 | 插件 | 版本 | 下载 | 浏览 | 更新日期 |
|
||||
| :---: | :--- | :---: | :---: | :---: | :---: |
|
||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-28 |
|
||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6695 | 2026-01-30 |
|
||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3022 | 2026-02-07 |
|
||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3750 | 2026-01-28 |
|
||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-09 |
|
||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4706 | 2026-01-29 |
|
||||
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-29 |
|
||||
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6698 | 2026-01-31 |
|
||||
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3026 | 2026-02-07 |
|
||||
| 4️⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3754 | 2026-01-29 |
|
||||
| 5️⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-10 |
|
||||
| 6️⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4710 | 2026-01-29 |
|
||||
|
||||
*完整统计请查看 [社区统计报告](./docs/community-stats.zh.md)*
|
||||
<!-- STATS_END -->
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
{
|
||||
"total_posts": 22,
|
||||
"total_downloads": 4154,
|
||||
"total_views": 49223,
|
||||
"total_views": 45888,
|
||||
"total_upvotes": 231,
|
||||
"total_downvotes": 2,
|
||||
"total_saves": 274,
|
||||
"total_comments": 55,
|
||||
"by_type": {
|
||||
"unknown": 5,
|
||||
"filter": 2,
|
||||
"post": 3,
|
||||
"filter": 4,
|
||||
"pipe": 1,
|
||||
"action": 14
|
||||
"action": 12,
|
||||
"prompt": 1,
|
||||
"review": 1
|
||||
},
|
||||
"posts": [
|
||||
{
|
||||
@@ -25,8 +27,8 @@
|
||||
"upvotes": 22,
|
||||
"saves": 50,
|
||||
"comments": 13,
|
||||
"created_at": "2025-12-30",
|
||||
"updated_at": "2026-01-28",
|
||||
"created_at": "2025-12-31",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a"
|
||||
},
|
||||
{
|
||||
@@ -37,12 +39,12 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "AI-powered infographic generator based on AntV Infographic. Supports professional templates, auto-icon matching, and SVG/PNG downloads.",
|
||||
"downloads": 706,
|
||||
"views": 6695,
|
||||
"views": 6698,
|
||||
"upvotes": 24,
|
||||
"saves": 34,
|
||||
"comments": 10,
|
||||
"created_at": "2025-12-28",
|
||||
"updated_at": "2026-01-30",
|
||||
"updated_at": "2026-01-31",
|
||||
"url": "https://openwebui.com/posts/smart_infographic_ad6f0c7f"
|
||||
},
|
||||
{
|
||||
@@ -53,7 +55,7 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "Export current conversation from Markdown to Word (.docx) with Mermaid diagrams rendered client-side (Mermaid.js, SVG+PNG), LaTeX math, real hyperlinks, improved tables, syntax highlighting, and blockquote support.",
|
||||
"downloads": 383,
|
||||
"views": 3022,
|
||||
"views": 3026,
|
||||
"upvotes": 14,
|
||||
"saves": 26,
|
||||
"comments": 5,
|
||||
@@ -64,17 +66,17 @@
|
||||
{
|
||||
"title": "Async Context Compression",
|
||||
"slug": "async_context_compression_b1655bc8",
|
||||
"type": "action",
|
||||
"type": "filter",
|
||||
"version": "1.2.2",
|
||||
"author": "Fu-Jie",
|
||||
"description": "Reduces token consumption in long conversations while maintaining coherence through intelligent summarization and message compression.",
|
||||
"downloads": 363,
|
||||
"views": 3750,
|
||||
"views": 3754,
|
||||
"upvotes": 14,
|
||||
"saves": 34,
|
||||
"comments": 0,
|
||||
"created_at": "2025-11-08",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/async_context_compression_b1655bc8"
|
||||
},
|
||||
{
|
||||
@@ -90,18 +92,18 @@
|
||||
"saves": 6,
|
||||
"comments": 0,
|
||||
"created_at": "2025-05-30",
|
||||
"updated_at": "2026-02-09",
|
||||
"updated_at": "2026-02-10",
|
||||
"url": "https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d"
|
||||
},
|
||||
{
|
||||
"title": "Markdown Normalizer",
|
||||
"slug": "markdown_normalizer_baaa8732",
|
||||
"type": "action",
|
||||
"type": "filter",
|
||||
"version": "1.2.4",
|
||||
"author": "Fu-Jie",
|
||||
"description": "A content normalizer filter that fixes common Markdown formatting issues in LLM outputs, such as broken code blocks, LaTeX formulas, and list formatting.",
|
||||
"downloads": 341,
|
||||
"views": 4706,
|
||||
"views": 4710,
|
||||
"upvotes": 17,
|
||||
"saves": 30,
|
||||
"comments": 5,
|
||||
@@ -117,18 +119,18 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "Quickly generates beautiful flashcards from text, extracting key points and categories.",
|
||||
"downloads": 226,
|
||||
"views": 3385,
|
||||
"views": 3387,
|
||||
"upvotes": 13,
|
||||
"saves": 14,
|
||||
"comments": 2,
|
||||
"created_at": "2025-12-30",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/flash_card_65a2ea8f"
|
||||
},
|
||||
{
|
||||
"title": "AI Task Instruction Generator",
|
||||
"slug": "ai_task_instruction_generator_9bab8b37",
|
||||
"type": "unknown",
|
||||
"type": "prompt",
|
||||
"version": "",
|
||||
"author": "",
|
||||
"description": "",
|
||||
@@ -165,7 +167,7 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "将对话导出为 Word (.docx),支持 Mermaid 图表 (客户端渲染 SVG+PNG)、LaTeX 数学公式、真实超链接、增强表格格式、代码高亮和引用块。",
|
||||
"downloads": 128,
|
||||
"views": 2218,
|
||||
"views": 2219,
|
||||
"upvotes": 13,
|
||||
"saves": 7,
|
||||
"comments": 4,
|
||||
@@ -181,7 +183,7 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.",
|
||||
"downloads": 107,
|
||||
"views": 2401,
|
||||
"views": 2402,
|
||||
"upvotes": 14,
|
||||
"saves": 9,
|
||||
"comments": 6,
|
||||
@@ -234,7 +236,7 @@
|
||||
"saves": 2,
|
||||
"comments": 0,
|
||||
"created_at": "2025-12-31",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b"
|
||||
},
|
||||
{
|
||||
@@ -250,7 +252,7 @@
|
||||
"saves": 5,
|
||||
"comments": 0,
|
||||
"created_at": "2025-11-08",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/异步上下文压缩_5c0617cb"
|
||||
},
|
||||
{
|
||||
@@ -266,7 +268,7 @@
|
||||
"saves": 1,
|
||||
"comments": 0,
|
||||
"created_at": "2025-12-30",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/闪记卡生成插件_4a31eac3"
|
||||
},
|
||||
{
|
||||
@@ -293,7 +295,7 @@
|
||||
"author": "Fu-Jie",
|
||||
"description": "A specialized filter to bypass OpenWebUI's default RAG for GitHub Copilot SDK models. It moves uploaded files to a safe location ('copilot_files') so the Copilot Pipe can process them natively without interference.",
|
||||
"downloads": 16,
|
||||
"views": 840,
|
||||
"views": 847,
|
||||
"upvotes": 3,
|
||||
"saves": 0,
|
||||
"comments": 0,
|
||||
@@ -304,12 +306,12 @@
|
||||
{
|
||||
"title": "🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks",
|
||||
"slug": "github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293",
|
||||
"type": "unknown",
|
||||
"type": "post",
|
||||
"version": "",
|
||||
"author": "",
|
||||
"description": "",
|
||||
"downloads": 0,
|
||||
"views": 261,
|
||||
"views": 268,
|
||||
"upvotes": 5,
|
||||
"saves": 0,
|
||||
"comments": 0,
|
||||
@@ -320,28 +322,28 @@
|
||||
{
|
||||
"title": "🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager",
|
||||
"slug": "open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e",
|
||||
"type": "unknown",
|
||||
"type": "post",
|
||||
"version": "",
|
||||
"author": "",
|
||||
"description": "",
|
||||
"downloads": 0,
|
||||
"views": 1522,
|
||||
"views": 1523,
|
||||
"upvotes": 12,
|
||||
"saves": 19,
|
||||
"comments": 8,
|
||||
"created_at": "2026-01-25",
|
||||
"updated_at": "2026-01-28",
|
||||
"updated_at": "2026-01-29",
|
||||
"url": "https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e"
|
||||
},
|
||||
{
|
||||
"title": "Review of Claude Haiku 4.5",
|
||||
"slug": "review_of_claude_haiku_45_41b0db39",
|
||||
"type": "unknown",
|
||||
"type": "review",
|
||||
"version": "",
|
||||
"author": "",
|
||||
"description": "",
|
||||
"downloads": 0,
|
||||
"views": 157,
|
||||
"views": 159,
|
||||
"upvotes": 2,
|
||||
"saves": 0,
|
||||
"comments": 0,
|
||||
@@ -352,7 +354,7 @@
|
||||
{
|
||||
"title": " 🛠️ Debug Open WebUI Plugins in Your Browser",
|
||||
"slug": "debug_open_webui_plugins_in_your_browser_81bf7960",
|
||||
"type": "unknown",
|
||||
"type": "post",
|
||||
"version": "",
|
||||
"author": "",
|
||||
"description": "",
|
||||
|
||||
@@ -1,48 +1,63 @@
|
||||
# 📊 OpenWebUI Community Stats Report
|
||||
|
||||
> 📅 Updated: 2026-02-11 11:11
|
||||
> 📅 Updated: 2026-02-11 11:40
|
||||
|
||||
### 📈 增长趋势 (14天)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Downloads Trend"
|
||||
x-axis ["02-09", "02-10", "02-11"]
|
||||
y-axis "Downloads"
|
||||
line [3800, 4000, 4154]
|
||||
```
|
||||
|
||||
|
||||
## 📈 Overview
|
||||
|
||||
| Metric | Value |
|
||||
|------|------|
|
||||
| 📝 Total Posts | 22 |
|
||||
| ⬇️ Total Downloads | 4154 |
|
||||
| 👁️ Total Views | 49223 |
|
||||
| 👍 Total Upvotes | 231 |
|
||||
| 💾 Total Saves | 274 |
|
||||
| 💬 Total Comments | 55 |
|
||||
| Metric | Value | Growth (24h) |
|
||||
|------|------|:---:|
|
||||
| 📝 Total Posts | 22 | - |
|
||||
| ⬇️ Total Downloads | 4154 | **+154** 🚀 |
|
||||
| 👁️ Total Views | 45888 | **+1888** 🚀 |
|
||||
| 👍 Total Upvotes | 231 | **+11** 🚀 |
|
||||
| 💾 Total Saves | 274 | - |
|
||||
| 💬 Total Comments | 55 | - |
|
||||
| ⭐ Author Points | 271 | - |
|
||||
| 👥 Followers | 220 | **+2** 🚀 |
|
||||
|
||||
## 📂 By Type
|
||||
|
||||
- **unknown**: 5
|
||||
- **filter**: 2
|
||||
- **post**: 3
|
||||
- **filter**: 4
|
||||
- **pipe**: 1
|
||||
- **action**: 14
|
||||
- **action**: 12
|
||||
- **prompt**: 1
|
||||
- **review**: 1
|
||||
|
||||
## 📋 Posts List
|
||||
|
||||
| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |
|
||||
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-28 |
|
||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6695 | 24 | 34 | 2026-01-30 |
|
||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3022 | 14 | 26 | 2026-02-07 |
|
||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 363 | 3750 | 14 | 34 | 2026-01-28 |
|
||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-09 |
|
||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 341 | 4706 | 17 | 30 | 2026-01-29 |
|
||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3385 | 13 | 14 | 2026-01-28 |
|
||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 200 | 2774 | 9 | 6 | 2026-01-28 |
|
||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-29 |
|
||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6698 | 24 | 34 | 2026-01-31 |
|
||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3026 | 14 | 26 | 2026-02-07 |
|
||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | filter | 1.2.2 | 363 | 3754 | 14 | 34 | 2026-01-29 |
|
||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-10 |
|
||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | filter | 1.2.4 | 341 | 4710 | 17 | 30 | 2026-01-29 |
|
||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3387 | 13 | 14 | 2026-01-29 |
|
||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | prompt | | 200 | 2774 | 9 | 6 | 2026-01-28 |
|
||||
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 147 | 1250 | 6 | 11 | 2026-01-08 |
|
||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2218 | 13 | 7 | 2026-02-07 |
|
||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2401 | 14 | 9 | 2026-02-10 |
|
||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2219 | 13 | 7 | 2026-02-07 |
|
||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2402 | 14 | 9 | 2026-02-10 |
|
||||
| 12 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 61 | 1316 | 6 | 8 | 2026-01-20 |
|
||||
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1065 | 10 | 1 | 2026-01-29 |
|
||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-28 |
|
||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-28 |
|
||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-28 |
|
||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-29 |
|
||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-29 |
|
||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-29 |
|
||||
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 442 | 5 | 1 | 2026-01-08 |
|
||||
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 840 | 3 | 0 | 2026-02-10 |
|
||||
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | unknown | | 0 | 261 | 5 | 0 | 2026-02-10 |
|
||||
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1522 | 12 | 19 | 2026-01-28 |
|
||||
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 157 | 2 | 0 | 2026-01-14 |
|
||||
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1421 | 14 | 10 | 2026-01-10 |
|
||||
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 847 | 3 | 0 | 2026-02-10 |
|
||||
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | post | | 0 | 268 | 5 | 0 | 2026-02-10 |
|
||||
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | post | | 0 | 1523 | 12 | 19 | 2026-01-29 |
|
||||
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | review | | 0 | 159 | 2 | 0 | 2026-01-14 |
|
||||
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | post | | 0 | 1421 | 14 | 10 | 2026-01-10 |
|
||||
|
||||
@@ -1,48 +1,63 @@
|
||||
# 📊 OpenWebUI 社区统计报告
|
||||
|
||||
> 📅 更新时间: 2026-02-11 11:11
|
||||
> 📅 更新时间: 2026-02-11 11:40
|
||||
|
||||
### 📈 增长趋势 (14天)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Downloads Trend"
|
||||
x-axis ["02-09", "02-10", "02-11"]
|
||||
y-axis "Downloads"
|
||||
line [3800, 4000, 4154]
|
||||
```
|
||||
|
||||
|
||||
## 📈 总览
|
||||
|
||||
| 指标 | 数值 |
|
||||
|------|------|
|
||||
| 📝 发布数量 | 22 |
|
||||
| ⬇️ 总下载量 | 4154 |
|
||||
| 👁️ 总浏览量 | 49223 |
|
||||
| 👍 总点赞数 | 231 |
|
||||
| 💾 总收藏数 | 274 |
|
||||
| 💬 总评论数 | 55 |
|
||||
| 指标 | 数值 | 增长 (24h) |
|
||||
|------|------|:---:|
|
||||
| 📝 发布数量 | 22 | - |
|
||||
| ⬇️ 总下载量 | 4154 | **+154** 🚀 |
|
||||
| 👁️ 总浏览量 | 45888 | **+1888** 🚀 |
|
||||
| 👍 总点赞数 | 231 | **+11** 🚀 |
|
||||
| 💾 总收藏数 | 274 | - |
|
||||
| 💬 总评论数 | 55 | - |
|
||||
| ⭐ 作者总积分 | 271 | - |
|
||||
| 👥 粉丝数量 | 220 | **+2** 🚀 |
|
||||
|
||||
## 📂 按类型分类
|
||||
|
||||
- **unknown**: 5
|
||||
- **filter**: 2
|
||||
- **post**: 3
|
||||
- **filter**: 4
|
||||
- **pipe**: 1
|
||||
- **action**: 14
|
||||
- **action**: 12
|
||||
- **prompt**: 1
|
||||
- **review**: 1
|
||||
|
||||
## 📋 发布列表
|
||||
|
||||
| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |
|
||||
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-28 |
|
||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6695 | 24 | 34 | 2026-01-30 |
|
||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3022 | 14 | 26 | 2026-02-07 |
|
||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 363 | 3750 | 14 | 34 | 2026-01-28 |
|
||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-09 |
|
||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 341 | 4706 | 17 | 30 | 2026-01-29 |
|
||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3385 | 13 | 14 | 2026-01-28 |
|
||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 200 | 2774 | 9 | 6 | 2026-01-28 |
|
||||
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-29 |
|
||||
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6698 | 24 | 34 | 2026-01-31 |
|
||||
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3026 | 14 | 26 | 2026-02-07 |
|
||||
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | filter | 1.2.2 | 363 | 3754 | 14 | 34 | 2026-01-29 |
|
||||
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-10 |
|
||||
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | filter | 1.2.4 | 341 | 4710 | 17 | 30 | 2026-01-29 |
|
||||
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3387 | 13 | 14 | 2026-01-29 |
|
||||
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | prompt | | 200 | 2774 | 9 | 6 | 2026-01-28 |
|
||||
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 147 | 1250 | 6 | 11 | 2026-01-08 |
|
||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2218 | 13 | 7 | 2026-02-07 |
|
||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2401 | 14 | 9 | 2026-02-10 |
|
||||
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2219 | 13 | 7 | 2026-02-07 |
|
||||
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2402 | 14 | 9 | 2026-02-10 |
|
||||
| 12 | [📂 Folder Memory – Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 61 | 1316 | 6 | 8 | 2026-01-20 |
|
||||
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1065 | 10 | 1 | 2026-01-29 |
|
||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-28 |
|
||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-28 |
|
||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-28 |
|
||||
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-29 |
|
||||
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-29 |
|
||||
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-29 |
|
||||
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 442 | 5 | 1 | 2026-01-08 |
|
||||
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 840 | 3 | 0 | 2026-02-10 |
|
||||
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | unknown | | 0 | 261 | 5 | 0 | 2026-02-10 |
|
||||
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1522 | 12 | 19 | 2026-01-28 |
|
||||
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 157 | 2 | 0 | 2026-01-14 |
|
||||
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1421 | 14 | 10 | 2026-01-10 |
|
||||
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 847 | 3 | 0 | 2026-02-10 |
|
||||
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | post | | 0 | 268 | 5 | 0 | 2026-02-10 |
|
||||
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | post | | 0 | 1523 | 12 | 19 | 2026-01-29 |
|
||||
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | review | | 0 | 159 | 2 | 0 | 2026-01-14 |
|
||||
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | post | | 0 | 1421 | 14 | 10 | 2026-01-10 |
|
||||
|
||||
29
docs/stats-history.json
Normal file
29
docs/stats-history.json
Normal file
@@ -0,0 +1,29 @@
|
||||
[
|
||||
{
|
||||
"date": "2026-02-09",
|
||||
"total_posts": 20,
|
||||
"total_downloads": 3800,
|
||||
"total_views": 42000,
|
||||
"total_upvotes": 200,
|
||||
"followers": 215,
|
||||
"points": 48000
|
||||
},
|
||||
{
|
||||
"date": "2026-02-10",
|
||||
"total_posts": 21,
|
||||
"total_downloads": 4000,
|
||||
"total_views": 44000,
|
||||
"total_upvotes": 220,
|
||||
"followers": 218,
|
||||
"points": 50000
|
||||
},
|
||||
{
|
||||
"date": "2026-02-11",
|
||||
"total_posts": 22,
|
||||
"total_downloads": 4154,
|
||||
"total_views": 45888,
|
||||
"total_upvotes": 231,
|
||||
"followers": 220,
|
||||
"points": 271
|
||||
}
|
||||
]
|
||||
@@ -65,6 +65,129 @@ class OpenWebUIStats:
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
)
|
||||
self.history_file = Path("docs/stats-history.json")
|
||||
|
||||
# 定义下载类别的判定(这些类别会计入总浏览量/下载量统计)
|
||||
DOWNLOADABLE_TYPES = [
|
||||
"action",
|
||||
"filter",
|
||||
"pipe",
|
||||
"toolkit",
|
||||
"function",
|
||||
"prompt",
|
||||
"model",
|
||||
]
|
||||
|
||||
def load_history(self) -> list:
|
||||
"""从文件加载历史记录"""
|
||||
if self.history_file.exists():
|
||||
try:
|
||||
with open(self.history_file, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
except Exception as e:
|
||||
print(f"⚠️ 无法加载历史记录: {e}")
|
||||
return []
|
||||
|
||||
def save_history(self, stats: dict):
|
||||
"""保存当前快照到历史记录"""
|
||||
history = self.load_history()
|
||||
today = get_beijing_time().strftime("%Y-%m-%d")
|
||||
|
||||
# 构造快照
|
||||
snapshot = {
|
||||
"date": today,
|
||||
"total_posts": stats["total_posts"],
|
||||
"total_downloads": stats["total_downloads"],
|
||||
"total_views": stats["total_views"],
|
||||
"total_upvotes": stats["total_upvotes"],
|
||||
"followers": stats.get("user", {}).get("followers", 0),
|
||||
"points": stats.get("user", {}).get("total_points", 0),
|
||||
}
|
||||
|
||||
# 如果今天已存在,则更新;否则追加
|
||||
for i, item in enumerate(history):
|
||||
if item.get("date") == today:
|
||||
history[i] = snapshot
|
||||
break
|
||||
else:
|
||||
history.append(snapshot)
|
||||
|
||||
# 只保留最近 90 天的历史
|
||||
history = history[-90:]
|
||||
|
||||
with open(self.history_file, "w", encoding="utf-8") as f:
|
||||
json.dump(history, f, ensure_ascii=False, indent=2)
|
||||
print(f"✅ 历史快照已更新 ({today})")
|
||||
|
||||
def get_stat_delta(self, stats: dict) -> dict:
|
||||
"""计算相对于上次记录的增长"""
|
||||
history = self.load_history()
|
||||
if len(history) < 2:
|
||||
return {}
|
||||
|
||||
# 获取上一次的快照(倒数第二个,因为当前可能已经存入倒数第一个)
|
||||
# 或者如果还没存入,就是倒数第一个
|
||||
today = get_beijing_time().strftime("%Y-%m-%d")
|
||||
prev = None
|
||||
for item in reversed(history):
|
||||
if item.get("date") != today:
|
||||
prev = item
|
||||
break
|
||||
|
||||
if not prev:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"downloads": stats["total_downloads"] - prev.get("total_downloads", 0),
|
||||
"views": stats["total_views"] - prev.get("total_views", 0),
|
||||
"upvotes": stats["total_upvotes"] - prev.get("total_upvotes", 0),
|
||||
"followers": stats.get("user", {}).get("followers", 0)
|
||||
- prev.get("followers", 0),
|
||||
"points": stats.get("user", {}).get("total_points", 0)
|
||||
- prev.get("points", 0),
|
||||
}
|
||||
|
||||
def _resolve_post_type(self, post: dict) -> str:
|
||||
"""解析帖子类别"""
|
||||
top_type = post.get("type")
|
||||
function_data = post.get("data", {}) or {}
|
||||
function_obj = function_data.get("function", {}) or {}
|
||||
meta = function_obj.get("meta", {}) or {}
|
||||
manifest = meta.get("manifest", {}) or {}
|
||||
|
||||
# 类别识别优先级:
|
||||
if top_type == "review":
|
||||
return "review"
|
||||
|
||||
post_type = "unknown"
|
||||
if meta.get("type"):
|
||||
post_type = meta.get("type")
|
||||
elif function_obj.get("type"):
|
||||
post_type = function_obj.get("type")
|
||||
elif top_type:
|
||||
post_type = top_type
|
||||
elif not meta and not function_obj:
|
||||
post_type = "post"
|
||||
|
||||
# 统一和启发式识别逻辑
|
||||
if post_type == "unknown" and function_obj:
|
||||
post_type = "action"
|
||||
|
||||
if post_type == "action" or post_type == "unknown":
|
||||
all_metadata = (
|
||||
post.get("title", "")
|
||||
+ json.dumps(meta, ensure_ascii=False)
|
||||
+ json.dumps(manifest, ensure_ascii=False)
|
||||
).lower()
|
||||
|
||||
if "filter" in all_metadata:
|
||||
post_type = "filter"
|
||||
elif "pipe" in all_metadata:
|
||||
post_type = "pipe"
|
||||
elif "toolkit" in all_metadata:
|
||||
post_type = "toolkit"
|
||||
|
||||
return post_type
|
||||
|
||||
def _parse_user_id_from_token(self, token: str) -> str:
|
||||
"""从 JWT Token 中解析用户 ID"""
|
||||
@@ -84,6 +207,30 @@ class OpenWebUIStats:
|
||||
print(f"⚠️ 无法从 Token 解析用户 ID: {e}")
|
||||
return ""
|
||||
|
||||
def generate_mermaid_chart(self) -> str:
|
||||
"""生成 Mermaid 增长趋势图"""
|
||||
history = self.load_history()
|
||||
if len(history) < 3: # 数据太少不显示图表
|
||||
return ""
|
||||
|
||||
# 只取最近 14 天的数据用于展示
|
||||
data = history[-14:]
|
||||
dates = [item["date"][-5:] for item in data] # 只取 MM-DD
|
||||
downloads = [str(item["total_downloads"]) for item in data]
|
||||
|
||||
mm = []
|
||||
mm.append("### 📈 增长趋势 (14天)")
|
||||
mm.append("")
|
||||
mm.append("```mermaid")
|
||||
mm.append("xychart-beta")
|
||||
mm.append(f' title "Downloads Trend"')
|
||||
mm.append(f" x-axis [{', '.join(f'\"{d}\"' for d in dates)}]")
|
||||
mm.append(f' y-axis "Downloads"')
|
||||
mm.append(f" line [{', '.join(downloads)}]")
|
||||
mm.append("```")
|
||||
mm.append("")
|
||||
return "\n".join(mm)
|
||||
|
||||
def get_user_posts(self, sort: str = "new", page: int = 1) -> list:
|
||||
"""
|
||||
获取用户发布的帖子列表
|
||||
@@ -148,22 +295,26 @@ class OpenWebUIStats:
|
||||
}
|
||||
|
||||
for post in posts:
|
||||
post_type = self._resolve_post_type(post)
|
||||
|
||||
function_data = post.get("data", {}) or {}
|
||||
function_obj = function_data.get("function", {}) or {}
|
||||
meta = function_obj.get("meta", {}) or {}
|
||||
manifest = meta.get("manifest", {}) or {}
|
||||
|
||||
# 累计统计
|
||||
stats["total_downloads"] += post.get("downloads", 0)
|
||||
stats["total_views"] += post.get("views", 0)
|
||||
post_downloads = post.get("downloads", 0)
|
||||
post_views = post.get("views", 0)
|
||||
|
||||
stats["total_downloads"] += post_downloads
|
||||
stats["total_upvotes"] += post.get("upvotes", 0)
|
||||
stats["total_downvotes"] += post.get("downvotes", 0)
|
||||
stats["total_saves"] += post.get("saveCount", 0)
|
||||
stats["total_comments"] += post.get("commentCount", 0)
|
||||
|
||||
# 解析 data 字段 - 正确路径: data.function.meta
|
||||
function_data = post.get("data", {})
|
||||
if function_data is None:
|
||||
function_data = {}
|
||||
function_data = function_data.get("function", {})
|
||||
meta = function_data.get("meta", {})
|
||||
manifest = meta.get("manifest", {})
|
||||
post_type = meta.get("type", function_data.get("type", "unknown"))
|
||||
# 关键:总浏览量不包括不可以下载的类型 (如 post, review)
|
||||
if post_type in self.DOWNLOADABLE_TYPES or post_downloads > 0:
|
||||
stats["total_views"] += post_views
|
||||
|
||||
if post_type not in stats["by_type"]:
|
||||
stats["by_type"][post_type] = 0
|
||||
@@ -249,19 +400,24 @@ class OpenWebUIStats:
|
||||
stats: 统计数据
|
||||
lang: 语言 ("zh" 中文, "en" 英文)
|
||||
"""
|
||||
# 获取增量数据
|
||||
delta = self.get_stat_delta(stats)
|
||||
|
||||
# 中英文文本
|
||||
texts = {
|
||||
"zh": {
|
||||
"title": "# 📊 OpenWebUI 社区统计报告",
|
||||
"updated": f"> 📅 更新时间: {get_beijing_time().strftime('%Y-%m-%d %H:%M')}",
|
||||
"overview_title": "## 📈 总览",
|
||||
"overview_header": "| 指标 | 数值 |",
|
||||
"overview_header": "| 指标 | 数值 | 增长 (24h) |",
|
||||
"posts": "📝 发布数量",
|
||||
"downloads": "⬇️ 总下载量",
|
||||
"views": "👁️ 总浏览量",
|
||||
"upvotes": "👍 总点赞数",
|
||||
"saves": "💾 总收藏数",
|
||||
"comments": "💬 总评论数",
|
||||
"author_points": "⭐ 作者总积分",
|
||||
"author_followers": "👥 粉丝数量",
|
||||
"type_title": "## 📂 按类型分类",
|
||||
"list_title": "## 📋 发布列表",
|
||||
"list_header": "| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |",
|
||||
@@ -270,13 +426,15 @@ class OpenWebUIStats:
|
||||
"title": "# 📊 OpenWebUI Community Stats Report",
|
||||
"updated": f"> 📅 Updated: {get_beijing_time().strftime('%Y-%m-%d %H:%M')}",
|
||||
"overview_title": "## 📈 Overview",
|
||||
"overview_header": "| Metric | Value |",
|
||||
"overview_header": "| Metric | Value | Growth (24h) |",
|
||||
"posts": "📝 Total Posts",
|
||||
"downloads": "⬇️ Total Downloads",
|
||||
"views": "👁️ Total Views",
|
||||
"upvotes": "👍 Total Upvotes",
|
||||
"saves": "💾 Total Saves",
|
||||
"comments": "💬 Total Comments",
|
||||
"author_points": "⭐ Author Points",
|
||||
"author_followers": "👥 Followers",
|
||||
"type_title": "## 📂 By Type",
|
||||
"list_title": "## 📋 Posts List",
|
||||
"list_header": "| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |",
|
||||
@@ -291,17 +449,44 @@ class OpenWebUIStats:
|
||||
md.append(t["updated"])
|
||||
md.append("")
|
||||
|
||||
# 插入趋势图
|
||||
chart = self.generate_mermaid_chart()
|
||||
if chart:
|
||||
md.append(chart)
|
||||
md.append("")
|
||||
|
||||
# 总览
|
||||
def fmt_delta(key: str) -> str:
|
||||
val = delta.get(key, 0)
|
||||
if val > 0:
|
||||
return f"**+{val}** 🚀"
|
||||
return "-"
|
||||
|
||||
md.append(t["overview_title"])
|
||||
md.append("")
|
||||
md.append(t["overview_header"])
|
||||
md.append("|------|------|")
|
||||
md.append(f"| {t['posts']} | {stats['total_posts']} |")
|
||||
md.append(f"| {t['downloads']} | {stats['total_downloads']} |")
|
||||
md.append(f"| {t['views']} | {stats['total_views']} |")
|
||||
md.append(f"| {t['upvotes']} | {stats['total_upvotes']} |")
|
||||
md.append(f"| {t['saves']} | {stats['total_saves']} |")
|
||||
md.append(f"| {t['comments']} | {stats['total_comments']} |")
|
||||
md.append("|------|------|:---:|")
|
||||
md.append(f"| {t['posts']} | {stats['total_posts']} | - |")
|
||||
md.append(
|
||||
f"| {t['downloads']} | {stats['total_downloads']} | {fmt_delta('downloads')} |"
|
||||
)
|
||||
md.append(f"| {t['views']} | {stats['total_views']} | {fmt_delta('views')} |")
|
||||
md.append(
|
||||
f"| {t['upvotes']} | {stats['total_upvotes']} | {fmt_delta('upvotes')} |"
|
||||
)
|
||||
md.append(f"| {t['saves']} | {stats['total_saves']} | - |")
|
||||
md.append(f"| {t['comments']} | {stats['total_comments']} | - |")
|
||||
|
||||
# 作者信息
|
||||
user = stats.get("user", {})
|
||||
if user:
|
||||
md.append(
|
||||
f"| {t['author_points']} | {user.get('total_points', 0)} | {fmt_delta('points')} |"
|
||||
)
|
||||
md.append(
|
||||
f"| {t['author_followers']} | {user.get('followers', 0)} | {fmt_delta('followers')} |"
|
||||
)
|
||||
|
||||
md.append("")
|
||||
|
||||
# 按类型分类
|
||||
@@ -581,6 +766,9 @@ def main():
|
||||
# 生成统计
|
||||
stats = stats_client.generate_stats(posts)
|
||||
|
||||
# 保存历史快照
|
||||
stats_client.save_history(stats)
|
||||
|
||||
# 打印到终端
|
||||
stats_client.print_stats(stats)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user