You need to enable JavaScript to run this app.
导航
ListDatasetData - 获取视频数据及详情(不推荐)
最近更新时间:2025.11.23 16:35:11首次发布时间:2025.06.10 15:54:35
复制全文
我的收藏
有用
有用
无用
无用

说明

API为V1版本控制面获取视频数据接口,获取数据集中的数据列表和查看单条数据详情请集成ListItems和GetItem接口,详情请查看:ListItems - 获取数据集中的数据列表GetItem - 查询数据详情

获取所有数据列表

指定数据集ID,获取所有数据集内数据

请求说明

接口名称:ListDatasetDataAPI

请求参数

Request

参数

类型

是否必选

示例值

描述

DatasetID

String

"106260669"

数据集 ID

PageNumber

Int

1

搜索结果的页码;
起始值为1,默认值为1,如果小于1则报参数错误;
不传时返回默认值。

PageSize

Int

10

每页搜索结果的数量;
默认值为10,最大值为100,如果小于等于 0 或者超过 100 则报参数错误;
不传时返回默认值。

请求示例

curl 'http://open.volcengineapi.com/?Action=ListDatasetDataAPI&Version=2025-03-01' \
--header 'Content-Type: application/json' \
--data '{
    "DatasetID": "106260669",
    "Page": 1,
    "PageSize": 10
}'

响应参数

Response

字段名

类型

描述

TotalCount

Int

查询结果的总数

Items

Array<ListDatasetDataAPIRespItem>

搜索结果

ListDatasetDataAPIRespItem

字段名

类型

描述

ContentID

String

媒体内容的唯一标识(在同一个数据集下唯一)

ContentType

String

内容类型,支持上传枚举值:

  • "collection":媒体系列,例如电视剧的元数据信息
  • "video":视频内容,例如上传电视剧单集和电影的视频以及元数据信息

ParentContentID

String

父内容唯一标识

SequenceIndex

Int64

标识多个子内容在父内容中的顺序信息(比如电视剧的集数),用于串联视频内容进行同媒体系列的跨视频理解

Status

String

状态:处理完成(0),处理中(1),数据异常(2)

ErrorCode

String

异常信息:返回数据的异常信息

Timestamp

Int64

更新时间戳 :秒级的 unix表示

处理状态

数据接入和质量问题错误码及其含义:
10001: InvalidJsonLineError - 无效的json行
10002: DataPrimaryKeyNotFoundError - 数据唯一标识未找到
10003: DataContentTypeNotFoundError - 数据类型未找到
10004: UnsupportedContentTypeError - 不支持的数据类型
10005: DuplicateMediaSequenceIndexError - 重复的媒体内容序号
10006: MediaCannotBeSetAsParentError - Video类型不能设置为父内容
10007: ParentContentMustBeCollectionError - 父内容必须是Collection类型
10008: ParentContentNotUploadedError - 父内容未上传
10009: InvalidVideoUrlError - 无效的视频URL
10010: InvalidImageUrlError - 无效的图片URL
10011: VideoUrlNotUploadedError - 视频URL未上传
10012: InvalidMediaSequenceIndexError - 无效的媒体内容序号(为负数)
视频处理失败的错误码及含义:
20000: VideoProcessError - 视频处理错误
20001: VideoDurationExceedsLimitError - 视频时长超过限制
20002: VideoSizeExceedsLimitError - 视频大小超过限制
22001: VideoUnderstandingClipsCommonException - 视频理解过程异常
22002: VideoUnderstandingClipsNoCallbackError - 视频理解无回调
22003: VideoUnderstandingClipsResultFailed - 视频理解结果失败

响应示例

"Result": {
        "Items": [{
                "ContentID": "test_0522_collection_01",
                "ContentType": "collection",
                "ParentContentID": "",
                "SequenceIndex": 0,
                "Timestamp": 1748953903,
                "Status": 0,
                "ErrorCode": "0"
        },
        {
                "ContentID": "test_0522_series_01",
                "ContentType": "video",
                "ParentContentID": "test_0522_collection_01",
                "SequenceIndex": 1,
                "Timestamp": 1748953166,
                "Status": 0,
                "ErrorCode": "0"
        },
        {
                "ContentID": "test_0522_single_01",
                "ContentType": "video",
                "ParentContentID": "",
                "SequenceIndex": 0,
                "Timestamp": 1748511326,
                "Status": 0,
                "ErrorCode": "0"
        },
        "ContentID": "test_0522_series_02", "ContentType": "video", "ParentContentID": "test_0522_collection_01", "SequenceIndex": 2, "Timestamp": 1748503206, "Status": 0, "ErrorCode": "0"
},
{
        "ContentID": "test_0522_series_03",
        "ContentType": "video",
        "ParentContentID": "test_0522_collection_01",
        "SequenceIndex": 3,
        "Timestamp": 1748413589,
        "Status": -1,
        "ErrorCode": "unknown"
}]
}

获取数据详情信息

接口名称:GetDatasetDataAPI
指定数据集ID和数据ID,获取视频数据的详情内容

请求参数

Request

参数

类型

是否必选

示例值

描述

DatasetID

String

"106260669"

数据集 ID

ContentID

String

"106260669_5770528247083860262"

数据唯一标识

请求示例

curl  'http://open.volcengineapi.com/?Action=GetDatasetDataAPI&Version=2025-03-01' \
--header 'Content-Type: application/json' \
--data '{
    "DatasetID": "106260669",
    "ContentID": "test_0522_collection_01"
}'

响应参数

Response

字段名

类型

描述

Content

String

原始数据字段

VideoContent

GetDatasetDataAPIRespVideoContent

Type为video时,返回视频理解后的内容

CollectionContent

GetDatasetDataAPIRespCollectionContent

Type为collection时,返回系列下所有视频生成的内容总结

GetDatasetDataAPIRespVideoContent

字段名

类型

描述

Title

String

生成的视频标题

Summary

String

生成的视频总结

Insight

String

视频故事线理解返回的全部内容,返回一段内涵json结构的字符串
见Insight

GetDatasetDataAPIRespCollectionContent

字段名

类型

描述

Summary

String

生成的系列总结

Insight

字段名

类型

描述

Summaries

Array

总结

Titles

Array

标题

Clips

Array<Clips>

视频中分片段的理解内容

Clips

字段名

类型

描述

Title

String

标题

Summary

String

总结

Score

Float

高光程度得分值,分数越高,高光值越高
取值范围1-5

Dialogue

String

视频对话

Start

Float

开始时间

End

Float

结束时间

Insight字段详情
{
  "Summaries": [
        "唐仁与秦风卷入黄金失窃与密室杀人双重迷局,警方通缉与黑帮威胁接踵而至。两人通过监控覆盖规律与现场痕迹,发现凶手藏匿工坊长达一周。黄金被铸成佛像未流出,真凶竟是思诺养父为掩盖罪行设局。最终在佛像内寻回黄金,揭露杀人动机与完美犯罪手法,警匪追逐中真相浮出水面。"
    ],
    "Titles": [
        "密室谜案与黄金佛像背后的终极对决"
     ],
    "Clips": [
        {
            "Title": "女孩的秘密与决定",
            "Summary": "影片中,一个男孩失踪后,他的父亲一直在寻找他,甚至怀疑儿子已死,并认为凶手可能是一个女孩。画面中,蓝脸人在学校透过围栏观察着,场景切换到街道上,蓝脸人继续在人群中穿梭。另一边,一个蓝脸女孩在街道上行走,神情忧虑。她似乎知道继父对自己有着不寻常的爱,担心事情暴露,因此决定除掉继父。整个片段充满了悬疑和紧张的氛围。",
            "Score": 3.5,
            "Dialogue": null,
            "Start": 7414.5,
            "End": 7460.0
        },
        {
            "Title": "探秘真相,终章落幕",
            "Summary": "秦风在医院与思诺对峙,揭开了斯诺的阴谋。之后,秦风与唐仁在街头相遇,两人决定一起继续探案。他们来到一个高科技实验室,见到了许多先进的设备。最后,电影在一系列的字幕和鸣谢中结束。",
            "Score": 3.5,
            "Dialogue": null,
            "Start": 7460.0,
            "End": 8142.5
        }
    ]
}

响应示例

{
    "ResponseMetadata":{
        "RequestId":"",
        "Service":"",
        "Action":"",
        "Region":"",
        "Version":""
      },
      "Result":{
          "Content":"{\"description\":\"2007 年,地球基础科学出现异常扰动,科学界...\",\"genre\":\"剧情 / 科幻\",\"parent_content_id\":\"\",\"sequence_index\":0,\"title\":\"三体第3集\",\"translated_name\":\"三体 / Three-Body\",\"writers\":[\"田良良\",\"陈晨\"],\"country\":\"中国大陆\",\"year\":\"2023\",\"language\":\"汉语普通话\",\"content_id\":\"test_0522_collection_01\",\"content_type\":\"collection\",\"runtime\":\"\",\"cast\":[\"张鲁一\",\"于和伟\",\"陈瑾\",\"王子文\",\"林永健\",\"李小冉\",\"王传君\",\"张帆\",\"白客\",\"涂松岩\",\"刘敏\",\"寇振海\",\"杨蓉\",\"孔琳\",\"张峻宁\",\"柯南・何裴\",\"李则慧\",\"赵健\",\"何杜娟\",\"孔连顺\",\"韩青\",\"黎明明\",\"张铭恩\",\"朱戬\",\"郭靖宇\",\"江南\",\"蔡佳\",\"胡杰\",\"于洋\",\"侯鸿亮\",\"梁振华\",\"费振翔\",\"高亚麟\",\"季晨\",\"马东\",\"唐家三少\",\"白一骢\",\"杨磊\",\"贾士凯\",\"王薇\",\"王羽铮\",\"于歆玥\",\"潘晓莉\",\"蔡盈盈\"],\"douban_rating\":\"7.0\",\"release_date\":\"2023-01-15 (中国大陆)\",\"director\":\"杨磊\"}",
          "VideoContent":null,
          "CollectionContent":{
              "Summary":"目录:第1个视频 卫冕冠军..."
            }
     }
}
{
    "ResponseMetadata":{
        "RequestId":"",
        "Service":"",
        "Action":"",
        "Region":"",
        "Version":""
     },
     "Result":{
         "Content":"{\"country\":\"中国大陆\",\"language\":\"汉语普通话\",\"sequence_index\":2,\"video_url\":[\"http://ai-search-rec-video.byte-test.com/d1d5d4c432cb4cebae6f5728902504fd/main.m3u8\"],\"writers\":[\"田良良\",\"陈晨\"],\"translated_name\":\"三体 / Three-Body\",\"content_type\":\"video\",\"director\":\"杨磊\",\"genre\":\"剧情 / 科幻\",\"runtime\":\"\",\"title\":\"三体第2集\",\"cast\":[\"张鲁一\",\"于和伟\",\"陈瑾\",\"王子文\",\"林永健\",\"李小冉\",\"王传君\",\"张帆\",\"白客\",\"涂松岩\",\"刘敏\",\"寇振海\",\"杨蓉\",\"孔琳\",\"张峻宁\",\"柯南・何裴\",\"李则慧\",\"赵健\",\"何杜娟\",\"孔连顺\",\"韩青\",\"黎明明\",\"张铭恩\",\"朱戬\",\"郭靖宇\",\"江南\",\"蔡佳\",\"胡杰\",\"于洋\",\"侯鸿亮\",\"梁振华\",\"费振翔\",\"高亚麟\",\"季晨\",\"马东\",\"唐家三少\",\"白一骢\",\"杨磊\",\"贾士凯\",\"王薇\",\"王羽铮\",\"于歆玥\",\"潘晓莉\",\"蔡盈盈\"],\"content_id\":\"test_0522_series_02\",\"description\":\"2007 年,地球基础科学出现异常扰动,科学界人心惶惶,多名科学家离奇自杀。纳米科学家汪淼被警官史强带到联合作战中心,潜入 “科学边界” 组织协助调查。汪淼接触到名为 ETO 的组织,发现其幕后统帅是自杀身亡的科学家杨冬的母亲叶文洁。随着 ETO 与作战中心的不断博弈,汪淼和史强逐渐确定《三体》游戏中的世界真实存在。一切事件源于两个文明为生存空间展开的生死相逐。在联合作战中心及科学家们的共同努力下,汪淼、史强等人坚定信念,准备与即将入侵的三体人展开殊死斗争。\",\"douban_rating\":\"7.0\",\"parent_content_id\":\"test_0522_collection_01\",\"release_date\":\"2023-01-15 (中国大陆)\",\"year\":\"2023\"}",
         "VideoContent":{
             "Title":"物理规律崩塌下的科学危机与人性挣扎",
             "Summary":"科学家们在实验中发现五次撞击结果完全一致,质疑物理规律时空均匀性。杨冬实验数据异常引发物理学存在性危机,科学边界组织提出射手与农场主假说,暗示人类可能如同二维生物般受制于更高维度规律。汪淼卷入调查发现照片倒计时,实验室频现超自然现象,物理学崩溃的阴影下,角色们在学术信仰与生存危机间艰难抉择,倒计时的逼近加剧了悬疑氛围。",
             "Insight":"{\"Summaries\":[\"科学家们在实验中发现五次撞击结果完全一致,质疑物理规律时空均匀性。杨冬实验数据异常引发物理学存在性危机,科学边界组织提出射手与农场主假说,暗示人类可能如同二维生物般受制于更高维度规律。汪淼卷入调查发现照片倒计时,实验室频现超自然现象,物理学崩溃的阴影下,角色们在学术信仰与生存危机间艰难抉择,倒计时的逼近加剧了悬疑氛围。\"],\"Titles\":[\"物理规律崩塌下的科学危机与人性挣扎\"],\"Clips\":[{\"Title\":\"神秘许可证引出奇幻场景\",\"Summary\":\"视频开始显示了一张国产电视剧发行许可证,随后画面切换到一系列神秘的宇宙景象...\",\"Score\":3.5,\"Dialogue\":\"(沪)剧审字(2023)第001号。\",\"Start\":0.0,\"End\":83.0},{\"Title\":\"《三体》电视剧开场\",\"Summary\":\"画面中是深邃的宇宙星空背景,上面出现了‘三体’和‘THREE-BODY’的字样,同时显示该剧根据刘慈欣同名小说《三体》改编,这是《三体》电视剧的开场片头。\",\"Score\":1.0,\"Dialogue\":\"根据刘慈欣同名小说《三体》改编。\",\"Start\":2588.5,\"End\":2594.5}]}"
          },
          "CollectionContent":null
     }
}

解析

使用 Python 发起请求并进行解析示例

import hashlib
import hmac
import json
from datetime import datetime
from urllib.parse import parse_qsl, urlencode, urlparse

import pytz
import requests
from requests import PreparedRequest
from requests.auth import AuthBase

class OpenApiAuth(AuthBase):
    """火山引擎OpenAPI默认验证方式"""

    def __init__(
        self,
        access_key: str,
        secret_key: str,
        region: str,
        host: str,
        service_name: str,
    ) -> None:
        self.access_key = access_key
        self.secret_key = secret_key
        self.region = region
        self.host = host
        self.service_name = service_name

    def __call__(self, r: PreparedRequest):
        def sha256str(content: str | bytes) -> str:
            if content is None:
                content = ""
            if isinstance(content, str):
                content = content.encode("utf-8")
            return hashlib.sha256(content).hexdigest()

        def hmac_sha256(key: bytes, content: str) -> bytes:
            return hmac.new(key, content.encode("utf-8"), hashlib.sha256).digest()

        # 格式化时间
        now = datetime.now(tz=pytz.timezone("UTC"))
        timestr = now.strftime("%Y%m%dT%H%M%SZ")
        datestr = now.strftime("%Y%m%d")

        # headers
        # 去掉不用的header,方便看日志
        del r.headers["User-Agent"]
        del r.headers["Accept-Encoding"]
        del r.headers["Accept"]
        del r.headers["Connection"]
        del r.headers["Content-Length"]
        r.headers.update(
            {
                "X-Date": timestr,
                "Host": self.host,
            }
        )

        # 选择需要加入签名的header部分
        signed_headers = dict(
            filter(
                lambda x: x[0] in ["content-type", "content-md5", "host"]
                or x[0].startswith("x-"),
                r.headers.lower_items(),  # key小写
            )
        )

        # 80或443端口情况下host不带端口
        if "host" in signed_headers:
            parse_result = urlparse("//" + signed_headers["host"])
            host = parse_result.hostname
            port = parse_result.port
            if port in ["80", "443"]:
                signed_headers["host"] = host

        # header信息打包到一起
        signed_str = "".join([f"{k}:{v}\n" for k, v in sorted(signed_headers.items())])

        SignedHeaders = ";".join(sorted(signed_headers.keys()))

        scheme, netloc, path, params, query, fragment = urlparse(r.url)

        # 潜规则,query升序
        query = parse_qsl(query)
        query.sort()
        query = urlencode(query)

        # 1. 创建一个正规化请求
        canoncial_request = "\n".join(
            [r.method, path, query, signed_str, SignedHeaders, sha256str(r.body)]
        )

        # 2. 创建签名字符串
        credential_scope = "/".join(
            [datestr, self.region, self.service_name, "request"]
        )
        signing_str = "\n".join(
            ["HMAC-SHA256", timestr, credential_scope, sha256str(canoncial_request)]
        )

        # 3. 计算签名秘钥
        kdate = hmac_sha256(self.secret_key.encode("utf-8"), datestr)
        kregion = hmac_sha256(kdate, self.region)
        kservice = hmac_sha256(kregion, self.service_name)
        signing_key = hmac_sha256(kservice, "request")
        # 4. 计算签名
        Signature = hmac_sha256(signing_key, signing_str).hex()

        r.headers["Authorization"] = (
            f"HMAC-SHA256 Credential={self.access_key}/{credential_scope}, SignedHeaders={SignedHeaders}, Signature={Signature}"
        )
        return r
    
auth = OpenApiAuth(
    access_key="",  # 填写自己的access_key
    secret_key="",  # 填写自己的secret_key
    region="cn-beijing",
    host="open.volcengineapi.com",
    service_name="aisearch",
)

def GetDatasetDataAPI(dataset_id, content_id):
    payload = {"DatasetID": dataset_id, "ContentID": content_id}
    action = "GetDatasetDataAPI"
    resp = requests.post(
        f"http://open.volcengineapi.com/?Action={action}&Version=2025-03-01",
        json = payload,
        auth = auth,
    )

    text = resp.text
    text = json.loads(text)
    data = text["Result"]

    if isinstance(data, dict) and "Content" in data and isinstance(data["Content"], str):
        try:
            data["Content"] = json.loads(data["Content"])
            data["VideoContent"]["Insight"] = json.loads(
                data["VideoContent"]["Insight"]
            )
        except json.JSONDecodeError:
            print("Content字段不是有效的JSON字符串")

    # 保存data为json文件
    with open("data.json", "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    # 查看content_id详情
    GetDatasetDataAPI("106266573", "10009_2")