实时采集货币汇率并上传至物联网数据平台

# 背景

如果某天你打算出国了,需要将人民币兑换成美元或者是欧元,你肯定希望汇率是尽可能的低吧,汇率越低,能换到的钱也就越多。也许你运气好,一下就碰到了汇率低的时候,也许你不经意间错过了汇率低的时候,那岂不是太可惜了?那我们能不能写个脚本,实时查询汇率,当低于指定的值时发送邮件或是短信及时通知我?答应是肯定可以的。

# 原料

首先,我们需要准备以下原料:

其实原理很简单,用 shell 写一个脚本(写好之后放到 crontab 里面去,定期执行),先获取当前货币的兑换汇率,然后判断是否小于指定的值,当小于指定的值时,触发某个动作,比如发邮件或短信通知你。在这里我是选择用自己的平台来做,方便推广嘛(广告在此),最主要的是方便实时查看汇率和操作方便,当然你也可以自己搞一个发邮件或发短信的类。

我们来看看 shell 脚本中的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
millisecond=$(date +%s)
response=$(curl 'http://op.juhe.cn/onebox/exchange/currency?from=CAD&to=CNY&key=:key') # 替换为你自己的KEY
reason=$(echo $response | /usr/local/Cellar/jq/1.5_1/bin/jq '.reason') # 替换为你本机 jq 脚本的绝对地址
result=$(echo $response | /usr/local/Cellar/jq/1.5_1/bin/jq '.result[0].exchange') # 替换为你本机 jq 脚本的绝对地址
if test $reason='successed';
then
# 注意替换掉 :key :gateway_id :sensor_id 这 3 个参数
response=$(curl -d 'key=:key&value='$result 'http://api.smart-sensor.link/v1/gateway/:gateway_id/sensor/:sensor_id/append')
echo "当前汇率为:"$result"%"
else
echo "额。。。汇率查询失败~~~"
fi
echo "Millisecond: "$millisecond", Timestamp: "$timestamp", Response: "$response >> response.log # 写入到日志

需要注意的是,脚本中使用了 jq 这个工具,需要额外安装的,如果你不怕麻烦,你可以自己手动处理 JSON 数据。jq 官网:https://stedolan.github.io/jq/,自己对着文档安装吧,没什么难度,我就不啰嗦了。安装好之后,记得把 jq 脚本的绝对地址替换掉。

然后登录到数据平台进行添加网关、传感器、策略等信息,具体操作步骤如下图所示。

添加网关:

添加传感器:

添加策略:

最后把脚本加入到 crontab 里面,让其定期执行,我设置的是 1 分钟执行一次:

1
2
3
4
*/1 * * * * /absolute/path/to/shell-script
# crontab 格式如下:
* * * * * /path/to/shell-script #分 时 日 月 周 /path/to/shell-script。

不会 crontab 的,自己谷歌咯。。。如果一切顺利的话,等一分钟后,脚本所在的目录就会多出一个 response.log 文件。当采集到的汇率小于指定的阀值时,数据平台会就发送邮件给你了~~。

效果预览:


PS:我这里监控的是加币。

如果你在使用数据平台时发现了 Bug 或是有好的建议,欢迎邮件至 report@smart-sensor.link 或是提交 issue 到 https://github.com/code-artisan/www.smart-sensor.link/issues,谢谢!

结束!!!