如何通过BlueSky/ATProtocol API为帖子添加自标签?
为BlueSky内容添加自标签的实现方法
直接用requests调用BlueSky API添加自标签,核心是借助com.atproto.label.create接口构造规范的标签数据发起请求,具体步骤如下:
1. 获取自身DID
自标签的src字段必须填写你自己的身份DID,可通过com.atproto.actor.getProfile接口获取:
import requests handle = "你的handle(比如xxx.bsky.social)" access_token = "你的BlueSky访问令牌" base_url = "https://bsky.social" # 请求获取个人资料并提取DID profile_resp = requests.get( f"{base_url}/xrpc/com.atproto.actor.getProfile", params={"actor": handle}, headers={"Authorization": f"Bearer {access_token}"} ) did = profile_resp.json()["did"]
2. 构造自标签数据
自标签属于com.atproto.label类型,字段说明及示例如下:
$type: 固定为com.atproto.labelsrc: 步骤1获取到的自身DIDuri: 目标内容的URI(帖子URI格式为at://{did}/app.bsky.feed.post/{post_id},Blob URI格式为at://{did}/blob/{blob_id})val: 自定义标签值(可带#前缀,也可为纯文本)cts: ISO 8601格式的UTC当前时间
示例构造代码:
import datetime # 替换为你要打标签的内容实际URI target_uri = f"at://{did}/app.bsky.feed.post/abc123456" label_data = { "$type": "com.atproto.label", "src": did, "uri": target_uri, "val": "#my-personal-tag", "cts": datetime.datetime.utcnow().isoformat() + "Z" }
3. 调用标签创建接口
发起POST请求完成自标签添加:
label_resp = requests.post( f"{base_url}/xrpc/com.atproto.label.create", headers={ "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" }, json={"labels": [label_data]} ) # 验证请求结果 if label_resp.status_code == 200: print("自标签添加成功") else: print(f"添加失败:{label_resp.json()}")
关键注意事项
- 只有内容所有者可以给自己的帖子/Blob加自标签,
src必须与内容所有者DID一致,否则会返回权限错误。 - 标签值无严格格式限制,可根据需求选择
#tag格式或纯文本。 - 如需批量打标签,可在请求体的
labels数组中添加多个标签对象。
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

