如何查看博客园积分排名趋势图工具的使用方法?

摘要:一个使用 curl+sed+grep+shell+定时任务+git+gnuplot 生成博客积分排名趋势图的小工具
问题的提出 在博客园写文章有一段时间了,除了自己有一些新的发现想与别人分享外,推动我写文章的最大动力就是看博客园排名不断增长啦!然而在博客园后台,只能看到当天的积分与排名,历史值和趋势却没有办法查询,对于文章发表后对自己积分与排名的影响并不直观,于是就想到自己动手做一个积分与排名趋势图这样一个工具。 具体步骤 1. 打开博客园积分与排名显示 这个就不消多说了,在博客园后台,选项->控件显示设置中,将积分与排名勾选并保存。 刷新页面后,可以在侧边栏看到自己博客的积分与排名: 2. 使用 curl 在本地获取当天信息 为了获取当天的积分与排名,需要使用 curl 下载页面。 curl -s 'https://www.cnblogs.com/goodcitizen/ajax/sidecolumn.aspx' 为什么是这个页面,而不是主页,我也不清楚,我是从附录 1 得到的启发。输出比较多,只看我们关心的部分 可以看到积分是在名为 liScore 的 html 元素中,排名是在 liRank,没有找到解析 html 的趁手命令,直接使用 grep + sed 搞起 curl -s 'https://www.cnblogs.com/goodcitizen/ajax/sidecolumn.aspx' | grep 'liScore' -A 6 | sed -n -e 3p -e 7p 这句话后半段翻译一下就是,取看到 liScore 关键字所在行(含)的后面 6 行,积分与排名的值分别位于第 3 行、第 7 行,使用 sed 过滤这两行,就成这样了 4709 113450 完整的脚本如下 score.sh 1 #! /bin/sh 2 git pull origin master 3 day=$(date +"%Y-%m-%d") 4 last=$(cat ./score.txt | tail -1 | awk '{ print $1 }') 5 if [[ "$day" < "$last" ]] || [[ "$day" = "$last" ]]; then 6 echo "has updated, skip" 7 exit 0 8 fi 9 10 data=$(curl -s 'https://www.cnblogs.com/goodcitizen/ajax/sidecolumn.aspx' | grep 'liScore' -A 6 | sed -n -e 3p -e 7p) 11 score=$(echo $data | sed -n 1p) 12 rank=$(echo $data | sed -n 2p) 13 echo "$day $score $rank" >> score.txt 14 git add score.txt 15 git commit -m "udpate score" 16 git push origin master 增加的部分主要是 添加日期列作为横轴 (line 3,13) 将当天信息作为一行追加到 score.txt 文件 (line 11-13) 添加当天信息前判断是否已经记录过,如果是则跳过,防止重复添加 (line 4-8) 将修改后的 score.txt 文件上传到 github (line 14-16) 3. 使用定时任务记录每天的信息 经过长时间的暗中观察,我发现博客园的积分与排名是每天更新一次。于是我们可以增加一个定时任务,每天中午跑一下,来获取当天的信息。不同的系统,方法不一,下面分别说明 3.1 计划任务 (Windows) 什么,你这个不是 shell 脚本吗,怎么还能在 Windows 上跑?嘿嘿,不错。上面的例子我就是运行在 Windows 上的,因为我装了一个 git bash,它自带 msys2 环境,类似于 mingw,也是一种在 Windows 上运行的 Linux 微环境,一些常用的 Linux 命令都支持的,例如上面说到的 grep、sed、git,并且可以直接跑 shell 脚本。
阅读全文