You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本远程获取GitHub私有仓库PR描述中的图片?

如何在脚本中下载私有GitHub仓库PR描述中的图片并推送到Slack

核心思路

GitHub私有仓库中PR描述里的assets图片(https://github.com/owner/repo/assets/...)需要授权访问,通过携带**GitHub个人访问令牌(PAT)**发起请求,GitHub会自动重定向到短期有效的公开URL,直接跟随重定向即可获取图片内容,之后上传到Slack即可。

步骤详解

1. 创建GitHub个人访问令牌(PAT)

  • 登录GitHub,进入「Settings」→「Developer settings」→「Personal access tokens」
  • 生成新令牌,勾选repo权限(私有仓库访问必需),保存好令牌(只会显示一次)

2. 提取PR描述中的图片URL

从GitHub PR的webhook payload或GitHub API获取PR的body内容,用正则表达式提取所有<img>标签的src属性:

import re
pr_body = "你的PR描述内容"
img_urls = re.findall(r'<img.*?src="(https://github\.com/[^"]+/assets/[^"]+)"', pr_body)

3. 授权下载图片

用HTTP客户端(如requests)发送GET请求,携带Authorization头,跟随重定向获取图片二进制数据:

import requests

github_pat = "你的GitHub PAT"
headers = {"Authorization": f"token {github_pat}"}

for img_url in img_urls:
    response = requests.get(img_url, headers=headers, allow_redirects=True)
    response.raise_for_status()  # 捕获请求错误
    image_content = response.content  # 图片二进制数据

4. 上传图片到Slack

使用Slack的files.upload API上传图片,同时可以附带PR的相关信息:

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

slack_token = "你的Slack Bot Token"
slack_channel = "#目标频道"

slack_client = WebClient(token=slack_token)

try:
    response = slack_client.files_upload(
        channels=slack_channel,
        content=image_content,
        filename="pr-change-screenshot.png",  # 根据实际格式调整后缀
        title="PR合并变更截图"
    )
    print(f"图片上传成功:{response['file']['permalink']}")
except SlackApiError as e:
    print(f"Slack上传失败:{e.response['error']}")

关键注意事项

  • PAT权限:必须勾选repo权限,否则无法访问私有仓库的assets资源
  • 重定向处理:确保HTTP客户端允许跟随302重定向(requests默认开启)
  • Slack权限:Slack Bot Token需要拥有files:write和chat:write权限,才能完成文件上传和消息发送
  • 多媒体支持:如果PR中的是GIF等短视频,只需修改filename的后缀,Slack会自动识别格式
  • Webhook集成:如果是响应GitHub的PR合并webhook,可以直接从payload中提取PR标题、描述、合并者等信息,无需手动输入

内容的提问来源于stack exchange,提问作者plowman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:38:11