利用 GitHub API 获取最新 Releases 的版本号
前言
本文以 iina/iina: The modern video player for macOS 为例,展示利用 GitHub API 获取 Repo 中最新 Releases 的版本号。
代码
1 | wget -qO- -t1 -T2 "https://api.github.com/repos/iina/iina/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g' |
代码解释
主字段
https://api.github.com/repos/iina/iina/releases/latest
这里用的是 GitHub 的官方 API,格式为 https://api.github.com/repos/{项目名}/releases/latest
打开上述链接后,可见包含下述字段的内容:
1 | "html_url": "https://github.com/lhc70000/iina/releases/tag/v0.0.15.1", |
那么这里的tag_name
就是我们所需要的东西啦
wget 参数
wget -qO- -t1 -T2
,在这里,我们使用了 4 个参数,分别是q,O-,t1,T2
-q
: q 就是 quiet 的意思了,没有该参数将会显示从请求到输出全过程的所有内容,这肯定不是我们想要的。-O-
:-O
是指把文档写入文件中,而-O-
是将内容写入标准输出,而不保存为文件。(注:这里是大写英文字母 O (Out),不是数字 0)-t1,-T2
: 前者是设定最大尝试链接次数为 1 次,后者是设定响应超时的秒数为 2 秒,两者可以防止失败后反复获取,导致后续脚本无法执行。
筛选参数
grep "tag_name"
: grep 是 Linux 一个强大的文本搜索工具,在本代码中输出 tag_name 所在行,即输出"tag_name": "v0.0.15.1",
head -n 1
:head -n
用于显示输出的行数,考虑到某些项目可能存在多个不同版本的 tag_name,这里我们只要第一个。awk -F ":" '{print $2}'
: awk 主要用于文本分析,在这里指定:
为分隔符,将该行切分成多列,并输出第二列。于是我们得到了(空格)"v0.0.15.1",
sed 's/\"//g;s/,//g;s/ //g'
: 在这里 sed 用于数据查找替换,如sed 's/要被取代的字串/新的字串/g'
,因此本段命令可分为 3 个,以分号分隔。s/\"//g
即将引号删除(反斜杠是为了防止引号被转义),以此类推,最终留下我们需要的内容:v0.0.15.1
。