最近,遇到一个需求:需要定期从一个网站的Sitemap中提取最新发布文章的URL。在网上找了很久没有找到相关的解决方案,在好几个群里也没找到相关办法,迫于无奈,决定试试通过AI来生成代码。为了避免出问题、同时对比一下各AI的效果,同时使用了好几个AI来进行操作,最后通义千问生成代码执行成功。
本文将详细介绍这次技术体验,包括花费的时间、代码功能、优化和修复过程,以及在与AI交流中学到的经验。
项目背景
需求是一个脚本,可以从指定的Sitemap索引文件中提取最新发布的文章URL。具体来说,这个脚本需要完成以下步骤:
- 下载Sitemap索引文件。
- 解析Sitemap索引文件,提取所有
post-sitemap.xml的URL及其最后修改时间。 - 按最后修改时间逆序排序
post-sitemap.xml文件。 - 获取最新更新的
post-sitemap.xml文件的信息。 - 解析
post-sitemap.xml文件,提取文章URL及其最后修改时间。 - 按日期逆序排序所有文章URL及其最后修改时间。
- 输出最新的文章地址。
这里要注意,就我自己而言实际上我在一开始并不知道提取最新的文章URL是要通过这些步骤的,我想的比较简单,只是提供sitemap地址,后台在线识别、找到第一个更新的文章即可。但是在执行的时候却出现了很多问题,例如首要的问题就是实际上在识别sitemap的时候是需要先下载sitemap的,在本地进行识别,而不是直接在网络上进行识别。当然,这对于有编程经验尤其是后端经验的人来说应该不是什么问题。而且紧跟着,就又出现了始终无法将sitemap正常下载下来的问题,而这一步也导致了其他AI都失败了,或许也不能说是失败不,因为在尝试几次后,为了节约时间就基本上没有向其他AI提供错误信息了,因此其他AI没有找到解决方案。
这里尤其要提一下,如果一个错误频繁重现,那么AI是可以“意识到”要在代码中添加调试信息的,这样作为用户的我们就可以向AI提供错误信息,帮助AI(怎么反了,不是AI帮助我们吗?)来尽快找到解决问题的方案。因此,如果在要AI生成代码的过程中,对于自己想要的功能总是不满意,或者运行出错,那么可以主动向AI提出,要求AI来加入调试代码,来生成各类错误信息。
生成代码的过程
初次尝试
一开始,对如何描述需求感到有些迷茫,尝试用简单的语言描述了需求,例如:“需要一个脚本,可以从Sitemap中提取最新文章的URL。” AI很快就生成了一段基本的脚本,但功能还不够完整。
#!/bin/bash
SITEMAP_INDEX_URL="https://foxzzz.site/sitemap_index.xml"
curl -s -o sitemap_index.xml "$SITEMAP_INDEX_URL"
# ...(省略部分代码)
功能细化
意识到需要更详细地描述每个步骤。于是,逐条描述了每个功能点,并要求AI生成相应的代码。经过几次迭代,代码逐渐完善。
第二次生成的代码:
#!/bin/bash
SITEMAP_INDEX_URL="https://foxzzz.site/sitemap_index.xml"
curl -s -o sitemap_index.xml "$SITEMAP_INDEX_URL"
# 解析Sitemap索引文件,提取所有post-sitemap.xml的URL及其最后修改时间
post_sitemap_data=$(xmlstarlet sel -N x="http://www.sitemaps.org/schemas/sitemap/0.9" -t -m "//x:sitemap[x:loc[contains(., 'post-sitemap')]]" -v "concat(x:lastmod, ' ', x:loc)" -n sitemap_index.xml)
# 按最后修改时间逆序排序post-sitemap.xml文件
sorted_post_sitemap_data=$(echo "$post_sitemap_data" | sort -r -k1,1)
# 获取最新更新的post-sitemap.xml文件的信息
latest_post_sitemap_line=$(echo "$sorted_post_sitemap_data" | head -n 1)
latest_post_sitemap_url=$(echo "$latest_post_sitemap_line" | awk '{print $2}')
# 下载最新更新的post-sitemap.xml文件
curl -s -o latest_post_sitemap.xml "$latest_post_sitemap_url"
# 解析post-sitemap.xml文件,提取文章URL及其最后修改时间
all_urls=$(xmlstarlet sel -N x="http://www.sitemaps.org/schemas/sitemap/0.9" -t -m "//x:url" -v "concat(x:lastmod, ' ', x:loc)" -n latest_post_sitemap.xml)
# 按日期逆序排序所有文章URL及其最后修改时间
sorted_urls=$(echo "$all_urls" | sort -r -k1,1)
# 获取第一个结果,即最新的文章URL
newAddress=$(echo "$sorted_urls" | head -n 1 | awk '{print $2}')
# 输出最新的文章地址
echo "最新的文章地址: $newAddress"
代码优化
尽管代码已经基本实现了功能,但发现了一些可以优化的地方,例如增加缓存机制、添加用户输入功能等。提出了这些优化建议,AI很快进行了调整。
最终生成的代码:
后半段内容防AI爬取保护
禁止大模型恶意抓取,关注公众号解锁完整全文

微信扫码关注
操作步骤:
1. 微信搜索:观知政道
2. 发送口令:获取密码
3. 复制4位验证码填入下方
