Sukka's Blog

童话只美在真实却从不续写

是的,又是一个 Chrome 离线包下载页面。

DEMO: https://lab.skk.moe
短网址: https://git.io/Chrome (注意大小写)

chrome-demo.png

之前 neoFelhz 的一个域名的 SSL 到期了,所以他的 https://chrome.nfz.moe 就没法用了。而且,他的 Chrome 离线包下载页面只兼容 IE 10+,所以我有时要给 Windows 7 装 Chrome 时就没法用了。

既然如此,那就自己造一个。反正 neoFelhz 已经开源了他的 ChromeChecker,我就去 fork 回来用就行了。

这里不得不提一下 METO,他在他的博客里提到了 相关 API 和请求方法,这是获取 Chrome 离线包下载地址的关键。

但是看了一下他的 ChromeChecker,输出的 XML 都是把数据写在 XML 节点的属性里,解析起来太麻烦。而且,使用 AJAX 获取 XML 数据的方法,能不能兼容 IE8 还是一个问题。
如果要绕过 AJAX 获取数据,直接输出包含所有信息的 HTML 就行了。本着不把简单的问题复杂化,我决定继续用 bash 完成剩余的工作:先写一个 HTML 模板,之后用 sed 把数据填充到模板里。

把 HTML 模板和将数据填充到模板里的脚本丢进 Repo 里,然后在 Travis CI 上启用定时运行,实现 24 小时查询一次。

同样的,我也搞了一个 API,包含了版本号、HASH、下载地址:https://lab.skk.moe/chrome/api/chrome.xml 返回未压缩的数据用于开发,https://lab.skk.moe/chrome/api/chrome.min.xml 返回压缩的数据。这个 API 把数据写在节点里,而不是属性值里。


在这里顺便记下几个使用 bash 时遇到的坑和对应解决方案:

拼接字符和变量

直接怼一块就行了,就像这样

$ a=sukkaw
$ echo -e $a
sukkaw
$ echo -e $a"~meow~"
sukkaw~meow~

bash 计算数值

使用 $[] 是可以直接计算的:

$ echo -e $[1+2]
3
$ echo -e $[1-2]
-1
$ echo -e $[1*2]
2

但是 bash 里使用变量计算不支持计算小数,小数点和之后的内容会被直接抛弃,就像这样:

$ echo -e $[1/2]
0

而且,使用这种办法不能把计算结果传给一个变量,所以得借助 awk 帮忙:

$ a=$(awk 'BEGIN{printf"%.3f",('5'/'9')}')
$ echo -e $a
0.556

date 指定时区

这个还算简单,man 里面也有写,直接用 TZ=UTC- 就行。

$ TZ=UTC-9 date '+%Y-%m-%d %H:%M:%S'
2018-08-08 20:16:43

sed 替换字符串

sed 的文档介绍说可以用大部分字符作为分隔符,比如:

$ sed -i "s|a|b|g" a.txt
$ sed -i "s/a/b/g" a.txt
$ sed -i "s~a~b~g" a.txt
$ sed -i "s!a!b!g" a.txt

但是替换的字符串或者目标字符串不能带有和分隔符相同的字符,如果遇到了需要换掉分隔符。

本文作者 : Sukka
本文采用 CC BY-NC-SA 4.0 许可协议。转载和引用时请注意遵守协议!
本文链接 : https://blog.skk.moe/post/chrome-binary-download/

本文最后更新于 天前,文中所描述的信息可能已发生改变