首页 > 解决方案 > 如何验证我的 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资源一起使用。

标签: google-chrome-extensiondeployment

解决方案


源 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 requestsand 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)

推荐阅读