Files
CodeZen/README.md
2025-11-07 19:44:51 +08:00

113 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CodeZen
> 一个专注中文区的 GitHub 项目发现
---
### 📖 关于本项目
`CodeZen` 是一个全栈的 Web 应用旨在解决“GitHub 上的中文项目信息过载”问题。
它通过一个 **7x24 小时无人值守**的爬虫,自动抓取 GitHub 上**近期**7天内、**热门**>50星且**包含中文内容**的仓库,并将其以一个美观、可交互的“卡片式”界面呈现。
本应用是**“HTMX 驱动”**的,所有筛选、排序和分页操作均可“无刷新”丝滑完成,提供了现代化的单页应用 (SPA) 体验。
### ✨ 主要功能
* **7x24 自动更新:** 应用启动后,`APScheduler` 后台调度器会自动(每 4 小时)抓取最新项目,无需人工干预。
* **智能中文筛选:** 独有的“智能扫描”逻辑,优先检查项目 `description`,其次扫描 `README_CN.md``README.md`,确保 100% 收录中文相关项目。
* **多重协同筛选 (100% 自动)**
* **语言筛选:** 自动从数据库中 `SELECT DISTINCT` 提取**所有已抓取**的语言,动态生成筛选器。
* **主题筛选:** 自动**实时统计**数据库中 Top 20 热门 `Topics`,动态生成功能筛选器。
* **协同工作流:** 语言、主题、排序、分页、搜索**五大功能**可以完美协同工作例如搜索“AI”项目中`Python` 语言下,`按热度排序` 的第 2 页)。
* **稳定搜索:** 采用稳定的“回车键”搜索,可(通过 HTMX无刷新更新结果。
* **现代 UI/UX**
* 响应式卡片布局 (`Grid` + `flex-wrap`)。
* 支持手动切换和系统记忆的“深色/浅色”模式。
* 清晰的三区卡片视觉划分(标题、内容、元数据)。
### 🛠️ 技术栈
* **后端:** Flask, APScheduler
* **前端:** HTMX, Tailwind CSS, Material Symbols
* **数据库:** SQLite3
* **抓取器:** Python (Requests, Collections)
### 📁 文件结构
```
CodeZen/
├── webapp.py # 主程序: Flask + APScheduler 调度器
├── scraper.py # 抓取器: 封装了所有 GitHub API 逻辑
├── templates/
│ ├── index.html # "外壳"模板 (含页眉, 页脚, 搜索框)
│ └── _projects_partial.html # "内容"模板 (含筛选器, 卡片, 分页)
└── github_projects.db # 自动生成的 SQLite 数据库
```
### 🚀 如何运行
1. **克隆仓库**
```bash
git clone https://git.wlens.top/laowang/CodeZen.git
cd CodeZen
```
2. **创建并激活虚拟环境**
```bash
python -m venv venv
# Windows
.\venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
```
3. **安装依赖**
```bash
pip install -r requirements.txt
```
4. **配置 GitHub Token (关键!)**
打开 `webapp.py` 文件,找到顶部的配置区域,将 `GITHUB_TOKEN` 变量替换为你自己的 GitHub Personal Access Token。
```python
# webapp.py
GITHUB_TOKEN = 'ghp_YOUR_REAL_GITHUB_TOKEN_HERE' # 替换你的KEY
SCHEDULE_HOURS = 4 # 自动抓取的间隔时间 (小时)
```
5. **启动应用 (V6.0 自动化版)**
运行主应用:
```bash
python webapp.py
```
应用启动后,它将**立即**在后台执行第一次抓取(你会在终端看到日志),这可能需要几分钟。抓取完成后,在浏览器中访问 `http://127.0.0.1:5000` 即可看到结果。
**应用会从此 7x24 自动在后台更新,你无需任何其他操作。**
### 🧠 CodeZen 的“大脑”:收录与展示逻辑
#### 1. "要不要收录?" (抓取逻辑 - `scraper.py`)
一个项目必须通过 3 道“门”才会被收录:
1. **热度门 (API)** 7 天内创建 且 > 50 星。
2. **重复门 (DB)** `repo_id` 未在数据库中。
3. **中文门 (智能)** **(满足一项即可)**
* **a.** 项目的 `description` (简介) 本身包含中文。
* **b.** (如果简介不含中文) `README_CN.md` 或 `README.md` 中包含中文。
#### 2. "介绍里怎么写?" (展示逻辑 - `2_webapp.py`)
为了在卡片上提供最有价值的介绍,后端遵循“最佳内容优先”原则:
1. **第 1 优先级:** 显示中文的 `description` (简介)。
2. **第 2 优先级:** (如果简介是英文) 显示从 README 提取的中文 `readme_excerpt` (摘要)。
3. **第 3 优先级:** (如果前两者都没有) 降级显示英文的 `description`。
4. **第 4 优先级:** 显示 "暂无简介"。