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

推荐订阅源

T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
博客园 - Franky
The Cloudflare Blog
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
B
Blog
Y
Y Combinator Blog
V
V2EX
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
博客园 - 司徒正美
IT之家
IT之家
G
Google Developers Blog
C
Check Point Blog
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Kaffa.im

Kaffa.im - 寻找数据源头 Kaffa.im - 玩魔方 Kaffa.im - AI 在常见病上取代医生 Kaffa.im - 上 NextCloud,一站搞定个人数据同步 在 Windows 上 Bose SoundLink 音箱声音自动停止问题的解决 Kaffa.im - 交易的实质——浪随风向 Kaffa.im - 新手学电脑从入门到精通 Kaffa.im - 数字化转型之路(从数字化到数智化) Kaffa.im - 机器人简史 Kaffa.im - 安卓Frida逆向与协议分析 Kaffa.im - 数学的惊奇 Kaffa.im - 牌局心理学 Kaffa.im - Python计算机视觉实战 Kaffa.im - ALaunch v1.0 发布 Kaffa.im - Windows 音频设备控制之旅 Kaffa.im - 结构性优势 Kaffa.im - 尤瓦尔·赫拉利-真假信息与连接 Kaffa.im - 小狗钱钱 Kaffa.im - 短视频编导全能手 Kaffa.im - 爆品创新:新时代爆品打造法 Kaffa.im - 如何阅读一本书 Kaffa.im - 冰血暴第一季 Kaffa.im - 冰血暴第二季 Kaffa.im - 冰血暴第三季 Kaffa.im - 冰血暴第四季 Kaffa.im - 冰血暴第五季 Kaffa.im - 思维迭代的26个卓越方法 Kaffa.im - 再度唤醒世界:赖特诗选 Kaffa.im - 中国量化投资 Kaffa.im - Clojure Recipes
Kaffa.im - 给网站增加最近评论功能
Kaffa · 2024-06-17 · via Kaffa.im

给网站增加最近评论功能

Kaffa 发布于

痛点

最近修改网站设置后,giscus 评论未显示。直到我进入了项目的 Discussion 才看到有一些最新留言,但这些留言未显示在文章下方。为不错过留言,我决定为网站增加最新评论功能。

分析

那么是否有一种方式,可实现在网站上显示最新评论呢,对此,所有的回答都是肯定的。

程序可以实现一切。如果是静态网站(SSG),实现方式稍一想,就有三种。

方式一、直接从 https 抓取所有的评论网页,解析出评论。缺点是依赖页面结构,可能会失效,需要随着 Github 页面结构的更新而更新。

方式二、使用 Github 提供的 API,需要查看 Github 文档,需要注意保护好授权 Token。

方式三、使用 Github Action 和 Webhook 实现在评论时维护一个 comments.json 文件,缺点是每次生成前需要拉取这个文件,增加了生成时间。

综合来看,如果官方支持,那选方式二是最佳选择。

实现

经过查阅文档和讨论,发现 Github 有 graphql 和 REST 两种形式的 API,未来有 REST API 迁移到 graphql 的趋势。且 Discussion 是一个较新的特性,获取 Discussion 目前只有 graphql API。

编程助手已经改变了编程,经过一个提问,一次复制,我就获得了代码结构,此时,基于我对 graphql 的入门理解,我直接修改了 query,几次尝试后,我就获得了需要数据。整个过程确实节省了不少时间。

至于 Token 保护,我还是选择了在 .gitignore 中增加 .env 文件,然后从 .env 读取的方式,而不是使用系统变量。PyCharm 或 IDEA 系,对系统变量的处理有点奇怪。系统变量更新了,你不通过搜索甚至不知道它什么时候更新,此时 .env 就没这问题,唯一要注意的是不要遗忘先添加 .gitignore 再添加 .env。

实现源码 ,然后在 jinja2 模板中循环展示,由于更新频率,此处只是简单实现以满足基本需求,并未严格按时间排序。

未来计划

对于评论功能,最开始使用的是 gitalk,后来有人反馈无法打开,于是增加了 giscus。这两者之间,gitalk 使用 issue,giscus 使用 discussion,相比来说,我认为 issue 会更基础一些。如果有一天未来要砍掉特性,discussion 必定在砍 issue 之前,当然了,砍特性这种事在公司还有现金流时,是不会发生的。

gitalk 和 giscus 的优点是免费,如果要说缺点,gitalk 和 giscus 的就是依赖一种并不是为此设计的用法,Github 可以处理掉这种不合适的用法,那是评论就会失效,迁移数据也许挺麻烦的。

所以,最好的方式是换自己支持评论的程序,或者依赖一些 serverless 的服务,将评论数据以开放的结构存放在可控的地方。