diff --git a/.github/workflows/upy.yml b/.github/workflows/upy.yml
index 43c003b3..ef63efe9 100644
--- a/.github/workflows/upy.yml
+++ b/.github/workflows/upy.yml
@@ -30,6 +30,17 @@ jobs:
# 2. 自动处理隐藏文章 (防止 status: hidden 的文章意外泄露)
./scripts/add_draft_to_hidden.ps1
+ - name: Setup Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: '18'
+
+ - name: Install Node.js dependencies
+ run: npm install
+
+ - name: Generate Friend Circle Data
+ run: node scripts/generate_circle_data.js
+
- name: Build
run: rm -rf public && hugo --minify
diff --git a/.gitignore b/.gitignore
index f76d56ec..3fd52b90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,5 @@ static/pics/hugo/节前资产资源图解矢量化工作/abafa5de9215e3beb21dda2
static/pics/hugo/节前资产资源图解矢量化工作/wps1.jpg
static/pics/hugo/节前资产资源图解矢量化工作/wps2.jpg
static/pics/hugo/湖北三资运维问题记录
+
+node_modules/
diff --git a/README.md b/README.md
index 5a5070a3..1f2bd7d4 100644
--- a/README.md
+++ b/README.md
@@ -168,17 +168,33 @@ RSS 地址: `https://usj.cc/rss.xml`
通常由 GitHub Actions 自动调用,不建议手动运行。
需要环境变量: `DOGECLOUD_ACCESS_KEY`, `DOGECLOUD_SECRET_KEY`, `CDN_URL_LIST`.
+### 6.8 朋友圈数据生成 (`scripts/generate_circle_data.js`)
+抓取友链 RSS 并生成朋友圈数据。
+
+* **用法**:
+ ```bash
+ node scripts/generate_circle_data.js
+ ```
+* **功能**:
+ 1. 读取 `themes/Ying/static/json/link_lite.json` 中的友链列表。
+ 2. 尝试抓取每个友链的 RSS/Atom 订阅源。
+ 3. 提取最新文章(包含标题、链接、摘要、图片等)。
+ 4. 生成 `themes/Ying/static/json/friend_circle_data.json` 供前端展示。
+
## 7. 自动化部署 (GitHub Actions)
本项目配置了完整的 CI/CD 流程 (`.github/workflows/upy.yml`),主要包含以下步骤:
-1. **环境准备**: 安装 Hugo, Python, PowerShell。
+1. **环境准备**: 安装 Hugo, Node.js, Python, PowerShell。
2. **预构建检查**:
* 运行 `update_link_lite_json.ps1` 确保友链数据最新。
* 运行 `add_draft_to_hidden.ps1` 确保隐藏文章安全。
-3. **构建**: 运行 `hugo --minify` 生成静态文件。
-4. **部署**: 将 `public` 目录推送到又拍云 (UpYun)。
-5. **刷新缓存**: 部署成功后,调用多吉云 (DogeCloud) API 刷新 CDN 节点。
+3. **数据生成**:
+ * 运行 `npm install` 安装依赖。
+ * 运行 `generate_circle_data.js` 抓取并生成朋友圈数据。
+4. **构建**: 运行 `hugo --minify` 生成静态文件。
+5. **部署**: 将 `public` 目录推送到又拍云 (UpYun)。
+6. **刷新缓存**: 部署成功后,调用多吉云 (DogeCloud) API 刷新 CDN 节点。
> **注意**: 友链健康检查 (`scripts/check_links.js`) 仅作为本地工具 (`deploy.ps1`) 运行,不会阻断线上部署流程。
diff --git a/content/post/2026-01-21-how-to-implement-friend-circle-in-hugo.md b/content/post/2026-01-21-how-to-implement-friend-circle-in-hugo.md
new file mode 100644
index 00000000..6b4df648
--- /dev/null
+++ b/content/post/2026-01-21-how-to-implement-friend-circle-in-hugo.md
@@ -0,0 +1,464 @@
+---
+pid: 137
+title: "如何hugo静态实现友联朋友圈功能"
+date: 2026-01-21T14:30:00+08:00
+slug: 137
+draft: false
+categories: ["教程", "折腾"]
+tags: ["Hugo", "朋友圈", "静态博客"]
+author: "小赵同学"
+layout: "post"
+---
+
+前段时间把博客从 Typecho 迁移到了 Hugo,整体感觉就是快,静态博客真的省心。但是,心里总觉得少点什么。没错,就是那个能看到朋友们最新动态的“朋友圈”功能。
+
+在 Typecho 时代,有现成的插件可以用,转到 Hugo 后,发现很多现成的主题并没有集成这个功能,或者样式不是我喜欢的。最近逛博客,看到 [liushen.fun](https://blog.liushen.fun/fcircle/) 的友圈样式挺不错的,卡片风格,毛玻璃特效,甚是喜欢。于是心血来潮,想着能不能自己在 Hugo 上也整一个。
+
+本来想着直接把仓库开源给大家参考,但因为仓库里有一些私密的配置和魔改的烂代码,实在不好意思(也不方便)公开。所以,既然大家想要,那我就把**完整的代码**和**实现步骤**都贴在这里,主打一个“喂饭级”教程,大家直接复制粘贴就能用!
+
+## 实现思路
+
+因为 Hugo 是静态博客,没有数据库,所以不能像 Typecho 那样实时读取数据库。我的思路是:
+
+1. **后端抓取**:利用 GitHub Actions 定时运行一个 Node.js 脚本。
+2. **数据处理**:脚本读取 `links.yaml`(或者你的友链 JSON),抓取每个朋友的 RSS Feed,提取文章标题、链接、时间、摘要和封面图。
+3. **数据生成**:将处理好的数据保存为 `friend_circle_data.json` 文件。
+4. **前端渲染**:在 Hugo 的页面模板中,通过 AJAX 请求这个 JSON 文件,动态渲染成卡片列表。
+
+这样既保持了博客的静态特性,又实现了动态更新。
+
+## 第一步:后端脚本 (Node.js)
+
+首先,我们需要一个脚本来干脏活累活。我在项目根目录的 `scripts` 文件夹下新建了一个 `generate_circle_data.js`。
+
+你需要先安装一个依赖:
+```bash
+npm install rss-parser
+```
+
+下面是完整的脚本代码,支持自动识别 RSS(如果友链里没写),支持提取文章里的第一张图作为封面,支持提取摘要:
+
+```javascript
+const fs = require('fs');
+const path = require('path');
+const Parser = require('rss-parser');
+
+// 你的友链数据文件路径,根据实际情况修改
+const LINK_LITE_PATH = path.join(__dirname, '../themes/Ying/static/json/link_lite.json');
+// 输出文件路径
+const OUTPUT_PATH = path.join(__dirname, '../themes/Ying/static/json/friend_circle_data.json');
+
+const MAX_POSTS_PER_FRIEND = 5; // 每个朋友取最近5篇
+const MAX_TOTAL_POSTS = 100; // 总共展示100篇
+
+const parser = new Parser({
+ timeout: 10000,
+ headers: {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
+ }
+});
+
+async function fetchFeed(url) {
+ try {
+ const feed = await parser.parseURL(url);
+ return feed;
+ } catch (error) {
+ return null;
+ }
+}
+
+async function main() {
+ console.log('Starting Friend Circle generation...');
+
+ if (!fs.existsSync(LINK_LITE_PATH)) {
+ console.error('link_lite.json not found!');
+ process.exit(1);
+ }
+
+ const data = JSON.parse(fs.readFileSync(LINK_LITE_PATH, 'utf8'));
+ // 假设 data.friends 是一个数组: [name, url, avatar, rss?]
+ // 如果你的格式不一样,请自行调整下面的 map 逻辑
+
+ let allPosts = [];
+ const BATCH_SIZE = 5; // 并发控制
+ const friends = data.friends;
+
+ for (let i = 0; i < friends.length; i += BATCH_SIZE) {
+ const batch = friends.slice(i, i + BATCH_SIZE);
+ const promises = batch.map(async (friend) => {
+ const name = friend[0];
+ const blogUrl = friend[1];
+ const avatar = friend[2];
+ let rssUrl = friend.length >= 4 ? friend[3] : null;
+
+ // 如果没有提供 RSS,尝试盲猜
+ const candidates = [];
+ if (rssUrl) {
+ candidates.push(rssUrl);
+ } else {
+ const cleanUrl = blogUrl.replace(/\/$/, '');
+ candidates.push(`${cleanUrl}/atom.xml`);
+ candidates.push(`${cleanUrl}/rss.xml`);
+ candidates.push(`${cleanUrl}/feed`);
+ candidates.push(`${cleanUrl}/index.xml`);
+ }
+
+ let feed = null;
+ for (const url of candidates) {
+ feed = await fetchFeed(url);
+ if (feed) break;
+ }
+
+ if (!feed) {
+ console.log(`[${name}] No valid RSS found.`);
+ return;
+ }
+
+ // 提取文章
+ const posts = feed.items.slice(0, MAX_POSTS_PER_FRIEND).map(item => {
+ let img = null;
+ // 优先从 content 中提取图片
+ const content = item['content:encoded'] || item.content || item.description || '';
+ const imgMatch = content.match(/
]+src=['"]([^'"]+)['"]/i);
+
+ if (imgMatch) {
+ img = imgMatch[1];
+ } else if (item.enclosure && item.enclosure.url && item.enclosure.type && item.enclosure.type.startsWith('image')) {
+ img = item.enclosure.url;
+ }
+
+ // 提取摘要
+ let snippet = '';
+ if (content) {
+ snippet = content.replace(/<[^>]+>/g, '');
+ snippet = snippet.replace(/\s+/g, ' ').trim();
+ if (snippet.length > 120) {
+ snippet = snippet.substring(0, 120) + '...';
+ }
+ }
+
+ return {
+ title: item.title,
+ link: item.link,
+ date: item.isoDate || item.pubDate,
+ author: name,
+ avatar: avatar,
+ blogUrl: blogUrl,
+ image: img,
+ description: snippet
+ };
+ });
+
+ allPosts = allPosts.concat(posts);
+ });
+
+ await Promise.all(promises);
+ }
+
+ // 按时间倒序排序
+ allPosts.sort((a, b) => new Date(b.date) - new Date(a.date));
+
+ const finalPosts = allPosts.slice(0, MAX_TOTAL_POSTS);
+
+ const output = {
+ updated: new Date().toISOString(),
+ posts: finalPosts
+ };
+
+ fs.writeFileSync(OUTPUT_PATH, JSON.stringify(output, null, 2));
+ console.log(`Saved ${finalPosts.length} posts to ${OUTPUT_PATH}`);
+}
+
+main();
+```
+
+## 第二步:自动化 (GitHub Actions)
+
+脚本写好了,总不能每天自己手动跑吧?这时候 GitHub Actions 就派上用场了。
+
+在 `.github/workflows` 下创建一个 `upy.yml` (或者其他名字),设置定时任务。我是设置每天跑一次,或者每次 push 代码时触发。
+
+```yaml
+ - name: Install Node.js dependencies
+ run: npm install rss-parser
+
+ - name: Generate Friend Circle Data
+ run: node scripts/generate_circle_data.js
+```
+
+把这两步加到你现有的构建流程里,放在 `hugo` 命令之前就行。
+
+## 第三步:前端颜值 (HTML & CSS)
+
+这一步是重头戏!为了达到那个卡片式、毛玻璃、还有丝滑动效的效果,我可是调了半天 CSS。
+
+我直接把我的 `themes/Ying/layouts/_default/circles.html` 文件内容贴出来。这个文件集成了 HTML 结构、CSS 样式和 JS 逻辑(包括 PJAX 适配和加载更多功能)。
+
+你可以直接在你的 Hugo 主题里新建一个 `layouts/_default/circles.html`,然后复制下面的代码:
+
+```html
+{{ define "main" }}
+
+{{ end }}
+```
+
+## 避坑指南
+
+1. **CORS 问题**:因为我们是请求同域名的 JSON 文件,所以一般不会有跨域问题。但如果你把 JSON 传到了其他 CDN,记得配置 CORS。
+2. **PJAX 白屏**:如果你像我一样用了 PJAX,一定要加 `document.addEventListener('pjax:complete', ...)` 这一行,否则跳转回来会白屏。
+3. **样式冲突**:CSS 里的 `.friend-circle-list` 使用了 Grid 布局,如果你的主题有全局 CSS 冲突,可能需要微调。
+
+## 总结
+
+这一套下来,其实核心就三块:Node 脚本抓数据、Github Action 跑脚本、HTML 渲染页面。
+
+虽然代码看起来有点多,但逻辑是很清晰的。把这些文件放到对应位置,基本上就能跑起来了。如果你也喜欢这种卡片风格,不妨试一试!
+
+好了,代码都毫无保留地交出来了,希望能帮到同样在折腾 Hugo 的朋友们。如果有问题,欢迎在评论区留言(虽然我也不一定能解决哈哈)。
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..a7bf7cce
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,57 @@
+{
+ "name": "blog",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "rss-parser": "^3.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/rss-parser": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmmirror.com/rss-parser/-/rss-parser-3.13.0.tgz",
+ "integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==",
+ "dependencies": {
+ "entities": "^2.0.3",
+ "xml2js": "^0.5.0"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.4.tgz",
+ "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..4b91898b
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "rss-parser": "^3.13.0"
+ }
+}
diff --git a/scripts/generate_circle_data.js b/scripts/generate_circle_data.js
new file mode 100644
index 00000000..38efdadb
--- /dev/null
+++ b/scripts/generate_circle_data.js
@@ -0,0 +1,183 @@
+
+const fs = require('fs');
+const path = require('path');
+const Parser = require('rss-parser');
+
+const LINK_LITE_PATH = path.join(__dirname, '../themes/Ying/static/json/link_lite.json');
+const OUTPUT_PATH = path.join(__dirname, '../themes/Ying/static/json/friend_circle_data.json');
+const MAX_POSTS_PER_FRIEND = 5;
+const MAX_TOTAL_POSTS = 100; // Limit total output size
+
+const parser = new Parser({
+ timeout: 10000,
+ headers: {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
+ }
+});
+
+async function fetchFeed(url) {
+ try {
+ const feed = await parser.parseURL(url);
+ return feed;
+ } catch (error) {
+ // console.error(`Failed to fetch ${url}: ${error.message}`);
+ return null;
+ }
+}
+
+async function getRssUrl(friend) {
+ // If RSS is explicitly provided (4th element in array)
+ if (friend.length >= 4 && friend[3]) {
+ return friend[3];
+ }
+
+ // Otherwise, try to guess
+ const baseUrl = friend[1].replace(/\/$/, '');
+ const guesses = [
+ `${baseUrl}/atom.xml`,
+ `${baseUrl}/rss.xml`,
+ `${baseUrl}/feed`,
+ `${baseUrl}/feed/`,
+ `${baseUrl}/index.xml`
+ ];
+
+ for (const url of guesses) {
+ try {
+ // Simple HEAD request or just try to parse
+ // Since we use rss-parser, just trying to parse is easiest check
+ // But doing this for every friend is slow.
+ // For now, we only use explicit RSS if provided, or simple guess if not.
+ // To speed up, we'll just try the first guess or return null if strict.
+ // But to be helpful, let's try the most common one: atom.xml
+ // ideally we should check HEAD, but let's just return the first guess for now
+ // and let the parser fail if it's wrong.
+ // BETTER STRATEGY: Return a list of candidates and try them.
+ } catch (e) {}
+ }
+
+ return `${baseUrl}/atom.xml`; // Default guess
+}
+
+async function main() {
+ console.log('Starting Friend Circle generation...');
+
+ if (!fs.existsSync(LINK_LITE_PATH)) {
+ console.error('link_lite.json not found!');
+ process.exit(1);
+ }
+
+ const data = JSON.parse(fs.readFileSync(LINK_LITE_PATH, 'utf8'));
+ // data.friends is an array of arrays: [name, url, avatar, rss?]
+
+ let allPosts = [];
+
+ // Process friends in batches to avoid overwhelming network
+ const BATCH_SIZE = 5;
+ const friends = data.friends;
+
+ for (let i = 0; i < friends.length; i += BATCH_SIZE) {
+ const batch = friends.slice(i, i + BATCH_SIZE);
+ const promises = batch.map(async (friend) => {
+ const name = friend[0];
+ const blogUrl = friend[1];
+ const avatar = friend[2];
+ let rssUrl = friend.length >= 4 ? friend[3] : null;
+
+ // Heuristics for RSS URL
+ const candidates = [];
+ if (rssUrl) {
+ candidates.push(rssUrl);
+ } else {
+ const cleanUrl = blogUrl.replace(/\/$/, '');
+ candidates.push(`${cleanUrl}/atom.xml`);
+ candidates.push(`${cleanUrl}/rss.xml`);
+ candidates.push(`${cleanUrl}/feed`);
+ candidates.push(`${cleanUrl}/feed/`);
+ candidates.push(`${cleanUrl}/feed.xml`);
+ candidates.push(`${cleanUrl}/index.xml`);
+ candidates.push(`${cleanUrl}/rss`);
+ candidates.push(`${cleanUrl}/atom`);
+ }
+
+ let feed = null;
+ for (const url of candidates) {
+ feed = await fetchFeed(url);
+ if (feed) {
+ // console.log(`[${name}] Fetched RSS: ${url}`);
+ break;
+ }
+ }
+
+ if (!feed) {
+ console.log(`[${name}] No valid RSS found.`);
+ return;
+ }
+
+ // Extract posts
+ const posts = feed.items.slice(0, MAX_POSTS_PER_FRIEND).map(item => {
+ let img = null;
+ // Try to find an image in content
+ // Priority: content:encoded > content > description
+ const content = item['content:encoded'] || item.content || item.description || '';
+
+ // Better regex to capture src with single or double quotes
+ const imgMatch = content.match(/
]+src=['"]([^'"]+)['"]/i);
+
+ if (imgMatch) {
+ img = imgMatch[1];
+ } else if (item.enclosure && item.enclosure.url && item.enclosure.type && item.enclosure.type.startsWith('image')) {
+ img = item.enclosure.url;
+ }
+
+ // Get a short snippet
+ let snippet = '';
+ if (content) {
+ // Remove HTML tags
+ snippet = content.replace(/<[^>]+>/g, '');
+ // Remove excessive whitespace
+ snippet = snippet.replace(/\s+/g, ' ').trim();
+ // Truncate
+ if (snippet.length > 120) {
+ snippet = snippet.substring(0, 120) + '...';
+ }
+ }
+
+ return {
+ title: item.title,
+ link: item.link,
+ date: item.isoDate || item.pubDate, // RSS parser standardizes this
+ author: name,
+ avatar: avatar,
+ blogUrl: blogUrl,
+ image: img,
+ description: snippet
+ };
+ });
+
+ allPosts = allPosts.concat(posts);
+ });
+
+ await Promise.all(promises);
+ process.stdout.write(`Processed ${Math.min(i + BATCH_SIZE, friends.length)}/${friends.length} friends...\r`);
+ }
+
+ console.log('\nSorting and saving...');
+
+ // Sort by date desc
+ allPosts.sort((a, b) => {
+ return new Date(b.date) - new Date(a.date);
+ });
+
+ // Limit total
+ const finalPosts = allPosts.slice(0, MAX_TOTAL_POSTS);
+
+ const output = {
+ updated: new Date().toISOString(),
+ posts: finalPosts
+ };
+
+ fs.writeFileSync(OUTPUT_PATH, JSON.stringify(output, null, 2));
+ console.log(`Saved ${finalPosts.length} posts to ${OUTPUT_PATH}`);
+}
+
+main();
diff --git a/themes/Ying/data/links.yaml b/themes/Ying/data/links.yaml
index ecc95035..fa6f49fd 100644
--- a/themes/Ying/data/links.yaml
+++ b/themes/Ying/data/links.yaml
@@ -95,14 +95,6 @@ blogs:
url: https://sumiler.com
description: 微风轻轻起 夏日不再来
image: https://cravatar.cn/avatar//a35f5ef7a4bce3b7cfa6f538ffcae7aa
- - name: 林林杂语
- url: https://www.xiaozonglin.cn
- description: 一位来自福建泉州的高中生
- image: https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp
- - name: 西瓜撞地球
- url: https://www.bio-w.cn
- description: 我在人间贩卖彩虹
- image: https://bu.dusays.com/2022/10/17/634d313602a1e.png
- name: Kris Yan
url: https://blog.krisyan.dev
description: 無限進步 @Schale夏萊
@@ -159,3 +151,7 @@ blogs:
url: https://aloner.ink
description: 随便写写
image: https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d
+ - name: 子舒
+ url: https://www.zhishu.me
+ description: 子舒的博客
+ image: https://gravatar.zishu.me/avatar/bdad602f1f9d29ce83944c4f6225d1cc?s=200&d=retro
diff --git a/themes/Ying/layouts/_default/circles.html b/themes/Ying/layouts/_default/circles.html
index 97b9c2d7..2c668c9f 100644
--- a/themes/Ying/layouts/_default/circles.html
+++ b/themes/Ying/layouts/_default/circles.html
@@ -2,23 +2,398 @@
-{{ end }}
+{{ end }}
\ No newline at end of file
diff --git a/themes/Ying/layouts/partials/header.html b/themes/Ying/layouts/partials/header.html
index 352c5556..88aae814 100644
--- a/themes/Ying/layouts/partials/header.html
+++ b/themes/Ying/layouts/partials/header.html
@@ -26,10 +26,10 @@
diff --git a/themes/Ying/static/json/friend_circle_data.json b/themes/Ying/static/json/friend_circle_data.json
new file mode 100644
index 00000000..035dad86
--- /dev/null
+++ b/themes/Ying/static/json/friend_circle_data.json
@@ -0,0 +1,1005 @@
+{
+ "updated": "2026-01-21T14:21:34.526Z",
+ "posts": [
+ {
+ "title": "智齿惊魂",
+ "link": "https://www.zoujiang.com/1039.html",
+ "date": "2026-01-19T14:36:00.000Z",
+ "author": "邹江博客",
+ "avatar": "https://www.zoujiang.com/logo.jpg",
+ "blogUrl": "https://www.zoujiang.com",
+ "image": "https://www.zoujiang.com/usr/uploads/2026/01/681506867.webp",
+ "description": "新年第一个月,在抖音上突然频繁刷到关于牙周炎、牙龈萎缩博主的自述视频,让我产生了牙齿健康还有钱包余额的双重焦虑。我的左下颚和右下颚各有一颗智齿,每次餐后都会塞食物残渣,必须拿冲牙器清理干净,否则残渣发酵发臭,很快就会发炎。最近刷牙出了点血,..."
+ },
+ {
+ "title": "整活:基于对等原则的流量交换系统",
+ "link": "https://www.xiaozonglin.cn/swap-system-based-on-equality-principle/",
+ "date": "2026-01-16T09:18:10.000Z",
+ "author": "林林杂语",
+ "avatar": "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp",
+ "blogUrl": "https://www.xiaozonglin.cn",
+ "image": null,
+ "description": "起因是我在“开往-友链接力”项目审核的时候,偶尔遇到一些博客站长非常在意自己的流量,在审核通过之前不把链接挂上去,觉得提前挂是开往占了便宜。被恶心到了,于是我想着做一套基于对等原则的流量交换系统(也就是一个链接跳转),这样链接双方给彼此的流..."
+ },
+ {
+ "title": "松声|廿六年·一月初·雪叩窗",
+ "link": "https://xyzbz.cn/archives/1496/",
+ "date": "2026-01-15T21:17:35.000Z",
+ "author": "网友小宋",
+ "avatar": "https://cravatar.cn/avatar/120340d1df519f4e28613fe5d404b286?s=65&r=G&d=",
+ "blogUrl": "https://xyzbz.cn",
+ "image": "https://img.xyzbz.cn/i/2026/01/01/6955ad8dede6f.jpg",
+ "description": "更新计划月初着手规划站点的新年更新计划,核心卡在标题格式,接连几天的头脑风暴,始终不满意,把想法告诉AI,首先舍弃农历记法的,经过一番为难,发现似乎也并非完全不可用,去粗取精,保证月份的准确性就好。最终格式保持四段,固定的松声(固定)+农历..."
+ },
+ {
+ "title": "卖火柴的小女孩 - AI互动式故事",
+ "link": "https://www.sirit.com.cn/archives/721/",
+ "date": "2026-01-15T15:10:00.000Z",
+ "author": "大嘴狗狗",
+ "avatar": "https://www.sirit.com.cn/siritlogo.png",
+ "blogUrl": "https://www.sirit.com.cn",
+ "image": null,
+ "description": "今天忽然想起来曾经看过一本书,是带分支故事的,不同的选择跳转到不同的页码,然后有不同的结局。现在人工智能发展的这么厉害,编故事这样的事情应该是小菜一碟,而且代码都不用自己来敲了。下载了 CodeBuddy 国内版,然后输入提示词:假设你就是..."
+ },
+ {
+ "title": "数学学习的"笨办法"指南",
+ "link": "https://www.sirit.com.cn/archives/719/",
+ "date": "2026-01-15T03:37:00.000Z",
+ "author": "大嘴狗狗",
+ "avatar": "https://www.sirit.com.cn/siritlogo.png",
+ "blogUrl": "https://www.sirit.com.cn",
+ "image": "/sirit/uploads/2026/01/837843657.jpeg",
+ "description": "那些成就\"数学学霸\"的,往往不是花里胡哨的技巧,而是最\"笨\"的坚持。笨方法,才是真功夫。步骤一:死磕基础,夯实根基吃透核心概念从最基础的计算训练到重要概念公式的理解不放过任何一个细节确保选择题前八道和填空题前两道的分都能拿完定时不定量练习每..."
+ },
+ {
+ "title": "2026年度目标思考指南",
+ "link": "https://www.sirit.com.cn/archives/718/",
+ "date": "2026-01-15T01:54:00.000Z",
+ "author": "大嘴狗狗",
+ "avatar": "https://www.sirit.com.cn/siritlogo.png",
+ "blogUrl": "https://www.sirit.com.cn",
+ "image": "/sirit/uploads/2026/01/3169879434.jpeg",
+ "description": "这辈子,你想成为什么样的人?不知道自己想要成为什么的人,是很难定好目标的。在 2026 年这特殊的开始,以下 50 个问题,从目标探寻、身份思考、意义挖掘这三方面,协助大家思考新年目标。Part 01:目标探寻排除外界的噪音,找到你内心真正..."
+ },
+ {
+ "title": "用Docker部署RustDesk远程桌面控制工具",
+ "link": "https://vjo.cc/1935",
+ "date": "2026-01-14T00:17:00.000Z",
+ "author": "刘郎阁",
+ "avatar": "https://yjvc.cn/usr/uploads/logo.jpeg",
+ "blogUrl": "https://vjo.cc",
+ "image": null,
+ "description": "现在不管是个人远程管理设备,还是团队日常协作运维,远程桌面工具都成了刚需。市面上的 TeamViewer 、 AnyDesk 、向日葵、 ToDesk 各有优势,可要么商用版价格不菲,要么免费版功能受限,还得依赖第三方服务器,数据安全总让人..."
+ },
+ {
+ "title": "怀孕",
+ "link": "https://www.duanxiansen.com/3236.html",
+ "date": "2026-01-09T09:01:47.000Z",
+ "author": "段先森",
+ "avatar": "https://q.qlogo.cn/g?b=qq&nk=2443266417@qq.com&s=100",
+ "blogUrl": "https://duanxiansen.com",
+ "image": null,
+ "description": "2025年很开心的一件事情就是怀孕了,但是这十个月让我感受到了怀孕的辛苦,不只是身体上带来的疼痛,更是心理上的 […]"
+ },
+ {
+ "title": "毕设|开题报告",
+ "link": "https://beifeng.me/archives/2502",
+ "date": "2026-01-08T19:47:47.000Z",
+ "author": "北枫",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=41777657&s=640",
+ "blogUrl": "https://beifeng.me",
+ "image": "https://fastly.jsdelivr.net/gh/twitter/twemoji@latest/assets/svg/1f634.svg",
+ "description": "不知不觉我都要毕业了,最近在忙开题报告(虽然都是ai写的,但是还要自己排版一下hhh)还有就是关闭了仅显示一个月的动态,暂时就这样吧,真的好久没有码字了,好不习惯"
+ },
+ {
+ "title": "迟到的杭漂,2025个人总结",
+ "link": "https://www.ershiliu.com/posts/20260108",
+ "date": "2026-01-08T00:00:00.000Z",
+ "author": "二十六",
+ "avatar": "https://www.ershiliu.com/favicon.ico",
+ "blogUrl": "https://www.ershiliu.com/",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "电话那头是父亲,生活这头是我",
+ "link": "https://www.ershiliu.com/posts/20260107",
+ "date": "2026-01-07T00:00:00.000Z",
+ "author": "二十六",
+ "avatar": "https://www.ershiliu.com/favicon.ico",
+ "blogUrl": "https://www.ershiliu.com/",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "烟花未响,结石先“炸”",
+ "link": "https://www.zoujiang.com/1030.html",
+ "date": "2026-01-05T13:48:00.000Z",
+ "author": "邹江博客",
+ "avatar": "https://www.zoujiang.com/logo.jpg",
+ "blogUrl": "https://www.zoujiang.com",
+ "image": null,
+ "description": "2025最后一天,别人跨年盼烟花,我被结石猝不及防炸了场,疼得灵魂出窍。原本计划去跨年的,门票都买好了。早上被尿憋醒,上床想再眯一会,结果尿意又涌上来,只好又跑去厕所。但尿不出来,就这样循环了几次。紧接着,左下腹疼得钻心,痛感还辐射到腰部。..."
+ },
+ {
+ "title": "新的一年到了回忆一下2025年吧",
+ "link": "https://ihello.cc/archives/261.html",
+ "date": "2026-01-04T09:11:21.000Z",
+ "author": "小稚生活志",
+ "avatar": "https://bu.dusays.com/2024/02/02/65bbce27b129a.jpg",
+ "blogUrl": "https://ihello.cc",
+ "image": "https://ihello.cc/wp-content/uploads/2026/01/IMG_1250-2000x2667.jpeg",
+ "description": "初入大学的军训. 经历了两个星期的军训,起初感觉军训特别难熬,不过习惯以后我觉得时间过的特别快没有刚开始那种特别累的感觉,有点想念我们的教官了,军训结束的时候教官默默的上了车,那时候几乎所有人都跑去跟教官说了再见 还记得休息时间教官让我和两..."
+ },
+ {
+ "title": "2025年终回顾",
+ "link": "https://xyzbz.cn/archives/1491/",
+ "date": "2026-01-03T02:15:00.000Z",
+ "author": "网友小宋",
+ "avatar": "https://cravatar.cn/avatar/120340d1df519f4e28613fe5d404b286?s=65&r=G&d=",
+ "blogUrl": "https://xyzbz.cn",
+ "image": "https://img.xyzbz.cn/i/2026/01/02/69577a32e8bf1.png",
+ "description": "年度碎碎念时光荏苒,岁月如梭,是真的如梭!时间线还没到2026年,佬们就开始写年终总结了,原本想着慢悠悠打磨、随性记录的心思,终究抵不过这股 “内卷” 热潮。看着RSS里面日渐增加的年终关键词,不写是不行了,总结参考S,雅余佬的风格,再掺点..."
+ },
+ {
+ "title": "2026元旦初雪",
+ "link": "https://xyzbz.cn/archives/1489/",
+ "date": "2025-12-31T23:19:00.000Z",
+ "author": "网友小宋",
+ "avatar": "https://cravatar.cn/avatar/120340d1df519f4e28613fe5d404b286?s=65&r=G&d=",
+ "blogUrl": "https://xyzbz.cn",
+ "image": "https://img.xyzbz.cn/i/2026/01/01/6955ad8cbcde8.jpg",
+ "description": "2026年元旦下了一夜的大雪,瑞雪兆丰年,祝各位元旦快乐![photos][/photos][photos][/photos][photos][/photos][photos][/photos]"
+ },
+ {
+ "title": "基于Node.js和Npm部署Astro博客系统",
+ "link": "https://vjo.cc/1926",
+ "date": "2025-12-31T00:45:00.000Z",
+ "author": "刘郎阁",
+ "avatar": "https://yjvc.cn/usr/uploads/logo.jpeg",
+ "blogUrl": "https://vjo.cc",
+ "image": "https://mmbiz.qpic.cn/sz_mmbiz_gif/LkQibZulB1ibD1Pj1PAwnic5a7UvHuZ9bicFVYulUcnB1GZ8xbgXwQYZjak8WmKQiaNckIfbh0ZfldjCDJtW2ia7RELg/640?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1#imgIndex=0",
+ "description": "Astro 作为一款高性能的静态站点生成器,凭借“零 JS 运行时”的特性,既能打造加载飞快的博客页面,又能兼顾开发灵活性,成为很多开发者搭建个人博客的首选。本文将从零开始,手把手教你基于 Node.js 和 npm 完成 Astro 博客..."
+ },
+ {
+ "title": "杂记·思维快照",
+ "link": "https://www.zoujiang.com/1005.html",
+ "date": "2025-12-30T09:11:00.000Z",
+ "author": "邹江博客",
+ "avatar": "https://www.zoujiang.com/logo.jpg",
+ "blogUrl": "https://www.zoujiang.com",
+ "image": null,
+ "description": "1、看了李新野的博客之后,对自己的思考和认知带来了一定的冲击。尤其是他分析推演的“《中国房地产会再跌90%》”一文。还有一篇在网上爆火的文章,“关于《我的父亲李松坚》”,把他的父亲推上风口浪尖。另外有一篇神作有兴趣的博友可以找找看,这里就不..."
+ },
+ {
+ "title": "乙巳蛇年-十二月末",
+ "link": "https://xyzbz.cn/archives/1488/",
+ "date": "2025-12-29T21:02:35.000Z",
+ "author": "网友小宋",
+ "avatar": "https://cravatar.cn/avatar/120340d1df519f4e28613fe5d404b286?s=65&r=G&d=",
+ "blogUrl": "https://xyzbz.cn",
+ "image": "https://img.xyzbz.cn/i/2025/12/27/694f97988bbe8.jpg",
+ "description": "飞牛Arm前几天看到熊猫群里有人发布的截图,飞牛的Arm版本发布了内侧招募,招募设备包括OEC/T和斐讯N1,OEC带sata盘位的那个设备还是挺吸引人的,但是自从放弃了ARM架构的设备之后就没有关心过这些了。很久之前买过一个斐讯N1,还让..."
+ },
+ {
+ "title": "从来不发朋友圈的人是什么心理?",
+ "link": "https://heitaosan.com/article/232",
+ "date": "2025-12-28T11:30:00.000Z",
+ "author": "黑桃三",
+ "avatar": "https://s2.ax1x.com/2020/01/03/lUmf81.png",
+ "blogUrl": "https://heitaosan.com",
+ "image": null,
+ "description": "你肯定认识这种人,微信好友加了好几年,点进去就是一条横线,空空如也。你甚至怀疑他是不是把你屏蔽了,换个小号去看,还是什么都没有。这种人,在你的通讯录里可能占了一大半。他们不是没有生活,不是社恐,更不是过得不好,恰恰相反,他们可能比那些天天晒..."
+ },
+ {
+ "title": "2025年底白云山之行",
+ "link": "https://www.ershiliu.com/posts/20251228",
+ "date": "2025-12-28T00:00:00.000Z",
+ "author": "二十六",
+ "avatar": "https://www.ershiliu.com/favicon.ico",
+ "blogUrl": "https://www.ershiliu.com/",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "KK的明信片到底有什么魅力?",
+ "link": "https://vian.top/708.html",
+ "date": "2025-12-27T12:22:00.000Z",
+ "author": "Vian",
+ "avatar": "https://www.vian.top/avatar.ico",
+ "blogUrl": "https://vian.top",
+ "image": null,
+ "description": "前天关闭了评论过滤插件,因为有点小毛病没修好,也不知道具体因为啥。然后出现了7条垃圾广告评论全部都在KK的明信片这篇博文中。"
+ },
+ {
+ "title": "生日(贰)",
+ "link": "https://www.xiaozonglin.cn/birthday-2025/",
+ "date": "2025-12-25T16:18:16.000Z",
+ "author": "林林杂语",
+ "avatar": "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp",
+ "blogUrl": "https://www.xiaozonglin.cn",
+ "image": null,
+ "description": "但在此时此刻,你的出生是值得被庆祝的。 在之前的 《生日》一文中我写到过这样一句话。 一年中平平凡凡的日子那么多,可“生日”对每个人来说似乎都是特别的。记住别人的生日,常被视为拉近关系的一种方式——可我连父母的生日都记不牢。有一个例外:我清..."
+ },
+ {
+ "title": "随笔#“豆包AI手机”",
+ "link": "https://rz.sb/archives/362/",
+ "date": "2025-12-25T09:57:00.000Z",
+ "author": "若志随笔",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=80360650&s=640",
+ "blogUrl": "https://www.rz.sb",
+ "image": "https://rz.sb/usr/themes/A-Sleek/src/img/loading.svg",
+ "description": "也是小小的体验了一手“豆包AI手机”靠智谱的Open-AutoGLM 连ADB实现的就是响应太🐔儿慢了,直接用他智谱提供的部署模型,不是本地模型(听说本地部署要求配置很高),不知道是不是这个原因"
+ },
+ {
+ "title": "近况(5)",
+ "link": "https://t-t.live/archives/0DOTYOaQ",
+ "date": "2025-12-23T06:14:46.000Z",
+ "author": "团团生活志",
+ "avatar": "https://img.t-t.live/img/tx.png",
+ "blogUrl": "https://t-t.live",
+ "image": "https://t-t.live/plugins/feed/assets/telemetry.gif?title=%E8%BF%91%E5%86%B5%EF%BC%885%EF%BC%89&url=/archives/0DOTYOaQ",
+ "description": "手忙脚乱搬家 由于工作实际状况与我去面试描述不符,我就离职了。现在又处于摸鱼阶段了... 住的地方太小了,换了一个123平的小区,搬家心得:大家电能不要就不要,不然真的搬起来累。因为搬家的距离不是很远,6公里货拉拉87元,给了司机270搬家..."
+ },
+ {
+ "title": "Docker部署简单网页分析工具GoatCounter",
+ "link": "https://xyzbz.cn/archives/1485/",
+ "date": "2025-12-23T05:31:55.000Z",
+ "author": "网友小宋",
+ "avatar": "https://cravatar.cn/avatar/120340d1df519f4e28613fe5d404b286?s=65&r=G&d=",
+ "blogUrl": "https://xyzbz.cn",
+ "image": "https://img.xyzbz.cn/i/2025/12/23/694a21b38eb4c.png",
+ "description": "起因万般缘由皆是Umami更新失败,导致我自己摧毁了容器,原不是Mysql,本身就是pg数据库,更新还是出问题了,经博友指点可能是镜像源的问题,仔细回想,当时从美西机子导出镜像的时候并没有pg后缀,删除的镜像的时候似乎还发现了Mysql的字..."
+ },
+ {
+ "title": "使用 Gemini 来辅导数学作业 01",
+ "link": "https://www.sirit.com.cn/archives/714/",
+ "date": "2025-12-23T02:25:00.000Z",
+ "author": "大嘴狗狗",
+ "avatar": "https://www.sirit.com.cn/siritlogo.png",
+ "blogUrl": "https://www.sirit.com.cn",
+ "image": "/sirit/uploads/2025/12/1874086315.png",
+ "description": "要给小朋友讲一些数学题目,感觉干巴巴的给小朋友讲,有点无趣。众所周知,现在的孩子大部分是不喜欢学习的,尤其对数学这个科目比较头疼,如何提高他们的学习兴趣,特别是对数学的兴趣尤为重要。最近正好在用 Gemini,尝试了一下,结果十分惊艳😄数..."
+ },
+ {
+ "title": "今日冬至",
+ "link": "https://vian.top/706.html",
+ "date": "2025-12-21T14:31:00.000Z",
+ "author": "Vian",
+ "avatar": "https://www.vian.top/avatar.ico",
+ "blogUrl": "https://vian.top",
+ "image": null,
+ "description": "好久不见,又好多天没写点什么了。今日冬至,都吃饺子了没😁,我自己做的芹菜猪肉馅饺子,味道很不错。现在只会在一个人做饭的时候感觉心情格外平静,自己剁馅、调味、和面、分剂、擀皮、包、下锅。享受着这难得的内心平静😊还炖了一锅羊腿,肉的味道比较..."
+ },
+ {
+ "title": "“噼里啪啦”那是干燥的聚酯纤维摩擦的声音",
+ "link": "https://heitaosan.com/article/230",
+ "date": "2025-12-21T02:34:00.000Z",
+ "author": "黑桃三",
+ "avatar": "https://s2.ax1x.com/2020/01/03/lUmf81.png",
+ "blogUrl": "https://heitaosan.com",
+ "image": null,
+ "description": "网上一直有种流行的说法:冬天是贫富差距最明显的季节。因为富人穿羊绒皮草,穷人只能穿聚酯纤维。[...]"
+ },
+ {
+ "title": "一线城市买车这事,真得想清楚",
+ "link": "https://www.ershiliu.com/posts/20251220",
+ "date": "2025-12-20T00:00:00.000Z",
+ "author": "二十六",
+ "avatar": "https://www.ershiliu.com/favicon.ico",
+ "blogUrl": "https://www.ershiliu.com/",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "白嫖两个腾讯云EdgeOne长期免费套餐",
+ "link": "https://heitaosan.com/article/229",
+ "date": "2025-12-16T02:45:00.000Z",
+ "author": "黑桃三",
+ "avatar": "https://s2.ax1x.com/2020/01/03/lUmf81.png",
+ "blogUrl": "https://heitaosan.com",
+ "image": null,
+ "description": "实测有效!轻松搞定两个永久免费套餐。[...]"
+ },
+ {
+ "title": "随笔#新米:zao.ge",
+ "link": "https://rz.sb/archives/345/",
+ "date": "2025-12-16T01:44:00.000Z",
+ "author": "若志随笔",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=80360650&s=640",
+ "blogUrl": "https://www.rz.sb",
+ "image": "https://rz.sb/usr/themes/A-Sleek/src/img/loading.svg",
+ "description": "看人手一.ge,心一痒,九九一付,造个(zao.ge)拿下...用 AI,来造个专属!> lai.zao.ge有想法?去造个试试!> qu.zao.ge想造啥,就制造个啥!> zhi.zao.ge造个AI (ZaoGe) - 别..."
+ },
+ {
+ "title": "Typecho频繁更换主题后,如何清理无用的自定义字段?",
+ "link": "https://heitaosan.com/article/228",
+ "date": "2025-12-15T01:49:00.000Z",
+ "author": "黑桃三",
+ "avatar": "https://s2.ax1x.com/2020/01/03/lUmf81.png",
+ "blogUrl": "https://heitaosan.com",
+ "image": null,
+ "description": "Typecho的自定义字段功能强大,但频繁切换主题会导致数据库中堆积大量废弃字段。强迫症每次看到文章编辑窗口下面这些字段属实难受。[...]"
+ },
+ {
+ "title": "如何绕过代理直连网站",
+ "link": "https://www.sirit.com.cn/archives/711/",
+ "date": "2025-12-14T08:19:00.000Z",
+ "author": "大嘴狗狗",
+ "avatar": "https://www.sirit.com.cn/siritlogo.png",
+ "blogUrl": "https://www.sirit.com.cn",
+ "image": "/sirit/uploads/2025/12/2262171534.png",
+ "description": "为了用上 Gemini3 ,不得不用科学上网软件,但是访问 simpletex API 接口的时候又会报错,于是就得关掉科学上网,这样来回折腾很麻烦。于是问了 Deep seek,回答如下:方法一:通过系统代理设置(推荐)打开代理设置Win..."
+ },
+ {
+ "title": "把博客收拾了一下 重装系统升级运行环境",
+ "link": "https://heitaosan.com/article/226",
+ "date": "2025-12-13T02:46:00.000Z",
+ "author": "黑桃三",
+ "avatar": "https://s2.ax1x.com/2020/01/03/lUmf81.png",
+ "blogUrl": "https://heitaosan.com",
+ "image": null,
+ "description": "终于有耐心把博客倒腾一下了,看了下记录 从2022年1月7日把博客从ucloud迁到腾讯云后就没动过,三天前的晚上突然决定要把主机系统和运行环境升级一下。[...]"
+ },
+ {
+ "title": "2025年终总结",
+ "link": "https://www.xiaozonglin.cn/2025-annual-summary/",
+ "date": "2025-12-12T15:11:51.000Z",
+ "author": "林林杂语",
+ "avatar": "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp",
+ "blogUrl": "https://www.xiaozonglin.cn",
+ "image": "https://www.xiaozonglin.cn/wp-content/uploads/2025/12/IMG_20251231_153853-768x1024.jpg",
+ "description": "12月31日,西安下起了第一场雪 来北方上学的一项期待就是看雪,西安的雪泡汤了几次,今天终于把雪下下来了。雪很细,原本以为雪是白的,像冰淇淋一样,结果雪落到衣服上是小冰晶。 又来到每年本博客的固定节目:年终总结。 时间会冲淡很多事情。几个月..."
+ },
+ {
+ "title": "用Docker部署Virola Messenger即时通讯工具",
+ "link": "https://vjo.cc/1913",
+ "date": "2025-12-11T01:50:00.000Z",
+ "author": "刘郎阁",
+ "avatar": "https://yjvc.cn/usr/uploads/logo.jpeg",
+ "blogUrl": "https://vjo.cc",
+ "image": null,
+ "description": "现在不管是企业团队协作,还是个人日常联系,都离不开一款安全又顺手的即时通讯工具,Virola Messenger正是这样一款支持自托管,能为企业和个人提供安全、轻量级即时消息与集成功能的沟通协作工具。 [...]"
+ },
+ {
+ "title": "碰到情绪化的外卖员,大家会如何反应",
+ "link": "https://www.ershiliu.com/posts/20251204",
+ "date": "2025-12-04T00:00:00.000Z",
+ "author": "二十六",
+ "avatar": "https://www.ershiliu.com/favicon.ico",
+ "blogUrl": "https://www.ershiliu.com/",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "近况(4)",
+ "link": "https://t-t.live/archives/gML2C0VP",
+ "date": "2025-12-03T06:56:41.000Z",
+ "author": "团团生活志",
+ "avatar": "https://img.t-t.live/img/tx.png",
+ "blogUrl": "https://t-t.live",
+ "image": "https://t-t.live/plugins/feed/assets/telemetry.gif?title=%E8%BF%91%E5%86%B5%EF%BC%884%EF%BC%89&url=/archives/gML2C0VP",
+ "description": "没更新的日子都在跑美团,健身。不想跑了就待在家里打游戏,11月中旬回了躺老家,准备盖完剩下的二层。并安装多了二个海康威视的枪机监控用于实时观看师傅们建房的过程。 回去前面试了一份工作,看工作要求跟我专业是差不多的,但当我实际上班第三天的时候..."
+ },
+ {
+ "title": "中国禁毒寸步不让",
+ "link": "https://vian.top/705.html",
+ "date": "2025-11-29T06:57:00.000Z",
+ "author": "Vian",
+ "avatar": "https://www.vian.top/avatar.ico",
+ "blogUrl": "https://vian.top",
+ "image": null,
+ "description": "中国禁毒寸步不让!致敬禁毒英雄!"
+ },
+ {
+ "title": "委屈",
+ "link": "https://vian.top/704.html",
+ "date": "2025-11-26T04:25:00.000Z",
+ "author": "Vian",
+ "avatar": "https://www.vian.top/avatar.ico",
+ "blogUrl": "https://vian.top",
+ "image": null,
+ "description": "也过了伤春悲秋的季节,为什么心里总有一股气郁结于胸,呼不出咽不下。莫名其妙的就觉得很委屈,一瞬间眼泪就充斥了眼眶。为什么?说不出,也不知道。想逃离,找个无人认识的地方重新开始生活,感觉现在的一切没什么可留恋的……"
+ },
+ {
+ "title": "可能到季节了吧",
+ "link": "https://vian.top/703.html",
+ "date": "2025-11-25T12:01:00.000Z",
+ "author": "Vian",
+ "avatar": "https://www.vian.top/avatar.ico",
+ "blogUrl": "https://vian.top",
+ "image": null,
+ "description": "可能到季节了吧,最近想回家的心情愈发迫切,恨不得现在就开车走。但是仔细想想,开车去哪呢?那里是我家又不是我家……突然好怀念在深圳的日子,孤独而又自在,一个人生活不用考虑太多,也没那么多烦心事……我这种没有能力的农村孩子,注定逃不掉,逃不掉被..."
+ },
+ {
+ "title": " EdgeOne:使用 TinaCMS 管理静态博客 ",
+ "link": "https://blog.200011.net/tinacms-edgeone-oss/",
+ "date": "2025-11-25T08:00:00.000Z",
+ "author": "油油",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1376652515&s=640",
+ "blogUrl": "https://blog.200011.net",
+ "image": null,
+ "description": "前言 在此之前,我的博客是使用 11ty 开发的静态博客,无任何后端程序支撑,文章全部都放在 Github,这会导致我只能在有 Git 的环境下才能更新文章。而且我上传图片的程序也是用 Node 开发的,所以上传图片我也需要使用电脑,无法做..."
+ },
+ {
+ "title": "微信时光机#热爱的",
+ "link": "https://rz.sb/archives/344/",
+ "date": "2025-11-24T11:59:00.000Z",
+ "author": "若志随笔",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=80360650&s=640",
+ "blogUrl": "https://www.rz.sb",
+ "image": "https://rz.sb/usr/themes/A-Sleek/src/img/loading.svg",
+ "description": "✨以 热 爱,致 生 活🍃💻 🚴🏼 🏕🥘 ⚽️ 🎱🔫 🎮 🎬"
+ },
+ {
+ "title": "基于宝塔Frp实现本地飞牛Nas内网穿透",
+ "link": "https://vjo.cc/1876",
+ "date": "2025-11-19T07:10:00.000Z",
+ "author": "刘郎阁",
+ "avatar": "https://yjvc.cn/usr/uploads/logo.jpeg",
+ "blogUrl": "https://vjo.cc",
+ "image": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/LkQibZulB1ibCJFg03guRx2QfKLq76CdwWbjBOKQx5l9WIsJgFlSIsRaib242y1nGSHlPaNWIMiaqytZHj5Oo3pQVg/640?wx_fmt=jpeg&watermark=1&tp=webp&wxfrom=5&wx_lazy=1#imgIndex=0",
+ "description": "家里的飞牛NAS里,存了不少重要的日常文件、珍贵照片以及各类资源。虽说飞牛NAS自带外网访问功能,却受不少因素制约,实际用起来并不顺手。同一时段使用的人一多,操作卡顿不说,文件上传、下载速度还会明显变慢,特别影响使用体验。即便设备有更高速稳..."
+ },
+ {
+ "title": "adb常用命令",
+ "link": "https://blog.fivk.cn/archives/6628.html",
+ "date": "2025-11-12T10:13:30.000Z",
+ "author": "Fivk博客",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=11470226&s=640",
+ "blogUrl": "https://blog.fivk.cn",
+ "image": null,
+ "description": "### adb 命令 adb devices # 列出 adb 设备 adb reboot # 重启设备 adb reboot bootloader # 重启到 fastboot 模式 adb reboot recovery # 重启到 r..."
+ },
+ {
+ "title": "随笔#续费+新米",
+ "link": "https://rz.sb/archives/341/",
+ "date": "2025-11-09T03:11:00.000Z",
+ "author": "若志随笔",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=80360650&s=640",
+ "blogUrl": "https://www.rz.sb",
+ "image": "https://rz.sb/usr/themes/A-Sleek/src/img/loading.svg",
+ "description": "前两天收到rzsb的快到期通知,今天想起来给续一下然后脑子一热顺带新买了个米,因为现在基本上都在用\"苏哥拉弟(sugerady)\"这个id在网络冲浪想着也给这个id也注册个米,英文名又有点长,不便于记忆,还没有dy这个后缀,联想了几个谐音,..."
+ },
+ {
+ "title": "针对博客网站友链的随机网络研究",
+ "link": "https://www.xiaozonglin.cn/blog-friendlink-network-research/",
+ "date": "2025-11-08T14:34:20.000Z",
+ "author": "林林杂语",
+ "avatar": "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp",
+ "blogUrl": "https://www.xiaozonglin.cn",
+ "image": "https://www.xiaozonglin.cn/wp-content/uploads/2025/11/image-1.png",
+ "description": "关键词:博客友链网络;随机网络;小世界现象;数据爬取 一、前言 “六度分离”理论已在社交网络、互联网等领域被研究1。博客网站作为Web2.0的代表,其形成的友链网络是否可视为随机网络?小世界现象在博客网络中是否存在?这是本文想要研究的问题。..."
+ },
+ {
+ "title": "立冬之后",
+ "link": "https://vjo.cc/1845",
+ "date": "2025-11-08T03:21:00.000Z",
+ "author": "刘郎阁",
+ "avatar": "https://yjvc.cn/usr/uploads/logo.jpeg",
+ "blogUrl": "https://vjo.cc",
+ "image": null,
+ "description": "乙巳立冬,天候殊异。炎阳当空,暑气袭人,不似孟冬,反类朱明。余日常作息如旧,朝暮通勤。冗务繁时,忙则废寝;闲暇至时,逸则悠然。闲隙之际,或刷视频、或览博文、或研所好新技,亦足怡情。 [...]"
+ },
+ {
+ "title": "适应期",
+ "link": "https://www.duanxiansen.com/3221.html",
+ "date": "2025-11-02T13:52:22.000Z",
+ "author": "段先森",
+ "avatar": "https://q.qlogo.cn/g?b=qq&nk=2443266417@qq.com&s=100",
+ "blogUrl": "https://duanxiansen.com",
+ "image": null,
+ "description": "前几天,听爸爸说哥哥在他跟前念叨没有钱买东西,我问爸爸给了没有,我爸说给了。从装修房子到现在已经拿去两三万了。 […]"
+ },
+ {
+ "title": "购物|电热毯",
+ "link": "https://beifeng.me/archives/2055",
+ "date": "2025-10-23T08:41:54.000Z",
+ "author": "北枫",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=41777657&s=640",
+ "blogUrl": "https://beifeng.me",
+ "image": "https://img.alicdn.com/imgextra/i3/2206681143602/O1CN01uyzX0D1cTljITl2Dy_!!2206681143602.jpg",
+ "description": "天气冷了,买个电热毯暖暖床吧。"
+ },
+ {
+ "title": "关于车险理性的拒绝",
+ "link": "https://www.duanxiansen.com/3176.html",
+ "date": "2025-10-22T00:43:17.000Z",
+ "author": "段先森",
+ "avatar": "https://q.qlogo.cn/g?b=qq&nk=2443266417@qq.com&s=100",
+ "blogUrl": "https://duanxiansen.com",
+ "image": null,
+ "description": "又到了一年一度的的续保环节了,与往年不同的是,今年出现了两条并行的催促线。 一条是一直在用的、当初不知道怎么用 […]"
+ },
+ {
+ "title": "无服务器部署定时脚本推送",
+ "link": "https://dai.ge/25.html",
+ "date": "2025-10-20T17:55:00.000Z",
+ "author": "阿呆日记",
+ "avatar": "https://dai.ge/img/logo.png",
+ "blogUrl": "https://dai.ge",
+ "image": "https://img.cdn.vin/dai/20251020/1760968222781.png",
+ "description": "去年10月,我写了一篇[利用python搭建TG消息推送的文章][1],当时买了一台几十块钱一年的小鸡来挂这个脚本,虽然隔三差五机器嗝屁,但还是持续使用到了今年8月直到服务器到期,到期后一时没有合适机器来放脚本,于是又花几十块续费了一年,但..."
+ },
+ {
+ "title": "争吵到和好,我们的第七年",
+ "link": "https://www.duanxiansen.com/3076.html",
+ "date": "2025-10-16T14:29:59.000Z",
+ "author": "段先森",
+ "avatar": "https://q.qlogo.cn/g?b=qq&nk=2443266417@qq.com&s=100",
+ "blogUrl": "https://duanxiansen.com",
+ "image": null,
+ "description": "十月国庆节之后,又要去省上产检,预约的是10月13号的专家号,10月11号下午段先森上来,打开门就给我说他把钥 […]"
+ },
+ {
+ "title": "十月杂记-最近我在干啥",
+ "link": "https://t-t.live/archives/2m6TBsvh",
+ "date": "2025-10-16T05:40:30.000Z",
+ "author": "团团生活志",
+ "avatar": "https://img.t-t.live/img/tx.png",
+ "blogUrl": "https://t-t.live",
+ "image": "https://t-t.live/plugins/feed/assets/telemetry.gif?title=%E5%8D%81%E6%9C%88%E6%9D%82%E8%AE%B0-%E6%9C%80%E8%BF%91%E6%88%91%E5%9C%A8%E5%B9%B2%E5%95%A5&url=/archives/2m6TBsvh",
+ "description": "时间一晃就来到了十月中旬了,前几天还依旧记得躺在医院的病床上天天盼望着出院。10月7日我与往常一样洗完澡准备躺床上刷短视频,洗完澡后就觉得头疼身体滚烫。我就意识到我可能发烧了,于是乎打开美团App购买体温枪,一测量39.7°。就抓紧去人民医..."
+ },
+ {
+ "title": "一场没终点的自我寻找",
+ "link": "https://blog.allnull.cn/post-76",
+ "date": "2025-10-13T19:28:55.000Z",
+ "author": "十七的小栈",
+ "avatar": "https://cravatar.cn/avatar/56238a7f177c534928fd3cf4161ab59e?s=65&r=G&d=mm",
+ "blogUrl": "https://blog.allnull.cn",
+ "image": null,
+ "description": "翻来覆去躺了许久,还是没等来睡意。趁着清醒复盘过往,才发现自己的抑郁从未真正消失——和前任在一起的日子里,它几乎没再找上门,我便误以为“恋爱就是治愈抑郁的解药”。直到分手后几个月,实习工作的枯燥像催化剂,让抑郁发作得越来越频繁。我总忍不住想..."
+ },
+ {
+ "title": "使用 Acrylic 复现百团大战 WiFi 钓鱼攻击:关于 Klutton 学长记录的补充",
+ "link": "https://www.xiaozonglin.cn/acrylic-wifi-phishing/",
+ "date": "2025-10-07T14:58:21.000Z",
+ "author": "林林杂语",
+ "avatar": "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp",
+ "blogUrl": "https://www.xiaozonglin.cn",
+ "image": "https://www.xiaozonglin.cn/wp-content/uploads/2025/10/图片.png",
+ "description": "起因 参见:Klutton《使用 Hostapd + dnsmasq + flask web 服务器的 WiFi 钓鱼攻击研究》 故事还要从上个月的百团大战说起,当时我看到信安协会的 Klutton 学长正对着大屏幕敲命令,我就在旁边驻足凑..."
+ },
+ {
+ "title": "怀孕那些事",
+ "link": "https://www.duanxiansen.com/3062.html",
+ "date": "2025-10-07T12:52:00.000Z",
+ "author": "段先森",
+ "avatar": "https://q.qlogo.cn/g?b=qq&nk=2443266417@qq.com&s=100",
+ "blogUrl": "https://duanxiansen.com",
+ "image": null,
+ "description": "结婚也有一年多了,我们两个原本打算我工作稳定之后再生孩子的,但是家里人一直在催,说我们两个年龄大了,不好生养什 […]"
+ },
+ {
+ "title": "我在西贝“白嫖”100块,却因一只蟑螂把另一家店告上法庭",
+ "link": "https://www.zoujiang.com/985.html",
+ "date": "2025-09-29T13:44:00.000Z",
+ "author": "邹江博客",
+ "avatar": "https://www.zoujiang.com/logo.jpg",
+ "blogUrl": "https://www.zoujiang.com",
+ "image": "https://www.zoujiang.com/usr/uploads/2025/09/83949033.webp",
+ "description": "9月25号,我在小红书刷推荐帖子,看到一篇说西贝请全国客户吃饭。后来抖音也刷到了相关视频推荐,说到店任意消费就送100元无门槛代金券。我就邀请了朋友一起去西贝,点了几份牛肉炒饭。说实话,当时店里一个客人都没有,只点最低消费确实不太好意思,毕..."
+ },
+ {
+ "title": "圆梦|王者荣耀",
+ "link": "https://beifeng.me/archives/2047",
+ "date": "2025-09-22T17:19:12.000Z",
+ "author": "北枫",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=41777657&s=640",
+ "blogUrl": "https://beifeng.me",
+ "image": "https://img.alicdn.com/imgextra/i4/2206681143602/O1CN01ZwPiSk1cTlilPwzWP_!!2206681143602.png",
+ "description": "小时候打王者,特别羡慕那些段位高的。如今自己也达到了,证明我的青春结束咯。"
+ },
+ {
+ "title": "夏末(秋始)观星笔记 9.13-14",
+ "link": "https://aloner.ink/Share/That-Last-SummerNight.html",
+ "date": "2025-09-16T06:00:00.000Z",
+ "author": "如约而至",
+ "avatar": "https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d",
+ "blogUrl": "https://aloner.ink",
+ "image": "https://cdn.aloner.ink/usr/uploads/2025/09/2761110750.jpg",
+ "description": "无月,夜空清澈;云少,细碎分布仅记录了肉眼可见的大型星座。记录时间主要为晚上八点到十点,所述可视情况仅限于笔者校内。图片都是手机直拍,夜间会自动使用长曝光算法,出片星点会显著比肉眼可见要多。手持拍摄,容易手抖,模糊是正常的。::Cat_gi..."
+ },
+ {
+ "title": " 使用 Deepseek + MCP 实现文章总结 ",
+ "link": "https://blog.200011.net/ai/deepseek-mcp-article-summary/",
+ "date": "2025-09-12T13:14:10.000Z",
+ "author": "油油",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1376652515&s=640",
+ "blogUrl": "https://blog.200011.net",
+ "image": null,
+ "description": "今天继续给博客新增功能,前段时间一直在做 itwitter 的 AI 功能,但是由于那边是基于纯前端开发的,所以无法使用 MCP 功能。 大致参考了教程写了一个脚本,只需要在命令行执行 pnpm ai:summary 文章id 即可给文章添..."
+ },
+ {
+ "title": " 重写博客系统,举家搬迁 EdgeOne ",
+ "link": "https://blog.200011.net/2025-09-11/",
+ "date": "2025-09-11T09:40:15.000Z",
+ "author": "油油",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1376652515&s=640",
+ "blogUrl": "https://blog.200011.net",
+ "image": "https://blog.oss.200011.net/11ty/20259/wechat_2025-09-11_095332_999.png",
+ "description": "EdgeOne Pages 前段时间在试用 CodeBuddy 的时候发现了 EdgeOne Pages 服务和 CDN 服务。于是我在 Pages 上把个人主页的代码挂上去,发现用 EdgeOne 的速度很快,而且它免费。 挂了几天发现挺..."
+ },
+ {
+ "title": "道友请留步;熬夜修仙?不如先护眼!",
+ "link": "https://www.zoujiang.com/981.html",
+ "date": "2025-09-10T16:00:52.000Z",
+ "author": "邹江博客",
+ "avatar": "https://www.zoujiang.com/logo.jpg",
+ "blogUrl": "https://www.zoujiang.com",
+ "image": null,
+ "description": "最近迷上看小说,看得眼睛发胀,我角膜偏厚,一疲劳眼压就容易升高。赶紧上网买了无防腐剂的玻璃酸钠滴眼液,人工泪液那种,滴上去瞬间舒服多了。果然长期对着电子屏幕,这东西真是必备。期间我还特意淘了一部老古董:韩国LG的一款顶级LCD屏手机,专门拿..."
+ },
+ {
+ "title": "购物|影石Ace Pro 2",
+ "link": "https://beifeng.me/archives/2042",
+ "date": "2025-09-08T13:47:33.000Z",
+ "author": "北枫",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=41777657&s=640",
+ "blogUrl": "https://beifeng.me",
+ "image": "https://img.alicdn.com/imgextra/i2/2206681143602/O1CN01h1wGmf1cTliYWHEpn_!!2206681143602.jpg",
+ "description": "这段时间看了一下运动相机,最后选了影石这款运动相机,出去玩的时候可以拍着玩玩。"
+ },
+ {
+ "title": "现网故障案例分享-OSPF邻居反复震荡",
+ "link": "https://skylan.cc/archives/1757210133201",
+ "date": "2025-09-07T14:55:44.000Z",
+ "author": "清梦云熙",
+ "avatar": "https://cravatar.cn/avatar/853572275a978dbccefbe2242ba1c415",
+ "blogUrl": "https://skylan.cc",
+ "image": "https://skylan.cc/plugins/feed/assets/telemetry.gif?title=%E7%8E%B0%E7%BD%91%E6%95%85%E9%9A%9C%E6%A1%88%E4%BE%8B%E5%88%86%E4%BA%AB-OSPF%E9%82%BB%E5%B1%85%E5%8F%8D%E5%A4%8D%E9%9C%87%E8%8D%A1&url=/archives/1757210133201",
+ "description": "组网介绍 某局点S7706作为核心交换机 下方有S5720作为汇聚交换机 汇聚与核心之间跑OSPF 汇聚承载网关,向核心发布业务路由 组网拓扑如下所示: 故障现象 维护人员接到用户反馈 访问互联网出现时通时不通,并且网络异常卡顿,丢包 于是..."
+ },
+ {
+ "title": "入手极核EZ3i暂时跑众包",
+ "link": "https://t-t.live/archives/dIZLGThT",
+ "date": "2025-09-06T15:01:19.000Z",
+ "author": "团团生活志",
+ "avatar": "https://img.t-t.live/img/tx.png",
+ "blogUrl": "https://t-t.live",
+ "image": "https://t-t.live/plugins/feed/assets/telemetry.gif?title=%E5%85%A5%E6%89%8B%E6%9E%81%E6%A0%B8EZ3i%E6%9A%82%E6%97%B6%E8%B7%91%E4%BC%97%E5%8C%85&url=/archives/dIZLGThT",
+ "description": "因9月1日实施了电动车新国标标准,且广东(广州/深圳)抓的最严格,相信大家也刷到了深圳抓违规电动车第一次扣车(复原原车样子,带相关车辆手续拿回)第二次罚款500-1000元。9月1日后买的旧国标车辆需要在11月31日前完成上牌,否则就算超标..."
+ },
+ {
+ "title": "梁山嘟嘟S3车机安装初体验",
+ "link": "https://t-t.live/archives/H5H0XM1j",
+ "date": "2025-08-30T00:43:50.000Z",
+ "author": "团团生活志",
+ "avatar": "https://img.t-t.live/img/tx.png",
+ "blogUrl": "https://t-t.live",
+ "image": "https://t-t.live/plugins/feed/assets/telemetry.gif?title=%E6%A2%81%E5%B1%B1%E5%98%9F%E5%98%9FS3%E8%BD%A6%E6%9C%BA%E5%AE%89%E8%A3%85%E5%88%9D%E4%BD%93%E9%AA%8C&url=/archives/H5H0XM1j",
+ "description": "我的车是17款的吉利帝豪,是上大学的时候买的,当初是为了代步。后面随着新能源的发展,我也有想换车的想法了,但是由于工资没涨的缘故后便离职了,换车的想法只能是暂时搁置了。 原车的车机就真的只能连接蓝牙听听歌或者收听FM/AM电台,其他啥也干不..."
+ },
+ {
+ "title": " Ai 实战之狗血微信聊天记录生成 ",
+ "link": "https://blog.200011.net/ai-wechat-generator/",
+ "date": "2025-08-26T09:09:44.000Z",
+ "author": "油油",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1376652515&s=640",
+ "blogUrl": "https://blog.200011.net",
+ "image": null,
+ "description": "效果展示"
+ },
+ {
+ "title": "我的暑假工终于结束了",
+ "link": "https://ihello.cc/archives/221.html",
+ "date": "2025-08-24T04:01:00.000Z",
+ "author": "小稚生活志",
+ "avatar": "https://bu.dusays.com/2024/02/02/65bbce27b129a.jpg",
+ "blogUrl": "https://ihello.cc",
+ "image": "https://s.w.org/images/core/emoji/17.0.2/72x72/1f31a.png",
+ "description": "不得不说,当外卖小哥是真的辛苦,起初我刚开始弄的时候也是非常有干劲的,不过后来干了一个多月就感觉越来越累,完全属于干不下去那种感觉 送外卖的途中终会遇到各种各样的事情,比如… 男方给女方点外卖 记得送这个外卖的时候,我心里也是有..."
+ },
+ {
+ "title": "数据线|开箱",
+ "link": "https://beifeng.me/archives/2031",
+ "date": "2025-08-22T10:15:12.000Z",
+ "author": "北枫",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=41777657&s=640",
+ "blogUrl": "https://beifeng.me",
+ "image": "https://img.alicdn.com/imgextra/i2/2206681143602/O1CN01dBfOxf1cTliKDRNtB_!!2206681143602.jpg",
+ "description": "前几个月买的c-c短线,感觉还不错。"
+ },
+ {
+ "title": "邂逅一场夕阳编织的梦",
+ "link": "https://www.liuchengrui.cn/life/748.html",
+ "date": "2025-08-15T14:30:00.000Z",
+ "author": "柳橙睿",
+ "avatar": "https://www.liuchengrui.cn/myphoto.png",
+ "blogUrl": "https://www.liuchengrui.cn",
+ "image": "https://cdn.liuchengrui.cn/usr/uploads/2025/08/4139689340.jpg",
+ "description": "在二妃山的山坡 邂逅浪漫夕阳 余晖漫染天际 城市轮廓 被镀上暖金 树影与高楼相望 草叶轻晃 晚风浅唱 把一身疲惫 交付给这方 看落日下沉 心事渐放 在自然怀抱 拥享静谧时光"
+ },
+ {
+ "title": "我回来啦",
+ "link": "https://mojinxi.cn/49.html",
+ "date": "2025-08-15T08:04:00.000Z",
+ "author": "竹春廿柒",
+ "avatar": "https://mojinxi.cn/img/logo.png",
+ "blogUrl": "https://mojinxi.cn",
+ "image": null,
+ "description": "好久没更新博客了,期间一直想着更新,但是种种原因都耽搁了,看了下博客最后的更新时间:9.29 国庆节去了南通,接着去了长沙,一切都是那么的好,好的让我感到似乎有点不真实。十月底,因为抑郁症的原因,公司打算辞退我,但是又因为抑郁症,不敢辞退我..."
+ },
+ {
+ "title": "现网案例【1】:某数据中心计算节点无法访问分布式存储的排查实录",
+ "link": "https://skylan.cc/archives/1755220711651",
+ "date": "2025-08-15T04:13:09.000Z",
+ "author": "清梦云熙",
+ "avatar": "https://cravatar.cn/avatar/853572275a978dbccefbe2242ba1c415",
+ "blogUrl": "https://skylan.cc",
+ "image": "https://skylan.cc/plugins/feed/assets/telemetry.gif?title=%E7%8E%B0%E7%BD%91%E6%A1%88%E4%BE%8B%E3%80%901%E3%80%91%EF%BC%9A%E6%9F%90%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%BF%83%E8%AE%A1%E7%AE%97%E8%8A%82%E7%82%B9%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E5%88%86%E5%B8%83%E5%BC%8F%E5%AD%98%E5%82%A8%E7%9A%84%E6%8E%92%E6%9F%A5%E5%AE%9E%E5%BD%95&url=/archives/1755220711651",
+ "description": "案例背景 组网架构图 案例背景,基于现代云数据中心 SpineLeaf组网架构,并且采用存算分离架构 Str-Server为存储服务器 NFV-Server为计算服务器 组网层面 Spine采用M-Lag组网,Spine承载双活网关做流量转..."
+ },
+ {
+ "title": "SDN技术",
+ "link": "https://skylan.cc/archives/1755133862261",
+ "date": "2025-08-14T03:21:36.000Z",
+ "author": "清梦云熙",
+ "avatar": "https://cravatar.cn/avatar/853572275a978dbccefbe2242ba1c415",
+ "blogUrl": "https://skylan.cc",
+ "image": "https://skylan.cc/plugins/feed/assets/telemetry.gif?title=SDN%E6%8A%80%E6%9C%AF&url=/archives/1755133862261",
+ "description": "什么是SDN 上篇文章讲解了SR技术,里面提到了SDN 今天我们就来讲解一下,什么是SDN SDN全称Software Defined Network 即软件定义网络 传统网络 在讲SDN诞生之前 这里还要回到我们传统的网络中 【1】传统网..."
+ },
+ {
+ "title": " 文章短代码在 Vue 中如何实现? ",
+ "link": "https://blog.200011.net/shortcode-how-to-work-in-vue/",
+ "date": "2025-08-12T10:17:18.000Z",
+ "author": "油油",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1376652515&s=640",
+ "blogUrl": "https://blog.200011.net",
+ "image": null,
+ "description": "之前我在使用 Gridea 的时候由于没有 “文章短代码” 功能,但我又想在文章中添加音乐播放器、添加视频等等。考虑到 Markdown 的特性是支持插入 HTML ,我将 <div class="功能" data..."
+ },
+ {
+ "title": "微信时光机#重庆游",
+ "link": "https://rz.sb/archives/319/",
+ "date": "2025-07-24T01:06:00.000Z",
+ "author": "若志随笔",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=80360650&s=640",
+ "blogUrl": "https://www.rz.sb",
+ "image": "https://rz.sb/usr/themes/A-Sleek/src/img/loading.svg",
+ "description": "📍 𝑪𝒉𝒐𝒏𝒈𝒒𝒊𝒏𝒈. 📸山里有座城,灯火与星辰🌉ps:于今年六月份去重庆看⚽(国足世预赛)打卡,因为当时不清楚强实名的重要性在闲鱼找二手票贩买的票,并且报以侥幸心理,以至于到了重庆龙兴足球场外面没能进去,白白损失..."
+ },
+ {
+ "title": "Handsome-美化记录分享",
+ "link": "https://sweetjing.cc/189.html",
+ "date": "2025-07-23T14:43:00.000Z",
+ "author": "半截の诗",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=1486823198&s=640",
+ "blogUrl": "https://sweetjing.cc/",
+ "image": null,
+ "description": "前言 昨天刚刚更新了Handsome主题的10.1.0 Pro版本,一看更新了不少内容,其中最吸引我的就是更新了五个新配色,然后看了看我现在用的紫色配色,还是觉得颜色过于鲜艳了,于是就在五款新配色里面选了樱桃粉作为博客..."
+ },
+ {
+ "title": "最新版SecureCRT9.6下载与破解教程",
+ "link": "https://skylan.cc/archives/1753146257139",
+ "date": "2025-07-22T07:13:36.000Z",
+ "author": "清梦云熙",
+ "avatar": "https://cravatar.cn/avatar/853572275a978dbccefbe2242ba1c415",
+ "blogUrl": "https://skylan.cc",
+ "image": "https://skylan.cc/plugins/feed/assets/telemetry.gif?title=%E6%9C%80%E6%96%B0%E7%89%88SecureCRT9.6%E4%B8%8B%E8%BD%BD%E4%B8%8E%E7%A0%B4%E8%A7%A3%E6%95%99%E7%A8%8B&url=/archives/1753146257139",
+ "description": "📌 阅读须知 🕒 本文共1951字,约需5分钟阅读 💡 内容不多,但花了一些精力整理 💬 如有疑问,欢迎评论区留言交流 👍 觉得不错,记得点赞/推荐支持一下~ 💗 各位的点赞推荐,是我不断更新的动力哟~ 本期给各位带来一个网工常..."
+ },
+ {
+ "title": "山顶的风,带着自由的味道",
+ "link": "https://www.liuchengrui.cn/life/724.html",
+ "date": "2025-07-12T07:31:00.000Z",
+ "author": "柳橙睿",
+ "avatar": "https://www.liuchengrui.cn/myphoto.png",
+ "blogUrl": "https://www.liuchengrui.cn",
+ "image": "https://cdn.liuchengrui.cn/usr/uploads/2025/07/4123246964.jpg",
+ "description": "站在山顶,云雾缭绕,群山如黛 仿佛整个世界都在我的脚下 攀登高峰,只为那一览众山小的豪情 和那片只属于自己的壮丽风景 登顶远眺,心旷神怡 每一次呼吸都是自然的馈赠 心灵在这一刻得到了前所未有的洗涤和放松"
+ },
+ {
+ "title": "【Docker】使用 Docker 安装 PostgreSQL + pgvector 向量数据库(基于 pgvector/pgvector:pg16)",
+ "link": "https://blog.fivk.cn/archives/6626.html",
+ "date": "2025-06-30T13:57:00.000Z",
+ "author": "Fivk博客",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=11470226&s=640",
+ "blogUrl": "https://blog.fivk.cn",
+ "image": null,
+ "description": "随着大模型(LLM)和向量检索(RAG、Embedding)应用兴起,向量数据库变得越来越重要。其中,PostgreSQL + pgvector 成为非常流行的一种组合方案,既能保留关系数据库的强大特性,又能高效地进行向量检索。本篇文章将手..."
+ },
+ {
+ "title": "这一波亏了",
+ "link": "https://www.likaijian.com/archives/zhe-yi-bo-yu-liao",
+ "date": "2025-06-22T00:29:00.000Z",
+ "author": "永恒末匕",
+ "avatar": "https://q.qlogo.cn/headimg_dl?dst_uin=1527335101&spec=640",
+ "blogUrl": "https://likaijian.com",
+ "image": "https://www.likaijian.com/plugins/feed/assets/telemetry.gif?title=%E8%BF%99%E4%B8%80%E6%B3%A2%E4%BA%8F%E4%BA%86&url=/archives/zhe-yi-bo-yu-liao",
+ "description": "这下又被资本做局了,最近网上很火的手机流量卡,被这种东西冲昏了头脑,蠢蠢欲动的我,然后就恍恍惚惚的入手了一张19/240G联通流量卡,果不其然,收到货后进行了测速,公司那地方也是4G和5G来回跳,稍微卡顿,没有现在用的广电和移动的信号稳定,..."
+ },
+ {
+ "title": "毕业后我都在干什么",
+ "link": "https://ihello.cc/archives/215.html",
+ "date": "2025-06-17T03:58:00.000Z",
+ "author": "小稚生活志",
+ "avatar": "https://bu.dusays.com/2024/02/02/65bbce27b129a.jpg",
+ "blogUrl": "https://ihello.cc",
+ "image": "https://ihello.cc/wp-content/uploads/2025/10/1000094845.webp",
+ "description": "现在离高考结束已经过去一个星期了,想想时间过的也是挺快的,高考前一个星期的时候我就跑去烫头发了,烫了个摩根烫挺成功,高考一结束不用想肯定要先去玩个痛快,我和朋友四个人一起跑去网吧通宵了 组队打无畏契约 刚毕业这几天基本上都在网吧打游戏,一共..."
+ },
+ {
+ "title": "高考倒计时:6天",
+ "link": "https://ihello.cc/archives/212.html",
+ "date": "2025-06-01T03:52:00.000Z",
+ "author": "小稚生活志",
+ "avatar": "https://bu.dusays.com/2024/02/02/65bbce27b129a.jpg",
+ "blogUrl": "https://ihello.cc",
+ "image": null,
+ "description": ""
+ },
+ {
+ "title": "Word一定要用自带样式!✋😭✋",
+ "link": "https://aloner.ink/Share/990.html",
+ "date": "2025-05-27T09:59:00.000Z",
+ "author": "如约而至",
+ "avatar": "https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d",
+ "blogUrl": "https://aloner.ink",
+ "image": "https://cdn.aloner.ink/usr/uploads/2025/05/1685614581.png",
+ "description": "省流:当需要在Word中自定义样式时,对需应用于多层级标题的,建议直接在自带的“标题1”、“标题2”……基础上改动使用,可免去许多不必要的麻烦。 1事出有因最近在参悟研究学校的毕业论文排版规范。在图注方面,规定要求的是章号+圆点+图序(如“..."
+ },
+ {
+ "title": "【知识总结】Maven国内镜像",
+ "link": "https://blog.fivk.cn/archives/6621.html",
+ "date": "2025-05-11T06:52:33.000Z",
+ "author": "Fivk博客",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=11470226&s=640",
+ "blogUrl": "https://blog.fivk.cn",
+ "image": null,
+ "description": "阿里云:http://maven.aliyun.com/中央仓库:https://repo1.maven.org/maven2/网易:http://maven.netease.com/repository/public/华为云:https:..."
+ },
+ {
+ "title": "【知识总结】使用 OpenVPN 实现按需分流:避免全局代理泄露隐私",
+ "link": "https://blog.fivk.cn/archives/6620.html",
+ "date": "2025-05-06T14:30:00.000Z",
+ "author": "Fivk博客",
+ "avatar": "https://q1.qlogo.cn/g?b=qq&nk=11470226&s=640",
+ "blogUrl": "https://blog.fivk.cn",
+ "image": null,
+ "description": "1. 背景介绍在远程办公或访问公司内网时,很多企业会通过 OpenVPN 提供一个 .ovpn 配置文件,供员工连接公司 VPN。默认情况下,一旦连接 VPN,电脑上所有的网络流量都会被强制通过 VPN 隧道转发。虽然这可以保障公司内部资源..."
+ },
+ {
+ "title": "五一假期出行:文昌市孔庙",
+ "link": "https://ihello.cc/archives/202.html",
+ "date": "2025-05-03T03:48:00.000Z",
+ "author": "小稚生活志",
+ "avatar": "https://bu.dusays.com/2024/02/02/65bbce27b129a.jpg",
+ "blogUrl": "https://ihello.cc",
+ "image": "https://ihello.cc/wp-content/uploads/2025/10/1000093079-2000x898.webp",
+ "description": "出发前一个晚上.(5.1) 和朋友去吃夜宵,并商量着出发孔子庙烧香,兜兜转转选择了吃烧烤,到店里点了才发现来错烧烤店了,吃的东西也太贵了,他价格表没放在柜台上面,害得我们什么都拿了一点,一顿宵夜下来一个人吃了八十多 出发.(5.2) 中午两..."
+ },
+ {
+ "title": "青春只是轻轻走过",
+ "link": "https://www.likaijian.com/archives/qing-chun-zhi-shi-qing-qing-zou-guo",
+ "date": "2025-05-02T10:31:00.000Z",
+ "author": "永恒末匕",
+ "avatar": "https://q.qlogo.cn/headimg_dl?dst_uin=1527335101&spec=640",
+ "blogUrl": "https://likaijian.com",
+ "image": "https://www.likaijian.com/plugins/feed/assets/telemetry.gif?title=%E9%9D%92%E6%98%A5%E5%8F%AA%E6%98%AF%E8%BD%BB%E8%BD%BB%E8%B5%B0%E8%BF%87&url=/archives/qing-chun-zhi-shi-qing-qing-zou-guo",
+ "description": "再续前缘 3月底辞去死&亡流水线的工作,对于我农村出生的学生来说流水线来的Rmb最快的,工作了4个月左右,解决了大学的学费还能存来一点方便我之后的计划,里面工友也都对我很不错很好说话,不管男女对我挺照顾的,辞掉的主要原因是不想上俩班..."
+ },
+ {
+ "title": "三月星天四月明",
+ "link": "https://aloner.ink/Share/March-plus-April.html",
+ "date": "2025-04-30T13:29:00.000Z",
+ "author": "如约而至",
+ "avatar": "https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d",
+ "blogUrl": "https://aloner.ink",
+ "image": "https://cdn.aloner.ink/usr/uploads/2025/04/1911264944.jpg",
+ "description": "五一国际劳动节快乐!……月末发点存货::EOC:36::广工揭的冬季大六边形iPhone|摄于3月19日学校的夜空能见度一直不错,山卡拉有山卡拉的好处。 天狼星-参宿四-南河三,天狼星-参宿七-毕宿五-五车二-北河三-南河三。即使是早春的夜..."
+ },
+ {
+ "title": "提取特定的字体",
+ "link": "https://dai.ge/24.html",
+ "date": "2025-04-19T05:26:00.000Z",
+ "author": "阿呆日记",
+ "avatar": "https://dai.ge/img/logo.png",
+ "blogUrl": "https://dai.ge",
+ "image": "https://img.cdn.vin/dai/20250419/1745039859334.png",
+ "description": "有时候想给网站某标题特定使用一个字体,但是整个字体包可能会有几十MB大小,利用字体编辑器可以提取我们需要的那几个字,直接将字体包压缩到几KB。 首先打开 查看字符编码 ,输入你需要提取的字,如: 右侧的“Unicode编码16进制”可以方便..."
+ },
+ {
+ "title": "小熊猫",
+ "link": "https://blog.keepke.com/",
+ "date": "2025-04-16T00:37:49.000Z",
+ "author": "吾柯",
+ "avatar": "https://blog.keepke.com/logo.png",
+ "blogUrl": "https://blog.keepke.com",
+ "image": null,
+ "description": "可爱捏~"
+ },
+ {
+ "title": "恰逢春日 “郁”见春色",
+ "link": "https://www.liuchengrui.cn/life/696.html",
+ "date": "2025-04-12T14:25:00.000Z",
+ "author": "柳橙睿",
+ "avatar": "https://www.liuchengrui.cn/myphoto.png",
+ "blogUrl": "https://www.liuchengrui.cn",
+ "image": "https://cdn.liuchengrui.cn/usr/uploads/2025/04/3163102287.jpg",
+ "description": "花有约,春不误 今日份浪漫是郁金香给的"
+ },
+ {
+ "title": "VXLAN技术",
+ "link": "https://skylan.cc/archives/1742346094404",
+ "date": "2025-03-25T09:22:52.000Z",
+ "author": "清梦云熙",
+ "avatar": "https://cravatar.cn/avatar/853572275a978dbccefbe2242ba1c415",
+ "blogUrl": "https://skylan.cc",
+ "image": "https://skylan.cc/plugins/feed/assets/telemetry.gif?title=VXLAN%E6%8A%80%E6%9C%AF&url=/archives/1742346094404",
+ "description": "什么是VXLAN 为了满足数据中心规模的扩大,以及云化数据中心虚拟机迁移业务不中断的场景,还有二层VLAN数不够用的情况 引入了VXLAN(Virtual eXtensible Lan)可扩展虚拟局域网技术 基于IP网络,采用Mac in ..."
+ },
+ {
+ "title": "使用giffgaff卡搞TG过程",
+ "link": "https://dai.ge/23.html",
+ "date": "2025-03-23T14:49:00.000Z",
+ "author": "阿呆日记",
+ "avatar": "https://dai.ge/img/logo.png",
+ "blogUrl": "https://dai.ge",
+ "image": "https://img.cdn.vin/dai/20250323/1742740561907.png",
+ "description": "曲折的故事起因源于突然不想使用+86手机号使用TG了,至于原因dddd. 偶然在论坛看到有用户发帖“付邮送giffgaff卡”,于是简单的对giffgaff做了一下了解(以下检测gg卡),gg卡是位于英国的移动电话公司产品,并且提供实体 s..."
+ },
+ {
+ "title": "写在二五年国际劳动妇女节",
+ "link": "https://aloner.ink/Whatever/women-s-liberation-2025.html",
+ "date": "2025-03-08T14:26:00.000Z",
+ "author": "如约而至",
+ "avatar": "https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d",
+ "blogUrl": "https://aloner.ink",
+ "image": null,
+ "description": "一些粗浅的想法,权当博主看《家庭、私有制和国家的起源》的读后感。两性议题无疑是当今社会现象中冲突频发的一环。欲究根本,我们上溯其滥觞,回到人类社会家庭将将形成的时期,不难在母系社会与其孕育父权制的历史中找到答案。恩氏在《家庭、私有制和国家的..."
+ },
+ {
+ "title": "随笔小记",
+ "link": "https://www.likaijian.com/archives/qing-chun-zhi-shi-qing-qing-zou-guo-TdOeztAo",
+ "date": "2025-03-08T00:27:00.000Z",
+ "author": "永恒末匕",
+ "avatar": "https://q.qlogo.cn/headimg_dl?dst_uin=1527335101&spec=640",
+ "blogUrl": "https://likaijian.com",
+ "image": "https://www.likaijian.com/plugins/feed/assets/telemetry.gif?title=%E9%9A%8F%E7%AC%94%E5%B0%8F%E8%AE%B0&url=/archives/qing-chun-zhi-shi-qing-qing-zou-guo-TdOeztAo",
+ "description": "海鲜市场淘了台 mac book air m1丐中丐版本,果真是一分钱一分货,缺点比如无法充电等问题,但是能体验这m1芯片也还好。系统提示学生身份卸载中 实习快结束,准备脱下这学生的身份走向社会,这些资料很是折磨人 朋友在无锡订了俩春风25..."
+ },
+ {
+ "title": "ProxyPin简单抓包B站装扮素材资产",
+ "link": "https://aloner.ink/Share/bbb.html",
+ "date": "2025-02-22T06:37:00.000Z",
+ "author": "如约而至",
+ "avatar": "https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d",
+ "blogUrl": "https://aloner.ink",
+ "image": "https://cdn.aloner.ink/usr/uploads/2025/02/183241216.jpg",
+ "description": "“……读书人的事,能算偷么?”::Cat_gif:Spill_the_tea::众所周知B站上有很多很好看的装扮素材::Cat_gif:Big_hammer::但是买了只能在B站上用难免有些浪费()如果能全部扒下来,应用到博客或者别的什么地..."
+ },
+ {
+ "title": "江西九江·东林大佛:所求皆所愿",
+ "link": "https://www.liuchengrui.cn/life/670.html",
+ "date": "2025-02-20T14:19:00.000Z",
+ "author": "柳橙睿",
+ "avatar": "https://www.liuchengrui.cn/myphoto.png",
+ "blogUrl": "https://www.liuchengrui.cn",
+ "image": "https://cdn.liuchengrui.cn/usr/uploads/2025/02/713627288.jpg",
+ "description": "在江西!世界上最高的阿弥陀佛金像! 我真的用照片难以形容它的壮观"
+ },
+ {
+ "title": "实习小记",
+ "link": "https://www.liveout.cn/68-2/",
+ "date": "2025-02-18T03:16:36.000Z",
+ "author": "Echo 的小窝",
+ "avatar": "https://cravatar.cn/avatar/d9d83d9ebd03447fff3b094e140a0cbe",
+ "blogUrl": "https://www.liveout.cn/",
+ "image": "https://liveout.cn/wp-content/uploads/pic/background/2023/0107.png",
+ "description": "实习 从实习到现在,差不多两个月了。每天早上7点准时起来,然后挤地铁,八点多到医院。中午和同学一起吃饭,下午 4.30 准时下班走人。 日复一日,期间看完了python基础,做了个基于Django框架的网站项目,不过也是看着书照葫芦画瓢,了..."
+ },
+ {
+ "title": "蛇年大吉",
+ "link": "https://www.likaijian.com/archives/she-nian-da-ji",
+ "date": "2025-02-03T10:29:00.000Z",
+ "author": "永恒末匕",
+ "avatar": "https://q.qlogo.cn/headimg_dl?dst_uin=1527335101&spec=640",
+ "blogUrl": "https://likaijian.com",
+ "image": "https://www.likaijian.com/plugins/feed/assets/telemetry.gif?title=%E8%9B%87%E5%B9%B4%E5%A4%A7%E5%90%89&url=/archives/she-nian-da-ji",
+ "description": "新的一年已然到来,祝愿我们,家庭顺,生活顺,事业顺,财运顺,健康顺,万事顺,一顺百顺,希望接下来遇到的所有事情都对我们有利。 突然发现在学校的时候按周算总感觉过得很漫长,出来工作了按月份都过得极快,转眼都已经2月份了。公司放了10天假我一线..."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/themes/Ying/static/json/link_lite.json b/themes/Ying/static/json/link_lite.json
index 448c78b2..4d70682d 100644
--- a/themes/Ying/static/json/link_lite.json
+++ b/themes/Ying/static/json/link_lite.json
@@ -120,16 +120,6 @@
"https://sumiler.com",
"https://cravatar.cn/avatar//a35f5ef7a4bce3b7cfa6f538ffcae7aa"
],
- [
- "林林杂语",
- "https://www.xiaozonglin.cn",
- "https://cravatar.cn/avatar/04bfc914bd50b42eb507bf66aad0cc31?d=mp"
- ],
- [
- "西瓜撞地球",
- "https://www.bio-w.cn",
- "https://bu.dusays.com/2022/10/17/634d313602a1e.png"
- ],
[
"Kris Yan",
"https://blog.krisyan.dev",
@@ -199,6 +189,11 @@
"如约而至",
"https://aloner.ink",
"https://cravatar.cn/avatar/af1874b7856255302fc3df5102a6ce6d"
+ ],
+ [
+ "子舒",
+ "https://www.zhishu.me",
+ "https://gravatar.zishu.me/avatar/bdad602f1f9d29ce83944c4f6225d1cc?s=200&d=retro"
]
]
}
\ No newline at end of file