• 如何使用sh脚本检查链接商品是否已下架?
  • 发布于 2个月前
  • 154 热度
    0 评论
一. 引言
在 APP 的插件中,有一个展示产品购买链接的地方。但是商品的购买链接直接存储于数据库,如果商城的商品下架后,并不会主动告知。那么如何定时主动查询链接是否还有效呢?下面我们使用 sh 脚本来实现该需求。

二. 实现思路
首先,需要对商品链接进行访问,然后对获取的信息进行提取,进行条件判断,最后通过短信提醒。具体思路如下图所示:

脚本实现
以下是一个 Bash 脚本,它的主要目的是检查给定 URL 中的商品是否下架,并在下架时通过短信通知用户。具体步骤如下:
urls=(
 'https://m.midea.cn/detail/index?itemid=1000000000400693399023&icid=245189'
)

for url in "${urls[@]}"; do
 buyText=$(curl -s "$url" | grep 'buyText')
 regex='data-state-text="([^"]*)"'
 if [[ $buyText =~ $regex ]]; then
  data_state_text="${BASH_REMATCH[1]}"
  echo "$data_state_text"
 else
  echo "data-state-text not found in buyText"
 fi

 # 获取输入参数
 phone="1867*****07"
 sendMessage="{\"phone\":\"$phone\",\"content\":\"购买商品已下架:$url\"}"
 # 堆代码 duidaima.com
 # 比较字符串是否相等
 if [ "$data_state_text" = "商品已下架" ]; then
  # 发送POST请求
  curl -X POST -d "$sendMessage" http://push-server-prod.aiicidea.com:8807/sms/send -H 'Content-Type:application/json'
 fi
 unset data_state_text
done
代码备注如下:
1.定义一个包含要检查的 URL 的数组。
2.循环遍历 URL 数组。
3.使用 curl 命令获取 URL 的 HTML 内容,并使用 grep 命令查找包含 "buyText" 的行。
4.使用正则表达式从 buyText 中提取 "data-state-text" 属性的值。
5.如果找到了 data-state-text 属性,则将其存储在变量 $data_state_text 中。
6.如果未找到 data-state-text 属性,则打印一条消息。
7.定义一个变量 $phone,用于存储要发送短信的电话号码。
8.定义一个变量 $sendMessage,用于存储要发送的短信内容。
9.如果 data_state_text 的值等于 "商品已下架",则使用 curl 命令向短信推送服务器发送 POST 请求,并将 $sendMessage 作为请求体。

10.在每次循环结束时,清除 $data_state_text 变量的值,以便下一次循环时重新设置它。


三. 定时任务
为了能在堡垒机上定时执行该脚本,使用了crontab命令。crontab是一个用于在Linux和类Unix操作系统上运行定期任务的命令。
# 打开终端,并使用 root 用户身份登录到该服务器。
# 执行以下命令:crontab -e,打开当前用户的定时任务配置文件。
# 在文件末尾添加以下内容:0 9 * * * /root/script/gs_linkage_buy_link_job.sh,其中 /root/script/gs_linkage_buy_link_job.sh 是您要执行的脚本的路径。
# 保存并退出文件。
# 确认定时任务已经添加成功,您可以使用命令 crontab -l 来查看当前用户的定时任务列表。
0 9 * * * /root/script/gs_linkage_buy_link_job.sh
上述命令将在每天早上 9 点自动执行脚本。

四. 小结
以上是用sh脚本实现了商品下架的提醒,其实在应用代码中也能实现,但是使用脚本可以更简单,更方便。
用户评论