在 conky 中添加自动显示/更新最新汽油油价
2019.9.19
基本条件:系统中已经安装了 conky
命令名称: conky-oil-price-update.sh
版本:0.2
下载地址:
https://sourceforge.net/projects/emacslocale/files/conky-weather/
效果图
操作:
-
修改 ~/.conkyrc ,添加以下内容
#-------------------
${hr}
${font WenQuanYi Zen Hei Sharp:pixelsize=18}${alignc}[ 油价 ]
${exec sed -n ‘1,3p’ $HOME/conky/oil-price.txt}
${hr}
#------------------- -
下载或者编辑一个自动从网站读取油价信息的 bash 脚本。我这里命名为
~/sh/conky-oil-price-update.sh
保存,并给出 755 执行权限:
chmod 755 ~/sh/conky-oil-price-update.sh
- 上面的 conky-oil-price-update.sh 命令脚本中,默认设置的省份是 湖南。
湖南以外的其他省份,请把第 27行 的 ZONE_EN 变量,由 hunan, 改成对应省份/直辖市的 汉语拼音。
特别提示:
- 油价数据来源: http://youjia.chemcp.com/
- 个别省份的拼音写法比较特殊,请参照以下拼音写法:
shanxi 山西 ; sanxi 陕西
shanndong 山东 ; xicang 西藏 - 目前只支持指定省/直辖市,不能指定到下一级某个城市
-
手动运行这个命令一次,看看效果。
~/sh/conky-oil-price-update.sh -
修改 crontab 计划任务表,添加一个自动执行油价数据更新的任务。时间设定:
每天每个小时的第 15分钟更新一次。
其实,油价数据一般是2个星期才更新一次。如果电脑是一直联网的,可以设置为每天的9:00更新一次就够了。
这里给出的设置,是考虑到某些情况下,电脑开机时间不确定,或者不是经常联网的情况。
以普通用户运行 crontab -e
添加这样一行:
15 * * * * /home/user/sh/conky-oil-price-update.sh
注:/home/user 即我电脑上的 ~ 目录
附: conky-oil-price-update.sh 脚本内容
#!/bin/bash
coding: utf-8
original filename: conky-oil-price-update.sh
updated by Careone, 2019-9-19
APPNAME=“conky-oil-price-update”
APPVER=“0.2”
oil price source: http://youjia.chemcp.com/hunan/
src_html=mktemp
#src_html="$HOME/conky/youjia_chemcp_com_gb2312.html"
#utf8_html=mktemp
utf8_html="$HOME/conky/oil-price.html"
datafile="$HOME/conky/oil-price.txt"
checksum="$HOME/conky/oil-price.md5"
if [ ! -d “$HOME/conky” ]; then
mkdir -p “$HOME/conky”
fi
declare -a type price
#type=( “89号汽油” “92号汽油” “95号汽油” “98号汽油” “0号柴油” )
TAG 26:
ZONE_EN=“hunan” #hunan, guangdong…
ZONE_CN= #湖南, 广东, 北京, 上海…
_usage () {
cat<<EOF
Usage: $APPNAME [ 省/直辖市的拼音 ]
示例: $APPNAME hunan 获取 [ 湖南 ] 省最新的汽油/柴油价格
特别提示:
- 油价数据来源: http://youjia.chemcp.com/
- 个别省份的拼音写法比较特殊,请参照以下拼音写法:
shanxi 山西 ; sanxi 陕西
shanndong 山东 ; xicang 西藏
Options:
-v, --version 显示版本信息并退出
-h, --help 显示帮助信息并退出
Bugs:
请发送缺陷报告给 Careone <emacslocal^126.com>.
Homepage:
https://sourceforge.net/projects/emacslocale/files/conky-weather/
EOF
}
_notice () {
cat<<EOF
特别提示:
- 油价数据来源: http://youjia.chemcp.com/
- 个别省份的拼音写法比较特殊,请参照以下拼音写法:
shanxi 山西 ; sanxi 陕西
shanndong 山东 ; xicang 西藏
EOF
}
for option in “$@”; do
case "$option" in
-h | --help)
_usage
exit 0 ;;
-v | --version)
echo " $APPNAME $APPVER"
exit 0 ;;
-*)
echo "Unrecognized option \`$option'" 1>&2
exit 1 ;;
esac
done
if [ “$#” -ge 1 ]; then
ZONE_EN="$1"
case “$ZONE_EN” in
[a-zA-Z]) ZONE_EN=echo "$ZONE_EN" | tr 'A-Z' 'a-z'
;;
[^a-zA-Z] | *) echo " 错误 (E35): 无效的地区代码。请使用省/市的拼音" 1>&2
echo " (默认为: hunan 湖南) "
ZONE_EN=“hunan” ;;
esac
fi
BODY
echo " $APPNAME $APPVER"
_notice
echo
echo " * 联网获取油价信息 [ http://youjia.chemcp.com ] …"
echo " ------------------ "
wget -c “http://youjia.chemcp.com/” -O “$src_html”
echo " ------------------ "
echo
#if [ ! -s “$utf8_html” ]; then
if [ ! -e “$utf8_html” ]; then
md5sum “$src_html” > “$checksum”
echo " [ 更新 ] 油价数据 (date --iso
) …"
iconv -f gb2312 -t utf8 “$src_html” > “$utf8_html”
sed -i “/charset=gb2312/s//charset=utf8/” “$utf8_html”
else
OLD_MD5=cat "$checksum" | cut -d' ' -f1
NEW_MD5=md5sum "$src_html" | cut -d' ' -f1
if [ “$NEW_MD5” != “$OLD_MD5” ]; then
echo " [ 更新 ]油价数据 (date --iso
) …"
iconv -f gb2312 -t utf8 “$src_html” > “$utf8_html”
sed -i “/charset=gb2312/s//charset=utf8/” “$utf8_html”
else
echo " [ 读取 ] 油价数据…"
if [ -e “$utf8_html” ]; then
touch “$utf8_html”
fi
fi
fi
#if [ ! -s “$utf8_html” ]; then
echo " 读取油价数据…"
iconv -f gb2312 -t utf8 “$src_html” > “$utf8_html”
#fi
part 2: 提取油价数据
type=( grep "地区" "$utf8_html" -A5 | sed -n '2,6p' | cut -d'>' -f3 | cut -d'<' -f1 | sed "/号汽油/s//#/g"
)
#unset type[0]
if [ -z “$ZONE_EN” ]; then
ZONE_EN=“hunan”
#ZONE_CN=“湖南”
fi
ZONE_CN=grep "http://youjia.chemcp.com/$ZONE_EN/" -A6 "$utf8_html" | head -1 | cut -d'>' -f3 | cut -d'<' -f1
echo " 地区: $ZONE_EN ($ZONE_CN)"
#price=( grep '元/升<' "$utf8_html" | cut -d'>' -f3- | cut -d'<' -f1 | sed "/元../s///"
)
price=( grep "http://youjia.chemcp.com/$ZONE_EN/" -A6 "$utf8_html" | sed -n '2,7p' | cut -d'>' -f2 | cut -d'<' -f1
)
TIMESTAMP="${price[5]} ${price[6]}"
unset price[6] price[5]
echo " [$ZONE_CN] $TIMESTAMP 更新" | tee “$datafile”