惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
I
InfoQ
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
The Cloudflare Blog
罗磊的独立博客

有呀

骑士活塞G4:冠军之心的觉醒 最近入手的几台心头好 组了一台 QNAS Mini 给Memos页面增加编辑、归档及删除功能 开始连接,给Memos页面增加转发功能 给Memos页面添加发布框 所谓尼康战歌 富士直出日系治愈色调 使用 Umami Api 实现点赞统计 极简模式部署友链朋友圈 使用 Umami Api 显示统计数据 Memos页面添加Twikoo评论系统 使用Midjourney渲染游戏场景原画 富士的胶片感太好看了吧 一组76人美图 制作Big Sur风格的 icon 总有一些事,比总冠军更重要 一组收藏的原神原画壁纸 Hi,Hugo 在疫情中心武汉的这两个月 2020年流行设计风格探索 最近发现一个神器 入了多看电纸书 换了新主题 折叠屏会是智能设备的下一个形态么 Hackintosh 安装全攻略 平淡日子里的刺 Gridea主题:Mao Hi,Gridea 发一个 Office 365 家庭版的车
部署轻量友链朋友圈
2024-12-11 · via 有呀

前言

这两天突然发现,之前使用极简模式部署好的友链朋友圈没法获取到数据了。看了Github仓库才知道原项目已经停止支持了,取而代之的就是这个轻量友链朋友圈。

不知道是不是因为这个项目是为了 hexo 打造的原因,项目看了很久,愣是没看明白。直到把详细文档研究了一通,才大概明白了运行的原理。

其实严格来讲,该项目主要分为三个步骤:

  • 获取朋友圈JSON
  • 配置 Github Action
  • 拿到朋友圈文章列表JSON

获取朋友圈JSON

顾名思义,该步骤通过以下代码,将指定页面上的友链信息,直接转换成为一个 friend.json

原代码如下:

const YML = require('yamljs')
const fs = require('fs')

let friends = [],
    data_f = YML.parse(fs.readFileSync('source/_data/link.yml').toString().replace(/(?<=rss:)\s*\n/g, ' ""\n'));

data_f.forEach((entry, index) => {
    let lastIndex = 2;
    if (index < lastIndex) {
        const filteredLinkList = entry.link_list.filter(linkItem => !blacklist.includes(linkItem.name));
        friends = friends.concat(filteredLinkList);
    }
});

// 根据规定的格式构建 JSON 数据
const friendData = {
    friends: friends.map(item => {
        return [item.name, item.link, item.avatar];
    })
};

// 将 JSON 对象转换为字符串
const friendJSON = JSON.stringify(friendData, null, 2);

// 写入 friend.json 文件
fs.writeFileSync('./source/friend.json', friendJSON);

console.log('friend.json 文件已生成。');

比较遗憾的是,该代码仅适用于 HEXO 博客程序,如果想要用在HUGO中,需要做如下修改:

const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');

// 获取项目根目录的路径
const projectRoot = process.cwd();

// 读取 HTML 文件内容
const htmlFilePath = path.join(projectRoot, 'public', 'links', 'index.html');
const htmlContent = fs.readFileSync(htmlFilePath).toString();

// 使用 cheerio 解析 HTML
const $ = cheerio.load(htmlContent);

// 创建一个空的 friends 数组
let friends = [];

// 假设在 HTML 中每个好友信息存储在 <div class="friend-item"> 中,
// 并且每个条目包含 <a class="username">、<img class="avatar"> 和 <a class="link">
$('.friend-item').each((index, element) => {
    const username = $(element).find('.username').text().trim();  // 提取用户名
    const link = $(element).find('.link').attr('href');  // 提取链接
    const avatar = $(element).find('.avatar').attr('src');  // 提取头像

    // 如果都存在,添加到 friends 数组
    if (username && link && avatar) {
        friends.push({
            name: username,
            link: link,
            avatar: avatar
        });
    }
});

// 根据规定的格式构建 JSON 数据
const friendData = {
    friends: friends.map(item => {
        return [item.name, item.link, item.avatar];
    })
};

// 将 JSON 对象转换为字符串
const friendJSON = JSON.stringify(friendData, null, 2);

// 写入 friend.json 文件到根目录
fs.writeFileSync(path.join(__dirname, 'friend.json'), friendJSON);

console.log('friend.json 文件已生成。');

将该代码文件保存在根目录Link.js文件中。运行:

node link.js

就可以得到 friend.json 文件。

需要注意的是,这里需要用到 cheerio 解析 HTML。所以在运行前,需要:

npm install cheerio

以下就是JSON格式文件示例:

{
  "friends": [
    [
	    "林木木",
	    "https://immmmm.com",
	    "https://cravatar.cn/avatar/ba83fa02fc4b2ba621514941307e21be.jpeg?s=400"
    ],
    [
    
        "山卜方",
        "https://novcu.com",
        "https://cravatar.cn/avatar/6ebab96f3131621c51c08370d3c996f0.jpeg?s=400"
    ],
    [
		"大大的小蜗牛",
        "https://eallion.com",
        "https://cravatar.cn/avatar/171e4c30959e8c077a6c58b958624b31.jpeg?s=400"
    ]

} 

配置 Github Action

在 fork 了仓库:Friend-Circle-Lite 之后,只需要修改仓库中的 config.yaml 文件

spider_settings:
  enable: true
  json_url: "https://<你的地址>/friend.json"
  article_count: 5
  merge_result:
    enable: true
    merge_json_url: "<你的地址>"

如果需要邮件推送功能的,跟随官方文档完成相应配置即可。

拿到朋友圈文章列表JSON

在完成所有配置后,就可以手动或者自动的运行 Github Action ,该Action就会根据我们提供的 friend.json 拿到友链中所有朋友更新的文章啦。最后会在page分支中,生成一个 all.json ,通过调用这个文件,就可以做前端渲染了。

大功告成。