文档:更新 README.md

- 主题开发
 - 文档完善
This commit is contained in:
周中平 2023-11-06 15:32:51 +08:00
parent ba7f8c0456
commit d163726756
Signed by: zhouzhongping
GPG Key ID: 6666822800008000

166
README.md
View File

@ -8,9 +8,9 @@ EndOfYear 点燃个人博客的年度辉煌!
### 要求 ### 要求
- RSS 源必输出文章全部内容,否则数据分析不准确。 - **RSS 源必输出文章全部内容**,否则数据分析不准确。
- Github 运行可能无法访问 RSS 源,请使用本地 Docker 运行。 - Github 运行可能无法访问 RSS 源,请使用本地 Docker 运行。
- 如果生成年度报告,请结合博客实际情况设置 RSS 输出文章数量。 - 如果生成年度报告,请结合博客实际情况**设置 RSS 输出文章数量。**
### Github ### Github
@ -22,8 +22,8 @@ EndOfYear 点燃个人博客的年度辉煌!
4. 在 **Workflow permissions** 中,选择 **Read and write permissions**(读写权限)。 4. 在 **Workflow permissions** 中,选择 **Read and write permissions**(读写权限)。
5. 最后点击 **Save**(保存)。 5. 最后点击 **Save**(保存)。
3. 在仓库首页打开目录下的 `config.ini` 配置文件,点击右上角工具栏的 **🖋️(钢笔)** 图标,在线编辑文件。 3. 在仓库首页打开目录下的 `config.ini` 配置文件,点击右上角工具栏的 **🖋️(钢笔)** 图标,在线编辑文件。
- `web`:配置为 `false` - `web`默认为 trueGithub 运行需要配置为 `false` 静态网站模式
- `rss`:配置为 RSS 地址。 - `rss`:配置为 RSS 地址。
```ini ```ini
[default] [default]
@ -31,13 +31,12 @@ web = false
[blog] [blog]
rss = https://blog.7wate.com/rss.xml rss = https://blog.7wate.com/rss.xml
data =
``` ```
4. 点击右上角的 **Commit changes** 提交到 `main` 分支,会自动运行 Actions。 4. 点击右上角的 **Commit changes** 提交到 `main` 分支,会自动运行 Actions。
5. 等待 Actions 运行成功,将会部署静态网站文件至 `html` 分支。 5. 等待 Actions 运行成功,将会部署静态网站文件至 `html` 分支。
6. 开启 GitHub 仓库的 Pages 功能,默认为根目录。 6. 开启 GitHub 仓库的 Pages 功能,设置 `html`分支,默认为根目录。
7. 访问个人网址,就可以看到啦~ 7. 稍等访问个人网址,就可以看到啦~
### Docker ### Docker
@ -70,7 +69,11 @@ docker run -p 7777:7777 --env rss=https://blog.7wate.com/rss.xml sevenwate/endof
### 博客数据分析不准确 ### 博客数据分析不准确
目前会根据个人时间进一步迭代,可以点个 Watch 订阅进度。 目前博客的数据分析已经相对丰富,准确,未来会结合 AI 进行分析。
### 主题不够丰富
个人时间有限,不过目前可以**保证每年更新一款默认主题**,希望给各位的写作之路带来快乐 ~
## 流程 ## 流程
@ -78,50 +81,115 @@ EndOfYear 通过 RSS 获取博客文章数据,对文章数据进行统计、
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
actor User participant User
participant Flask participant Flask as Flask Server
participant Config participant Config as Configuration
participant Generator participant Generator as Data Generator
participant Scraper participant Scraper as Data Scraper
participant Analyzer participant Analyzer as Data Analyzer
User->>Flask: Access Service
Flask->>User: Redirect to painting theme
User->>Flask: Request painting theme
Flask->>Config: Invoke Data Generator
Config->>Generator: Run Data Scraper
Generator->>Scraper: Fetch RSS data
Scraper->>Analyzer: Analyze Data
Analyzer->>Scraper: Return Analyzed Data
Scraper->>Generator: Send Structured Data
Generator->>Flask: Return Data to Flask
Flask->>Flask: Render HTML Page with Data
Flask->>User: Return Rendered HTML Page
User ->> Flask: Access service
Flask ->> Config: Check cache
activate Config
alt Cache exists
Config -->> Flask: Return cached data
else Cache does not exist
Config ->> Generator: Run data generator
activate Generator
Generator ->> Scraper: Run data scraping
activate Scraper
Scraper -->> Generator: Return scraped data
deactivate Scraper
Generator ->> Analyzer: Run data analysis
activate Analyzer
Analyzer -->> Generator: Return analyzed data
deactivate Analyzer
Generator -->> Config: Return organized data
deactivate Generator
Config -->> Flask: Return data
end
Flask -->> User: Return HTML page
deactivate Config
``` ```
1. 用户访问 Flask 服务。 1. 用户访问 Flask 服务。
2. Flask 检查缓存是否存在。 2. Flask 根路由跳转 painting 主题。
- 如果缓存存在Flask直接返回缓存数据。
- 如果缓存不存在,继续下一步。
3. Config 模块运行数据生成器Generator 3. Config 模块运行数据生成器Generator
4. Generator 模块运行数据抓取器Scraper来获取RSS数据。 4. Generator 模块运行数据抓取器Scraper来获取RSS数据。
5. Scraper 将抓取的数据返回给 Generator。 5. Scraper 将抓取的数据结合Analyzer对数据进行分析。
6. Generator 运行数据分析器Analyzer对数据进行分析。 6. Analyzer 将分析后的数据返回给 Scraper。
7. Analyzer 将分析后的数据返回给 Generator。 7. Generator 整理Scraper结构化数据后将其返回给 Flask。
8. Generator 整理结构化数据后将其返回给 Flask,Config 模块。 8. Flask 使用Generator的数据渲染 HTML 页面。
9. Flask 使用整理后的数据渲染 HTML 页面。 9. Flask 返回渲染后的 HTML 页面给用户。
10. Flask 返回渲染后的 HTML 页面给用户。
## 主题开发
EndOfYear 使用 Python 结合 Flask 利用 Jinja2 模板进行数据渲染,目前提供四个数据模型。
```mermaid
erDiagram
Site ||--o{ Generator : contains
Blog ||--o{ Generator : contains
Post ||--o{ Generator : contains
Custom ||--o{ Generator : contains
Site {
string service
string title
}
Blog {
string name
string link
int life
int article_count
int article_word_count
string top_post_keys
string category
}
Post {
string title
string content
string[] keys
string time
string date
}
Custom {
string yiyan
}
Generator {
Site site
Blog blog
Post special_post
Post sentiment_post
Post long_post
Post short_post
Custom custom
}
```
如果进行主题开发可以使用 Jinja2 的模板语言,结合下面的数据定制一款专属主题。
| 数据 | 描述 |
| -------------- | -------------- |
| site | 站点数据 |
| blog | 博客数据 |
| special_post | 特殊日期文件 |
| sentiment_post | 情感分最高文章 |
| long_post | 篇幅最长文章 |
| short_post | 篇幅最短文章 |
| custom | 自定义数据 |
如果有额外数据需求,可以修改 `custom` 模型,并在 `main.py` 中传参,最后在 HTML 模板中使用。以下是一个简单的模板示例:
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>{{ site.title }}</title>
</head>
<body>
亲爱的{{ blog.name }}
</body>
</html>
```
## 路线图 ## 路线图
@ -129,10 +197,10 @@ EndOfYear 目前处于初始阶段,如果您有兴趣,可以为其做出贡
### V1 ### V1
- [ ] 对博客系统的数据源进行全面、规模性的测试。 - [x] 结合互联网公开博客的数据源对 EndOfYear 进行全面、规模性的测试。
- [ ] 进一步细化数据分析维度和数据颗粒度,精准描绘用户画像。 - [x] 默认主题进一步细化数据分析维度和数据颗粒度,精准描绘用户画像。
- [ ] 渲染数据的规范,约束主题开发,提高主题的兼容性。 - [x] EndOfYear 渲染数据的规范,约束主题开发,提高主题的兼容性。
- [ ] 剥离数据分析和主题,提供更好地适用方式。 - [ ] 剥离主题,提供更好地主题开发方式。
### V2 ### V2