在经过了两个大版本更新后,友链朋友圈迈入了3.0时代。而原先的说明书一直停留在1.15,适用范围也仅仅到1.19。 于是,新的说明书来了!

P.s. 本说明书较为详细 冗长,如果有相关平台使用经验的朋友也跳着阅读。

如果有服务器的用户可以考虑自行构建api到服务器上,详见二次开发说明。

效果展示:https://noionion.top/friendcircle/


目录导览

后端部署及基本配置

涉及平台较多,但实际操作难度低。部署需要有一定耐心(但我们这里不提供解决github和vercel(可能)被墙的问题方法,如果被墙可以参考:vercel / github

  • leancloud数据库搭建
  • github爬虫仓库部署及配置项说明
  • vercel无服务器API部署
前端部署
  • hexo插件安装版
  • CDN引入版
二次开发说明
  • 主题爬虫和另外两种规则的函数命名标准及传参标准
  • 加入新爬取数据并推送到数据库的修改说明
  • api数据说明
  • 相关平台文档链接

后端部署及基本配置

友链朋友圈的后端运行由3部分组成,涉及2个仓库、3个平台,难免感觉有些繁琐。

后端运行步骤为:

gh action爬虫抓取友链文章并作基本处理,推送至leancloud → vercel获取leancloud数据后进行二次处理后生成api

而前端只需要再对api返回的json数据做一次排序即可

leancloud数据库搭建

前往leancloud 国际版官网(推荐国际版)注册账号并登录。

前往控制台新建应用,应用名称无限制

创建应用

进入应用中,点击 设置 -> 应用凭证,记录AppIDAppKet即可。(之后两步部署均会使用到)

找到AppID和AppKey

github爬虫仓库部署及配置项说明

这步会稍微长一些,但希望认真看完。

仓库部署

fork友链朋友圈的项目仓库https://github.com/Rock-Candy-Tea/hexo-circle-of-friends

fork仓库

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

配置变量 1

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

配置变量 2

配置变量 3

② 启用友链朋友圈的github action

点击fork后的仓库的 Actions -> I understand my workflows, go ahead and enable them

启用action 1

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

启用action 2

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

启用action 3

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

数据上传成功

此后在每天的8,12,17,22点各会有两次自动更新爬取。

配置项说明

编辑仓库中的setting.py文件,需要用户自行编辑的仅如下几项。

对于非已适配主题的hexo用户(无github和gitee友链)非hexo用户,请将友链自行按格式添加到CONFIG_FRIENDS_LINKS['list']中并启用它。(这是目前通用化的一种方式,如果是hexo用户希望适配自己的主题,请提交issue)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""
功能 设置
"""
# github友链配置
GITHUB_FRIENDS_LINKS = {
"enable": False, # True 开启gitee issue兼容
"type": "normal", # volantis用户请在这里填写 volantis
"owner": "Zfour", # 填写你的github用户名
"repo": "zfour-friends", # 填写你的github仓库名
"state": "open" # 填写抓取的issue状态(open/closed)
}

# gitee友链配置
GITEE_FRIENDS_LINKS = {
"enable": False, # True 开启gitee issue兼容
"type": "normal", # volantis用户请在这里填写 volantis
"owner": "Zfour", # 填写你的github用户名
"repo": "zfour-friends", # 填写你的github仓库名
"state": "open" # 填写抓取的issue状态(open/closed)
}

# 屏蔽站点
BLOCK_SITE = [
"https://example.com/",
'https://blog.cyfan.top/' # 这位朋友伪造了atom不让抓咱也没办法
]

# 友链列表配置文件
CONFIG_FRIENDS_LINKS = {
"enable": False, # 是否启用配置项友链 True/False(此项用于针对还未适配的主题用户)
"list":[
# 格式:["name", "link", "avatar"],除最后一行外每行后面加",","[]"不可省略
# link的结尾最好加上'/'
# 例如:
["贰猹の小窝", "https://noionion.top/", "https://pub-noionion.oss-cn-hangzhou.aliyuncs.com/head.jpg"],
["小冰博客", "https://zfe.space/", "https://zfe.space/images/headimage.png"]
]
}
vercel无服务器API部署

前往vercel官网,直接用github创建账号并用手机号绑定(其实前端直接调用leancloud的数据也可以获取信息,但会暴露你的AppID和AppKey,所以套一层vercel作为api较为安全)

点击New Project新建项目

创建api 1

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

创建api 2

创建api 3

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

创建api 4

创建api 5

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

创建api 6

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

配置变量 1

配置变量 2

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

构建api 1

构建api 2

构建api 3

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

而前端要用到的,就只有api地址了


前端部署

这里为了方便用户安装,我们做了相关的hexo前端插件简化部署过程。

同时为了服务非hexo用户也能使用友链朋友圈,我们也给了CDN引入的方案。

hexo插件安装版
CDN引入版

二次开发说明

对于一些想自己手动DIY的用户,我们也尽可能详尽的做一些源码说明,方便大家快速开发

目前来讲有下面几类DIY:(有好的DIY也可以请求PR,我们会根据需求选择是否采纳合并)

  • 想收到好友的博客最新文章更新但没有相应规则(希望增加主题策略)
  • 想在友链朋友圈看到文章描述(新增爬取信息,这个得从后端爬虫、api改到前端)
  • 想有服务器部署的(api或者数据库丢到自己的服务器上)

等等,我们大致给出以下几个说明讲解:

主题爬虫和另外两种规则的函数命名标准及传参标准
主题规则标准

请在theme文件夹处增添以主题名命名的.py文件,文件中至少包含以下两个函数:

友链爬取函数 get_friendlink(friendpage_link, friend_poor)

传入友链页面地址friendpage和友链列表friend_poor两个参数,无需返回值。

对于爬取到的友链地址user_info中应带有如下几个值(有序):namelinkimg/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中应带有如下键值对:
?

1
2
3
4
5
6
7
8
9
post_info = {
'title': ,
'time': ,
'updated': , # 这项建议直接使用time
'link': ,
'name': ,
'img': ,
'rule': {themename}
}

然后将其放入列表post_poor中:post_poor.append(post_info)
具体可以参考已有的主题规则函数


注意函数名,变量名保持一致,否则主函数将无法正确运行

主函数部分只需导入对应的文件和增添对象即可,修改部分如下所示:

(示例即为当前版本适配)

1
2
3
4
5
6
7
8
9
10
11
# component
from theme import butterfly,matery,volantis,sakura,fluid

# theme fit massage
themes = [
butterfly,
matery,
volantis,
sakura,
fluid
]
其他规则标准

可参考/handlers/coreLink.py文件下的atom_get、rss2_get函数进行,传参与主题爬虫的get_last_post参数相同。命名相对无限制,只需在主函数run.py添加相应的引入如

1
2
from handlers.coreLink import atom_get
from handlers.coreLink import rss2_get

getpost函数处合适位置仿照其他规则加入代码即可。

加入新爬取数据并推送到数据库的修改说明

若有需要加入新的爬取信息键值对,则需相应修改所有已有规则(包括主题规则和其它规则)的返回值,即:

1
2
3
4
5
6
7
8
9
post_info = {
'title': ,
'time': ,
'updated': , # 这项建议直接使用time
'link': ,
'name': ,
'img': ,
'rule': {themename}
}

并相应修改/handlers/coreDatas.pyleancloud_push函数,在:

1
2
3
4
5
6
7
8
friendpoor.set('title', item['title'])
friendpoor.set('time', item['time'])
friendpoor.set('updated', item['updated'])
friendpoor.set('link', item['link'])
friendpoor.set('author', item['name'])
friendpoor.set('headimg', item['img'])
friendpoor.set('rule', item['rule'])
friendpoor.save()

处新增相应关联即可。

api数据说明

API预览: https://hexo-friendcircle3-api.vercel.app/api

截取部分json,对json数据的说明如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"statistical_data": { //统计信息
"friends_num": "当前友链数",
"active_num": "活跃友链数(即数据库中的文章的作者数)",
"error_num": "爬取错误数(即数据库中的友链error数)",
"article_num": "库存文章总数",
"last_updated_time": "最近更新时间(即数据库中文章最大的createAt值(时间)"
//今日更新由前端计算获得
},
"article_data": [ //文章数据
{
"title": "文章标题",
"created": "发布时间",
"updated": "更新时间",
"link": "文章链接地址",
"author": "友链名",
"avatar": "友链头像"
}
]
}

相关平台文档链接

如有更多需要进行补充的可以于下方评论区留言。