mcpField
S
scrape-zyte-login

scrape-zyte-login

github.com/zytedata云与 DevOps11149 次安装2 天前更新
代码仓库

关于 scrape-zyte-login

scrape-zyte-login 是用于配置 Zyte 抓取凭据的技能,面向使用 Zyte 项目和 API Key 的用户。它通过 OAuth 流程设置凭据,并将敏感值保存在 .env 中而不显示密钥。

主要功能

  1. 01检查环境与 .env 中的凭据状态
  2. 02运行 Zyte OAuth 设置流程
  3. 03按名称选择项目与 API Key
  4. 04将密钥安全保存至 .env
  5. 05保存所选项目 ID

适用场景

  1. 01首次配置 Zyte 抓取凭据
  2. 02为选定项目获取并保存 Zyte API Key
  3. 03检查凭据是否已配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/zytedata/skills --skill scrape-zyte-login

安装后在 Claude Code 中输入/scrape-zyte-login确认已加载。

附带文件scripts/oauth.py

详细介绍

API 密钥绝不能出现在对话记录中。不要直接回显、读取或写入密钥值。

SHUB_APIKEY 和 ZYTE_API_KEY 已保存在项目的 .env 文件中。请勿将 .env 纳入版本控制。

1. 检查凭据

报告每个密钥是否已在环境中设置或存储在 .env 中(不要导出任何内容):

{ [ -n "$ZYTE_API_KEY" ] || grep -q '^ZYTE_API_KEY=' .env 2>/dev/null; } && echo "ZYTE_API_KEY: present" || echo "ZYTE_API_KEY: missing"
{ [ -n "$SHUB_APIKEY" ] || grep -q '^SHUB_APIKEY=' .env 2>/dev/null; } && echo "SHUB_APIKEY: present" || echo "SHUB_APIKEY: missing"

如果两者都存在,请继续执行第 3 步。

2. 运行 OAuth 设置流程

告诉用户:

我正在浏览器中启动 Zyte OAuth 设置流程。请在那里完成登录和授权。

运行 OAuth 流程脚本:

uv run ${CLAUDE_SKILL_DIR}/scripts/oauth.py --production

该脚本会将 SHUB_APIKEY 直接存入 .env(不会打印密钥值),并保存一个项目和密钥文件。其输出中会包含类似 Saved data to /path/to/file 和 Saved SHUB_APIKEY to .env 的行。检查输出并找出项目和密钥文件的路径。

确保 .env 未纳入版本控制:

grep -qxF '.env' .gitignore 2>/dev/null || echo '.env' >> .gitignore
3. 让用户选择项目和 Zyte API 密钥

根据第 2 步找到的项目和密钥文件,向用户列出:

  • 所有可用项目:project id 和 project name
  • 所有可用的 Zyte API 密钥:apikey name(绝不显示密钥值)

请用户按名称选择一个项目和一个 API 密钥。

用户选择 API 密钥后,从同一文件中获取其下载 URL,下载该密钥,并将其存入 .env 中的 ZYTE_API_KEY,替换任何现有条目。密钥值不会打印到终端,也不会导出到 shell(SHUB_APIKEY 从 .env 中读取)。

包装脚本会在第一行打印 HTTP 状态码,其余部分打印响应正文。以下命令会避免将失败响应(例如身份验证错误正文)写入 .env 并误当作密钥:仅当状态码为 200 时才保存密钥;否则会打印服务器响应,以便向用户报告失败情况(绝不打印密钥值):

OUT="$(uv run ${CLAUDE_SKILL_DIR}/../scrape-scrapy-cloud/scripts/scrapy_cloud_api.py GET $URL)"
if [ "$(printf '%s\n' "$OUT" | head -n1)" = "200" ]; then
  { grep -v '^ZYTE_API_KEY=' .env 2>/dev/null; printf 'ZYTE_API_KEY=%s\n' "$(printf '%s\n' "$OUT" | tail -n +2)"; } > .env.tmp && mv .env.tmp .env
  echo "ZYTE_API_KEY stored in .env"
else
  echo "Failed to download Zyte API key; .env left unchanged. Server response:"
  printf '%s\n' "$OUT"
fi

如果报告失败,请勿继续;最常见的原因是缺少或无法解析 SHUB_APIKEY(需要 shub>=2.18.1,它会从 .env 中读取该值)。

读取后清理项目和密钥文件:

rm /path/to/projects-and-keys.json
4. 保存所选项目 ID

如果用户在第 3 步选择了项目 ID,请保存:

mkdir -p .scrape/.zyte
echo "PROJECT_ID" > .scrape/.zyte/project-id

如果未选择项目,请跳过。告诉用户:“Zyte 凭据已启用。”

返回给调用方:

Zyte setup complete:
  ZYTE_API_KEY: present
  SHUB_APIKEY: present
  Project ID: 12345 (or not saved)

评论

支持 Markdown