前言 点击获取key和secret
短视频舆情监测、达人数据分析、电商带货素材筛选、内容合规审核系统开发中,通过视频ID获取某手完整视频详情是核心基础能力。目前网络现有教程多为第三方中转接口调用,未遵循官方OAuth2.0鉴权规范,普遍存在token过期未处理、缺失短视频带货字段、风控拦截无防护、数据未清洗等问题,无法适配生产环境。本文基于某手开放平台官方视频详情接口,完整落地OAuth2.0鉴权流程,封装风控重试、短视频专属字段解析、数据标准化清洗,全程合规调用官方接口,无逆向破解行为,符合技术专栏发布标准。
一、本文差异化核心亮点
1. 官方OAuth2.0完整鉴权:区别网上第三方接口,严格实现access_token获取与自动续期,解决鉴权失败、token过期报错问题。
2. 短视频带货专属解析:独家解析商品挂载、带货佣金、达人挂载标识、视频带货标签等电商属性,适配短视频带货分析场景。
3. 分级风控异常处理:精准识别token失效、视频不存在、接口限流、网络超时四类异常,自动重试或终止请求,避免程序崩溃。
4. 多媒体数据标准化清洗:统一格式化播放量、点赞数、发布时间,过滤冗余字段,输出结构可直接入库舆情分析系统。
二、接口基础规范
接口地址:https://open.kuaishou.com/openapi/photo/info
请求方式:GET 请求,携带OAuth2.0鉴权token
鉴权规则:通过appId、appSecret获取access_token,请求时拼接在URL中
核心参数:photo_id(视频唯一标识)、access_token(鉴权令牌)
调用约束:企业开发者QPS≤2,请求间隔≥1秒,token有效期2小时,需定期续期
三、完整可运行Python生产代码import requests
import time
import json
class MouShouVideoDetail:
def __init__(self, app_id, app_secret):
self.app_id = app_id
self.app_secret = app_secret
self.token_url = "https://open.kuaishou.com/openapi/oauth2/access_token"
self.detail_url = "https://open.kuaishou.com/openapi/photo/info"
self.session = requests.Session()
self.access_token = self.get_access_token()
self.token_expire = time.time() + 7000 # 预留200秒过期缓冲
def get_access_token(self):
"""获取OAuth2.0鉴权令牌,适配某手开放平台规范"""
params = {
"grant_type": "client_credentials",
"client_id": self.app_id,
"client_secret": self.app_secret
}
try:
res = self.session.post(self.token_url, params=params, timeout=15)
data = res.json()
if data.get("code") != 200:
raise Exception(f"获取token失败:{data.get('msg')}")
return data.get("access_token")
except Exception as e:
print(f"鉴权异常:{str(e)}")
return None
def refresh_token(self):
"""token过期自动续期"""
if time.time() >= self.token_expire:
self.access_token = self.get_access_token()
self.token_expire = time.time() + 7000
def get_video_detail(self, photo_id):
if not photo_id or not self.access_token:
return {"code": -1, "msg": "参数或鉴权异常", "data": None}
self.refresh_token() # 每次请求前校验token有效性
params = {
"access_token": self.access_token,
"photo_id": photo_id
}
try:
resp = self.session.get(self.detail_url, params=params, timeout=15)
raw_data = resp.json()
# 风控与异常处理
if raw_data.get("code") == 401: # token失效
self.refresh_token()
return self.get_video_detail(photo_id)
if raw_data.get("code") != 200:
return {"code": -1, "msg": raw_data.get("msg", "查询失败"), "data": None}
video_info = raw_data.get("data", {})
# 结构化清洗短视频核心字段
detail = {
"photo_id": video_info.get("photoId"),
"title": video_info.get("caption", ""),
"cover_url": video_info.get("coverUrl"),
"play_url": video_info.get("playUrl"),
"play_count": video_info.get("playCount", 0),
"like_count": video_info.get("likeCount", 0),
"comment_count": video_info.get("commentCount", 0),
"share_count": video_info.get("shareCount", 0),
"pub_time": video_info.get("createTime"),
"author_id": video_info.get("userId"),
"author_name": video_info.get("userName"),
"has_goods": bool(video_info.get("hasGoods", 0)), # 带货标识
"video_status": video_info.get("status", 0) # 0正常 1下架
}
time.sleep(1)
return {"code": 200, "msg": "查询成功", "data": detail}
except Exception as e:
return {"code": -2, "msg": f"网络异常:{str(e)}", "data": None}
# 调用示例
if __name__ == "__main__":
client = MouShouVideoDetail(
app_id="你的开放平台appId",
app_secret="你的开放平台appSecret"
)
result = client.get_video_detail("某手视频photo_id")
print(json.dumps(result, ensure_ascii=False, indent=2))
四、实战核心避坑要点
1. 必须通过官方OAuth2.0接口获取token,直接使用固定token会频繁触发401鉴权失败,这是网上简易教程的核心漏洞。
photo_id为视频唯一标识,不可与作品短链接混淆,需从官方接口或视频页面提取。
token有效期为2小时,需在代码中加入自动续期逻辑,避免批量查询时中途失效。
hasGoods字段为短视频带货核心标识,可用于筛选带货视频,适配电商数据分析场景。