本教程已过期。部署请查看官方仓库文档链接:https://fcircle-doc.js.cool/
在经过了两个大版本更新后,友链朋友圈迈入了3.0时代。而原先的说明书一直停留在1.15,适用范围也仅仅到1.19。 于是,新的说明书来了!(注,后端版本 < 3.0 beta2 的用户请更换后端,1.0、2.0用户更新均需重新部署api和前端,leancloud部分已做兼容无须变动)
更新记录(现版本4.0)
3.0
release 3.0 版本:
① 支持butterfly、volantis、matery、sakura、fluid主题的友链获取
② 支持小康友链及 volantis 主题友链,即部署于 gitee 上的 issuse 友链获取
③ 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取
④ 去除sitemap,新增目前最通用的atom和rss规则
⑤ 拥有友链屏蔽、关键词屏蔽、等自定义 yaml 的配置项
⑥ 代码重构并规范化,便于二次开发
⑦ 可以支持更新时间和创建时间排序
⑧ 未适配的hexo主题和非hexo用户也可使用(使用方法见说明书)
bug修复
① 重复爬取同一文章问题
② 非bf主题爬取报错
③ sitemap重新置后(不通用)
④ hexo-theme-sakura主题两种时间格式引发错误
⑤ 屏蔽链接修复
3.1
可以爬取typecho类型的博客
4.0
代码基于scrapy重构,提速大约4倍
优化文章去重规则
可以爬取wordpress类型博客
新增nexmoe、Yun、stun主题爬取策略
额外友链页获取,在配置项选择开启
过期文章时间可配置
新增失败重爬配置项
更新方法
保留配置项(setting.py文件,其余直接从主仓库拉取即可(配置文件一样可能会修改,对比更新配置文件))
无须更改您的数据库及其api。
P.s. 本说明书较为详细冗长,如果有相关平台使用经验的朋友也跳着阅读。
如果有服务器的用户可以考虑自行构建api到服务器上,详见二次开发说明。
效果展示:https://noionion.top/friendcircle/
目录导览
后端部署及基本配置
前端部署
- hexo插件安装版
- CDN引入版
二次开发说明
- 主题爬虫和另外两种规则的函数命名标准及传参标准
- 加入新爬取数据并推送到数据库的修改说明
- api数据说明
- 相关平台文档链接
后端部署及基本配置
友链朋友圈的后端运行由3部分组成,涉及2个仓库、3个平台,难免感觉有些繁琐。
后端运行步骤为:
gh action爬虫抓取友链文章并作基本处理,推送至leancloud → vercel获取leancloud数据后进行二次处理后生成api
而前端只需要再对api返回的json数据做一次排序即可
leancloud数据库搭建
github爬虫仓库部署及配置项说明
这步会稍微长一些,但希望认真看完。
仓库部署
① fork友链朋友圈的项目仓库https://github.com/Rock-Candy-Tea/hexo-circle-of-friends

点击fork后的仓库的 Settings -> Secrets -> New repository secret

Name 分别以 APPID、APPKEY、LINK 创建环境变量。
Value 分别 填入刚刚保存 Leancloud 的应用 ID(AppID)和应用密钥(AppKey)以及你的友链链接(例如https://noionion.top/link/)


② 启用友链朋友圈的github action
点击fork后的仓库的 Actions -> I understand my workflows, go ahead and enable them

之后点击 update-friends-posts 并启用workflow

之后点击仓库star来完成第一次程序运行,不出意外的话结果如下图

这时你应该能在leancloud上看到上传的数据啦(除非你不是已经适配的主题,在配置项中会有相应解决办法)

此后在每天的8,12,17,22点各会有两次自动更新爬取。
配置项说明
编辑仓库中的/hexo_circle_of_friends/setting.py文件,需要用户自行编辑的仅如下几项。
对于非已适配主题的hexo用户(无github和gitee友链)和非hexo用户,请将友链自行按格式添加到CONFIG_FRIENDS_LINKS['list']中并启用它。(这是目前通用化的一种方式,如果是hexo用户希望适配自己的主题,请提交issue)
""" |
vercel无服务器API部署
前往vercel官网,直接用github创建账号并用手机号绑定(其实前端直接调用leancloud的数据也可以获取信息,但会暴露你的AppID和AppKey,所以套一层vercel作为api较为安全)
点击New Project新建项目

点击Import Third-Party Git Repository,输入https://github.com/Rock-Candy-Tea/hexo-friendcircle-api。


然后点击github,输入仓库名(无限制),生成api仓库。(此步骤会在github生成一个api仓库(不用理它,但也不要删除))


下一步骤Create a Team跳过(Skip)即可,等它构建完后点击Go to Dashboard即可

点击项目 Settings -> Environment Variables,在如图框中输入密钥,Name 分别以 LEANCLOUD_ID、LEANCLOUD_KEY 创建环境变量。
Value 分别填入刚刚保存 Leancloud 的应用 ID(AppID)和应用密钥(AppKey)。


回到项目首页,点击View Build Logs后在Visit左侧的选择框中点击Redeploy即可



回到上一页,点击visit后在网址后面加上/api访问api,如https://hexo-friendcircle3-api.vercel.app/api,出现数据即为部署成功

而前端要用到的,就只有api地址了
前端部署
这里为了方便用户安装,我们做了相关的hexo前端插件简化部署过程。
同时为了服务非hexo用户也能使用友链朋友圈,我们也给了CDN引入的方案。
hexo插件安装版
在此感谢aki店长的精心制作!
CDN引入版
引入内容到你想添加的地方(md文件/html文件)(注意替换api地址等变量):
<!-- fontawesome图标的依赖,主题自带的不用加这行 --> |
更多的css可以查看https://github.com/Rock-Candy-Tea/hexo-friendcircle-demo
二次开发说明
对于一些想自己手动DIY的用户,我们也尽可能详尽的做一些源码说明,方便大家快速开发
目前来讲有下面几类DIY:(有好的DIY也可以请求PR,我们会根据需求选择是否采纳合并)
- 想收到好友的博客最新文章更新但没有相应规则(希望增加主题策略)
- 想在友链朋友圈看到文章描述(新增爬取信息,这个得从后端爬虫、api改到前端)
- 想有服务器部署的(api或者数据库丢到自己的服务器上)
等等,我们大致给出以下几个说明讲解:
主题爬虫和另外两种规则的函数命名标准及传参标准(此条过期,加紧重写中——咕咕咕咕咕)
主题规则标准
请在theme文件夹处增添以主题名命名的.py文件,文件中至少包含以下两个函数:
友链爬取函数 get_friendlink(friendpage_link, friend_poor)
传入友链页面地址friendpage和友链列表friend_poor两个参数,无需返回值。
对于爬取到的友链地址user_info中应带有如下几个值(有序):name,link,img/avatar。格式如:user_info = [name, link, img]
然后将其放入列表frieng_poor中:friend_poor.append(user_info)
最新文章爬取函数 get_last_post(user_info,post_poor)
传入友链信息列表uesr_info(格式如上)和文章列表post_poor两个参数,需返回值error,标记是否错误
对于爬取到的文章信息post_info中应带有如下键值对:
?
post_info = { |
然后将其放入列表post_poor中:post_poor.append(post_info)
具体可以参考已有的主题规则函数
注意函数名,变量名保持一致,否则主函数将无法正确运行
主函数部分只需导入对应的文件和增添对象即可,修改部分如下所示:
(示例即为当前版本适配)
# component |
其他规则标准
可参考/handlers/coreLink.py文件下的atom_get、rss2_get函数进行,传参与主题爬虫的get_last_post参数相同。命名相对无限制,只需在主函数run.py添加相应的引入如
from handlers.coreLink import atom_get |
在getpost函数处合适位置仿照其他规则加入代码即可。
加入新爬取数据并推送到数据库的修改说明(此条过期,加紧重写中——咕咕咕咕咕)
若有需要加入新的爬取信息键值对,则需相应修改所有已有规则(包括主题规则和其它规则)的返回值,即:
post_info = { |
并相应修改/handlers/coreDatas.py的leancloud_push函数,在:
friendpoor.set('title', item['title']) |
处新增相应关联即可。
api数据说明
API预览: https://hexo-friendcircle3-api.vercel.app/api
截取部分json,对json数据的说明如下
{ |
相关平台文档链接
leancloud api: https://leancloud.cn/docs/rest_api.html
leancloud Python SDK: https://leancloud.cn/docs/sdk_setup-python.html
leancloud Python SDK-api: https://leancloud.github.io/python-sdk/
vercel Serverless Functions: https://vercel.com/docs/serverless-functions/introduction
想看开发吐槽的话可以访问个人哔哔:友链朋友圈开发二三事、友链朋友圈 3.0 前端开发方案记录
如有更多需要进行补充的或者说明书哪里没看懂的或者部署出问题的可以于下方评论区留言。



