blog/_posts/2025-04-08-feed.md

30 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: 如何使用JS通过订阅源查看文章
tags: [JavaScript, RSS, Feed, AI]
---
懒得写代码那就让AI写<!--more-->
# 起因
前段时间,我看到有些博客给自己的友链页面做了通过订阅源查看友链最近更新文章的功能,看起来挺有意思的,有点想整一个。不过对于我的博客来说,作为静态博客想要做到这样的功能估计没那么简单吧……毕竟一般的订阅软件需要隔段时间请求一下对应博客的订阅链接,然后再把结果存到数据库才行。但是我想了想,对我来说没必要做成订阅啊,我又不需要知道对应博客是什么时候更新的,只要在有人想知道的时候去请求一下订阅链接,然后展示出来就行,感觉似乎又没有那么复杂。
既然不复杂那这个功能就让AI来做吧正好前段时间有个朋友买了一个月的Devin.ai订阅据说是可以自己调试代码还能操作浏览器而且代码基本上写出来就能用。我对这个挺感兴趣的所以这次的功能就让它来写吧
# 让AI编写代码
既然是让AI来写至少得把我的需求说清楚所以首先我应该告诉它
> 创建一个JavaScript函数来实现[Links](/links.html)表格中链接的RSS/Atom源预览。
> - 当鼠标悬停在表中的链接上时检查该网站是否有RSS/Atom源并将结果显示在一个浮动窗口中
> - 在鼠标光标后的浮动窗口中显示提要中的5篇最新文章
> - 在窗口中只包含标题和时间,不需要链接和内容
> - 跳过所有不包含RSS/Atom源的链接而不显示任何错误
> - 当鼠标离开链接时,浮动预览应该消失
不过在正式编写之前我还得考虑一下可行性毕竟是很简单的功能我不写但我不能不知道怎么写。首先让JS解析Feed数据也就是XML数据应该是很简单的事情JS应该有自带的函数来实现这种功能。然后是获取数据在JS中使用fetch就可以了但是这里有个很重要的事情浏览器请求其他网站存在跨域的问题还好我之前在CF Workers上用[cloudflare-cors-anywhere](https://github.com/Zibri/cloudflare-cors-anywhere)搭了个CORS代理 <https://cors-anywhere.mayx.eu.org/> 。所以我应该在说明中给它说清楚:
> - 如果存在源请使用CORS代理https://cors-anywhere.mayx.eu.org/ 获取并解析它
随后我就开始让它编写代码了。接下来就能看到AI在浏览器和编辑器中切换不停的进行编写和调试等了一段时间它把第一版代码写好了。不过也许我说的不够清楚这个CORS代理的用法和其他的CORS代理不太一样代理链接和被代理的链接之间需要使用“?”分开另外第一版我也没说清楚RSS/Atom源的链接在哪所以它选择遍历常见的几种订阅源的路径这样有点不太好除了速度慢对我的CORS代理消耗也比较大。所以我告诉它代理的正确用法以及让它假设超链接中包含“data-feed”属性其中包含订阅源的链接并且随便挑了个网站拿给它作为示例。
随后就能看到它继续改改改改了几次之后我把最后生成的JS复制到浏览器上执行了一下效果还不错于是就把它放到我的博客上了。
它的水平还是挺不错的至少正确的实现了功能。不过我有点担心它的代码会不会不太可靠毕竟要从其他网站上获取数据得避免出现XSS之类的问题于是我把代码丢给DeepSeek-R1让它检查了一下果不其然Devin.ai写的代码似乎有XSS的隐患如果链接列表中标题有html标签似乎就会解析虽然我没试过于是根据DeepSeek的提示修改了一下增加了一个过滤特殊字符的函数改完又放到博客上最终的代码就是[rss-feed-preview.js](/assets/js/rss-feed-preview.js)。
# 感想
让AI全自动写代码感觉还挺方便有种当产品经理的感觉了🤣像这种AI就是Agent吧这也算是我头一次使用Agent了感觉用起来还挺不错的。不过从这次尝试来看确实AI也有一定的局限性像是直接写出来的代码可能存在一些安全性问题除非单独让AI检查不然很有可能会写出功能正常但是存在漏洞的代码所以还是得人看着点AI搞出事故可是**不负责**的啊😇~