google-chrome-extension - 如何验证我的 Chrome 扩展程序是否已发布/在给定版本中可用?
问题描述
我正在使用chrome-webstore-upload-cli
自动将 Chrome 扩展部署到 Chrome 网上应用店。
webstore upload \
--source dist/extension.zip \
--extension-id $CHROME_STORE_EXT_ID \
--client-id $CHROME_STORE_CLIENT_ID \
--client-secret $CHROME_STORE_SECRET \
--refresh-token $CHROME_STORE_REFRESH_TOKEN \
--auto-publish
这在大多数情况下都可以正常工作。扩展已上传并发布。
问题
但是,有时,扩展不会自动发布。相反,它是“待审核”,它可能会处于这种状态一两个小时:
由于我的部署脚本假定一旦将扩展程序上传到网上商店,用户就可以使用它,这会导致错误(例如,断开的链接、版本号等)。
有什么方法可以以编程方式检查扩展是否在给定版本中实际可用,或者何时可用?
我试过的
我尝试使用curl
查询允许用户下载扩展的 Web Store 站点的内容,但它实际上不包含版本字符串。至少“附加信息”选项卡是动态呈现的,而不是原始站点源代码的一部分……</p>
我还检查了Web Store API。它提供了一个Items.Get
方法,但它只返回以下信息:
{
"kind": "chromewebstore#item",
"id": string,
"publicKey": string,
"uploadState": string,
"itemError": [
(value)
]
}
此数据不包含有关最新发布版本或审查状态的信息。无论如何,请求只能与DRAFT
资源一起使用。
解决方案
源 HTML 包含meta
带有版本的标签,特别是:
<meta itemprop="version" content="1.20.1"/>
现在,不应该用正则表达式解析 HTML,因为那是非常不稳定的。但就这个问题而言,以下工作正常:
extId="abcdefg"
curl -s -L "https://chrome.google.com/webstore/detail/$extId" | \
grep -o -E 'content="\d+\.\d+\.\d+"' | \
cut -d= -f2 | \
tr -d '"'
将扩展 ID 替换为您的。它只会打印版本(例如,1.20.1
)。
一个更稳定的解决方案是使用例如 Python 3 with requests
and BeautifulSoup
:
import requests
from bs4 import BeautifulSoup
ext_id="abcdefg"
ret = requests.get("https://chrome.google.com/webstore/detail/" + ext_id)
soup = BeautifulSoup(ret.text, 'html.parser')
version = soup.find_all("meta", attrs={"itemprop": "version"})[0]["content"]
print(version)