SparkAPI_v2.3.1.pages

Similar documents
SparkAPI_开发指南_v2.1.4.pages

SparkAPI_开发指南_v2.1.4.pages

SparkAPI_开发指南_v2.1.3

SparkAPI_v2.3.2.pages

SparkAPI_开发指南_v2.0.4

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

南華大學數位論文

Microsoft Word - 01.DOC

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

Guava学习之Resources

( Version 0.4 ) 1

1. 2. Flex Adobe 3.

「人名權威檔」資料庫欄位建置表

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

Microsoft Word - PHP7Ch01.docx

目录 1. 视频上传接口 ( 已集成在 SDK 中 ) 请求上传 web 端请求上传 上传 通知上传完成 取消上传 获取视频状态 获取视频信息

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

無障礙網頁開發規範二版(草案)

IP505SM_manual_cn.doc

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

untitled


CDWA Mapping. 22 Dublin Core Mapping

FileMaker 15 WebDirect 指南

2 Requirements Documentation Doc Name Doc No. 1.0 Version No. Total Page Generated By V6.0.0 Generated Date 2011/10/21 Checked By Checked Date 2011/10

1. 访 问 最 新 发 行 公 告 信 息 jconnect for JDBC 访 问 最 新 发 行 公 告 信 息 最 新 版 本 的 发 行 公 告 可 以 从 网 上 获 得 若 要 查 找 在 本 产 品 发 布 后 增 加 的 重 要 产 品 或 文 档 信 息, 请 访

PowerPoint プレゼンテーション

概述

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

2 SGML, XML Document Traditional WYSIWYG Document Content Presentation Content Presentation Structure Structure? XML/SGML 3 2 SGML SGML Standard Gener

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

RUN_PC連載_8_.doc

Microsoft Word 電腦軟體設計.doc

目 录 API 接 口..3 相 关 说 明...3 系 统 参 数 说 明..3 返 回 参 数 说 明...3 接 口 说 明...4 视 频 管 理 视 频 上 传 初 始 化 (Web 方 式 ) 4 2. 视 频 上 传 (Web 方 式 ) 4 3. 视 频 断 点 续 传

untitled

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

先生別耍我

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

基于ECO的UML模型驱动的数据库应用开发1.doc

Adobe AIR 安全性

JavaIO.PDF

2005 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD UNIX X/Open Company, Ltd. / Sun Sun Microsystems Su

Microsoft Word - Learn Objective-C.doc

13 根 据 各 种 网 络 商 务 信 息 对 不 同 用 户 所 产 生 的 使 用 效 用, 网 络 商 务 信 息 大 致 可 分 为 四 级, 其 中 占 比 重 最 大 的 是 ( A ) A 第 一 级 免 费 信 息 B 第 二 级 低 收 费 信 息 C 第 三 级 标 准 收 费

● 源起

通用短信平台HTTP接口使用说明V1.0.4

RxJava

epub 79-1

EJB-Programming-4-cn.doc

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

目录

我 们 再 看 到 尼 西 米 记, 也 会 发 现 当 时 神 的 百 姓 有 一 颗 单 纯 受 教 的 心, 他 们 单 纯 的 听 从 神 的 教 导, 敬 畏 遵 从 神 的 训 诲 当 他 们 明 白 自 己 的 罪 孽 时, 个 个 俯 伏 在 地, 为 罪 痛 悔 哭 泣 在 整 个

Chapter #

Microsoft Word - Functional_Notes_3.90_CN.doc

x MapReduce A Italic URL Constant width Constant width bold Constant width italic 這個圖示代表提示或建議 這個圖示代表一般註解

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

Converting image (bmp/jpg) file into binary format

静态分析 投放文件 行为分析 互斥量 (Mutexes) 执行的命令 创建的服务 启动的服务 进程 cmd.exe PID: 2520, 上一级进程 PID: 2556 cmd.exe PID: 2604, 上一级进程 PID: 2520 访问的文件 C:\Users\test\AppData\Lo

使用Cassandra和Spark 2.0实现Rest API服务

SiteView技术白皮书

基于CDIO一体化理念的课程教学大纲设计

untitled

AXIS P7224 Video Encoder Blade – Installation Guide

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

3.1 num = 3 ch = 'C' 2

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

Microsoft Word - 苹果脚本跟我学.doc

PlayerAPI_v1.0.5.pages

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

iGENUS爱琴思邮件系统技术白皮书

温州市政府分散采购


目 录 1. 前 言 为 什 么 要 用 ESB 技 术 发 展 业 务 需 求 IT 需 求 IT 与 业 务 一 致 性 要 求 TongIntegrator ESB v5 简 介..

面向学生的帮助

变 量 的 主 要 作 用 是 存 取 数 据 提 供 存 放 信 息 的 容 器 对 于 变 量 必 须 明 确 变 量 的 命 名 变 量 的 类 型 变 量 的 声 明 及 其 变 量 的 作 用 域 JavaScript 是 一 种 弱 类 型 语 言, 也 就 是 说, 在 声 明 变 量

FileMaker 16 ODBC 和 JDBC 指南

untitled

untitled

Bus Hound 5

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

谷, 你 一 定 会 更 敬 畏 上 帝 的 美 善 和 奇 妙, 不 过, 我 要 跟 你 分 享 一 件 能 与 之 媲 美 的 事, 这 是 发 生 在 印 度 贫 民 窟 当 中 的 见 证, 有 一 位 姐 妹, 一 年 前 她 从 未 听 说 过 基 督, 他 们 的 生 活 很 不 容

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更

Oracle 4

一.NETGEAR VPN防火墙产品介绍

Microsoft Word - ch02.doc

概述

EJB-Programming-3.PDF

QCon2015_Shanghai_XuLi

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

<4D F736F F D203120BBA5C1AACDF8BBF9B4A1B1EAD7BC2E646F63>

Fuzzy Highlight.ppt

四川省普通高等学校

1. ( B ) IT (A) (B) (C) (D) 2. ( A ) (A) (B) (C) (D) 3. ( B ) (A) GPS (B) GIS (C) ETC (D) CAI 4. ( D ) (A) (B) (C) (D) 5. ( B ) (Stored Program) (A) H

D C 93 2

Transcription:

Spark API 开发指南 Spark API 开发指南 北京梦之窗数码科技有限公司 版本 : 2.3.1 日期 : 2015-08-14

Spark API 开发指南 目录 1. 概述... 2 2. 通信约定... 2 2.1 HTTP 方法... 2 2.2 返回格式... 2 2.3 编码格式... 2 2.4 加密... 2 2.5 接 口访问次数限制... 2 3. HTTP 接 口... 3 3.1 获取 用户信息... 3 3.2 获取视频信息... 4 3.3 批量获取视频信息... 6 3.4 获取视频播放代码... 8 3.5 编辑视频信息... 9 3.6 删除视频... 10 3.7 获取视频分类... 11 3.8 搜索视频... 12 4. 视频 文件上传接 口... 14 4.1 Flash 视频上传... 14 4.2 HTTP 视频上传 ( 断点续传 )... 16 附录 1. HTTP 通信加密算法... 23 附录 2. Flash 和 JavaScript 交互 24

Spark API 开发指南 1. 概述 利 用 Spark API 可以与 CC 视频 Spark 云进 行对接, 使 用 Spark 云的主要视频功能 当前 Spark API 的版本具有上传 播放 获取视频信息 获取 用户信息 删除视频 获取视频分类等接 口 目前 Spark API 仅对合作 方开启, 如果您有使 用的需求, 请通过 CC 视频后台申请 API Key, 通过审核后才能使 用 Spark API 2. 通信约定 Spark API 的远程通信接 口基于 HTTP 协议, 并有以下约定 : 2.1 HTTP 方法 所有接 口采 用 GET 请求 2.2 返回格式 接 口的返回格式包括 XML 格式和 JSON 格式, 编码均为 UTF-8 对于不同的接 口, 正确的返回结果的格式会在每个接 口中单独定义, 错误的返回结果具有统 一的形式, 如下所 示 : <?xml version="1.0" encoding="utf-8"?> <error>error_code</error> { error : ERROR_CODE 实际中, 下表中的某 一个具体的错误码会替换掉上 面的 ERROR_CODE: 错误码 INVALID_REQUEST SPACE_NOT_ENOUGH SERVICE_EXPIRED PROCESS_FAIL TOO_MANY_REQUEST 用户输 入错误 用户剩余空间不 足 用户服务已经过期服务器处理失败访问过于频繁 PERMISSION_DENY 2.3 编码格式 Spark API 只接受 UTF-8 格式编码的信息, 返回的数据也都是 UTF-8 编码的 当需要通过 GET 请求传递时,QueryString 里 面的 value 值都需要进 行 URL Encode 之后, 再进 行传递 2.4 加密 所有的 HTTP 通信都是加密的, 加密的核 心思想是将原始的 QueryString 转换为和请求时间相关的 HashedQueryString, 我们称这个加密算法为 THQS 算法 关于 THQS 算法的细节请参 见附录 1 2.5 接 口访问次数限制 用户服务 无权限

Spark API 开发指南 当某 一个接 口的访问频率在 一分钟之内超过 100 次的时候, 该 用户的 API 功能将被禁 用, 之后所有请求都将失效 如果上述阈值 无法满 足您的正常需求的时候, 可以联系 CC 客服申请提升 API 的请求频率 3. HTTP 接 口 3.1 获取 用户信息 http://spark.bokecc.com/api/user 需要传递以下 : 通过该接 口可以获取指定 用户的账户信息, 地址为 : userid format 返回数据 user 包含如下字段 : account version expired space traffic space 包含如下字段 : total remain used traffic 包含如下字段 : total remain used XML 格式的返回信息如下 : 用户 id, 不可为空返回格式,xml 或 json 用户账户版本信息到期时间 用户空间信息 用户流量信息 用户空间总量, 单位 G 用户空间剩余总量, 单位 G 用户空间使 用总量, 单位 G 用户流量总量, 单位 G 用户剩余流量 大 小, 单位 G 用户已使 用流量 大 小, 单位 G

Spark API 开发指南 <?xml version="1.0" encoding="utf-8"?> <user> <account>test@test.com</account> <version><[cdata[ 试 用版 ]]></version> <expired>2011-06-06</expired> <space> <total>2</total> <remain>1.9</remain> <used>0.1</used> </space> <traffic> <total>5</total> <remain>4.8</remain> <used>0.2</used> </traffic> </user> JSON 格式的返回信息如下 : { "user":{ "account":"test@test.com", "version":" 试 用版 ", "expired":"2011-06-06", "space":{ "total":2, "remain":1.9, "used":0.1, "traffic":{ "total":5, "remain":4.8, "used":0.2 3.2 获取视频信息 http://spark.bokecc.com/api/video 需要传递以下 : 通过该接 口可以获取指定 用户的有效视频的信息, 地址为 : userid videoid format 返回数据 video 包括如下字段 : id title 用户 id, 不可为空视频 id, 不可为空返回格式,xml 或 json 视频 ID 视频标题

Spark API 开发指南 desp tags duration category image imageindex image-alternate image-alternate 包括如下字段 : index url XML 格式的返回信息如下 : 视频描述视频标签视频时 长, 单位秒视频分类 ID 视频截图地址视频截图序号视频截图排列信息视频截图排列序号视频截图地址 <?xml version="1.0" encoding="utf-8"?> <video> <id>01234567</id> <title><[cdata[ 视频标题 ]]></title> <desp><[cdata[ 视频描述 ]]></desp> <tags><[cdata[ 标签 1 标签 2 标签 3]]></tags> <duration>12345</duration> <category>12345</category> <image>http://image.bokecc.com/abc.jpg</image> <imageindex>1</imageindex> <image-alternate> <index>0</index> <url>http://image.bokecc.com/abc0.jpg</url> </image-alternate> <image-alternate> <index>1</index> <url>http://image.bokecc.com/abc1.jpg</url> </image-alternate>... </video> JSON 格式的返回信息如下 :

Spark API 开发指南 { "video":{ "id":"01234567", "title":" 视频标题 ", "desp":" 视频描述 ", "tags":" 标签 1 标签 2 标签 3", "duration":12345, "category":"12345", "image":"http://image.bokecc.com/abc.jpg", "imageindex":1, "image- alternate":[{ "index":0, "url":"http://image.bokecc.com/abc0.jpg",... ] 3.3 批量获取视频信息 http://spark.bokecc.com/api/videos 需要传递以下 : 通过该接 口可以获取指定 用户的 一批有效视频 ( 不包括删除 正在处理的视频 ) 的信息, 地址为 : userid videoid_from videoid_to 用户 id, 不可为空 起始 videoid, 若为空, 则从上传的第 一个视频开始 终 止 videoid, 若为空, 则到最后 一个上传的视频 num_per_page 返回信息时, 每 页包含的视频个数注 : 允许范围为 1~100 page 当前 页码 format 返回数据 videos 包含以下字段 : 返回格式,xml 或 json total video video 包含以下字段 : id title desp tags 返回视频数量视频信息视频 ID 视频标题视频描述视频标签

Spark API 开发指南 duration category image imageindex 视频时 长, 单位秒视频分类 ID 视频截图地址视频截图序号 image-alternate image-alternate 包含以下字段 : 视频截图排列信息 index url XML 格式的返回信息如下 : 视频截图排列序号 视频截图地址 <?xml version="1.0" encoding="utf-8"?> <videos> <total>100</total> <video> <id>01234567</id> <title><[cdata[video Title]]></title> <desp><[cdata[video Description]]></desp> <tags><[cdata[tag1 tag2 tag3]]></tags> <duration>12345</duration> <category>12345</category> <image>http://image.bokecc.com/abc.jpg</image> <imageindex>1</imageindex> <image-alternate> <index>0</index> <url>http://image.bokecc.com/abc0.jpg</url> </image-alternate> <image-alternate> <index>1</index> <url>http://image.bokecc.com/abc1.jpg</url> </image-alternate>... </video>... </videos> JSON 格式的返回信息如下 :

Spark API 开发指南 { "videos":{ "total":100, "video":[ { "id":"01234567", "title":"video Title", "desp":"video Description", "tags":"tag1 tag2 tag3", "duration":12345, "category":"12345", "image":"http://image.bokecc.com/abc.jpg", "imageindex":1, "image-alternate":[ { "index":0, "url":"http://image.bokecc.com/abc0.jpg", ], ] 3.4 获取视频播放代码 f 通过该接 口可以获取指定视频的视频播放 HTML 代码段, 地址为 : http://spark.bokecc.com/api/video/playcode 需要传递以下 : videoid userid playerid player_width player_height auto_play 视频 id, 不可为空 用户 id, 不可为空播放器 id, 若为空则返回默认播放器播放器宽度, 单位 px 播放器 高度, 单位 px 是否 自动播放,true 或 false format 返回数据 video 包含以下字段 : playcode XML 格式的返回信息如下 : 返回格式,xml 或 json 嵌 入 网 页的播放代码

Spark API 开发指南 <?xml version="1.0" encoding="utf-8"?> <video> <playcode> <[CDATA[<script src='http://p.bokecc.com/player? vid=96479767c315e6a9&siteid=1936d297411c3a27&autostart=false&width=600&height=490&playerid =6ED7421AB96B522E&playertype=1' type='text/javascript'></script>]]> </playcode> </video> JSON 格式的返回信息如下 : { "video":{ "playcode":"<script src='http://p.bokecc.com/player? vid=96479767c315e6a9&siteid=1936d297411c3a27&autostart=false&width=600&height=490&playerid =6ED7421AB96B522E&playertype=1 type='text/javascript'></script>" 3.5 编辑视频信息 http://spark.bokecc.com/api/video/update 需要传递以下 : 通过该接 口可以编辑指定视频的信息, 地址为 : videoid userid title tag description categoryid playurl 视频 id, 不可为空 用户 id, 不可为空视频标题视频标签视频描述视频 子分类 id 视频播放 页 面地址, 如果不编辑播放地址, 请勿加 入此 imageindex 视频封 面截图序号, 如果不编辑封 面截图, 请勿加 入此 注 : 只可编辑正常可播放状态的视频截图 format 返回数据 video 包含如下字段 : id title desp tags 返回格式,xml 或 json 视频 ID 视频标题视频描述视频标签

Spark API 开发指南 category playurl imageindex XML 格式的返回信息如下 : 视频分类 ID 视频播放 页 面地址 视频截图序号 <?xml version="1.0" encoding="utf-8"?> <video> <id>01234567</id> <title><[cdata[video Title]]></title> <desp><[cdata[video Description]]></desp> <tags><[cdata[tag1 tag2 tag3]]></tags> <category>12345</category> <playurl>http://xxxx/1.html</playurl> <imageindex>1</imageindex> </video> JSON 格式的返回信息如下 : { "video":{ "id":"01234567", "title":"video Title", "desp":"video Description", "tags":"tag1 tag2 tag3", "category":"12345", "playurl":"http://xxxx/1.html", "imageindex":1 3.6 删除视频 http://spark.bokecc.com/api/video/delete 需要传递以下 : 通过该接 口可以删除指定视频的信息, 地址为 : videoid userid format XML 格式的返回信息如下 : 视频 id, 不可为空 用户 id, 不可为空 返回格式,xml 或 json <?xml version="1.0" encoding="utf-8"?> <result>ok</result> JSON 格式的返回信息如下 :

Spark API 开发指南 { "result":"ok" 3.7 获取视频分类 http://spark.bokecc.com/api/video/category 需要传递以下 : 通过该接 口可以获取指定 用户创建的全部视频分类, 地址为 : userid 用户 id, 不可为空 format 返回格式,xml 或 json 注 : 返回结果中的 level 包括 BASIC 和 PREMIUM,BASIC 中只包含 一个默认 父分类, 无法创建 自定义 父分类, PREMIUM 版本中包含 用户创建的 父分类 返回数据 video 包含如下字段 : level category category 包含如下字段 : id name sub-category sub-category 包含如下字段 : id name XML 格式的返回信息如下 : 视频分类等级视频分类信息分类 ID 分类名称 子分类信息 子分类 ID 子分类名称

Spark API 开发指南 <?xml version="1.0" encoding="utf-8"?> <video> <level>basic</level> <category> <id>123</id> <name><[cdata[category1]]></name> <sub-category> <id>456</id> <name><[cdata[sub category1]]></name> <sub-category>... </category>... </video> JSON 格式的返回信息如下 : { "video":{ "level":"premium", "category":[{ "id":123, "name":"category1", "sub-category":[{ "id":456, "name":"sub category1",... ],... ] 3.8 搜索视频 http://spark.bokecc.com/api/videos/search 需要传递以下 : 通过该接 口可以搜索指定信息的视频, 地址为 : userid 用户 id, 不可为空 q 查询条件, 不可为空 格式 : 查询字段 : 查询内容 查询字段 : 目前只 支持 TITLE 查询内容 : 查询关键字 注 : 格式中的 : 为英 文半 角 Example:q=TITLE:test

Spark API 开发指南 sort 查询结果排序, 不可为空 格式 : 排序字段 : 排序 方式 排序字段 :CREATION_DATE 或 FILE_SIZE 排序 方式 :ASC 或 DESC 注 : 格式中的 : 为英 文半 角 Example:sort=CREATION_DATE:DESC categoryid 视频 子分类 id, 如果不查询指定分类下的视频, 请勿加 入此 num_per_page 返回信息时, 每 页包含的视频个数注 : 阈值为 1~100 page 当前 页码 format 返回数据 videos 包含如下字段 : 返回格式,xml 或 json total video video 包含如下字段 : id title desp tags duration category creation-date filesize image XML 格式的返回信息如下 : 返回视频数量视频信息视频 ID 视频标题视频描述视频标签视频时 长, 单位秒视频分类 ID 视频创建时间视频 文件 大 小, 单位字节视频截图地址

Spark API 开发指南 <?xml version="1.0" encoding="utf-8"?> <videos> <total>100</total> <video> <id>01234567</id> <title><[cdata[video Title]]></title> <desp><[cdata[video Description]]></desp> <tags><[cdata[tag1 tag2 tag3]]></tags> <duration>12345</duration> <category>12345</category> <creation-date>2012-10-29 15:16:50</creation-date> <filesize>4174340</filesize> <image>http://image.bokecc.com/abc.jpg</image>... </video>... </videos> JSON 格式的返回信息如下 : 4. 视频 文件上传接 口 4.1 Flash 视频上传 Spark API 中所有的 Flash 接 口需要 Flash 插件的版本在 10.1 以上才有效, 使 用前请确保 Flash 插件版本符合要求 在上传视频的过程中, 不 用与 Spark 平台进 行 HTTP 通信, 使 用 JavaScript 和 Spark 平台提供的 Flash 进 行交互即可完成 关于如何在 网 页中嵌 入 Flash 以及如何和 Flash 进 行交互, 请参阅附录 2 上传接 口 用到的所有 JavaScript 函数定义 见下表 : { "videos":{ "total":100, "video":[ { "id":"01234567", "title":"video Title", "desp":"video Description", "tags":"tag1 tag2 tag3", "duration":12345, "category":"12345", "creation-date":"2012-10-29 15:16:50", "filesize":4174340, "image":"http://image.bokecc.com/abc.jpg", ] 函数定义 on_spark_selected_file(file_name, file_size) file_name: 上传 文件名 file_size: 上传的 文件 大 小, 单位字节

Spark API 开发指南 函数定义 on_spark_upload_validated(status, videoid) status: 验证结果 videoid: 视频 id on_spark_upload_progress(progress) 网 页嵌 入 Spark 平台提供的上传 Flash 时, 需要传递下列 : Flash (flashvars) progress: 上传进度 正确时,0~100 之间的整数, 包括 0 和 100; 错误时, 返回 -1. progress_interval 回调进度函数的时间间隔, 默认 1 秒 notify_url 上传 文件的过程 一共分为四步 : 第 一步, 选择 文件 http://p.bokecc.com/flash/api/uploader.swf Spark 平台提供 一个透明的 Flash 进 行 文件上传, 地址如下 : 由于它是透明的, 所以可以置于任何 一个 HTML 元素的上 方 而不影响的 页 面视觉效果 上传 文件时, 必须通过点击到该 Flash 从 而打开浏览对话框进 行 文件选择 文件选择成功后,Flash 会调 用 页 面中的 on_spark_selected_file 函数, 页 面可以选择合适的 方式处理该事件 第 二步, 验证 当 用户选择 文件后, 需将下 面的按照 THQS 算法处理后传递给 Flash 的 start_upload 函数后, 才能开始上传流程 首先要进 行和权限的验证, 通过后才开始 文件上传 视频处理完毕后的通知地址 userid title description tag 用户 id, 不可为空视频标题, 若为空, 则采 用去后缀 文件名作为 title 视频简介, 可以为空视频标签, 可以为空 categoryid 视频 子分类 id, 可选 验证完成后,Flash 会调 用 on_spark_upload_validated 函数传递验证结果以及视频 id 验证状态码的含义如下 : 验证状态码 OK NETWORK_ERROR 其它 第三步, 文件上传 成功 网络错误 Spark API 错误码

Spark API 开发指南 文件开始上传后,Flash 会周期性调 用 on_spark_upload_progress 函数来报告上传进度, 间隔秒数由 progress_interval 指定 如果上传的进度为负数, 则发 生 网络错误, 上传中断 返回 100 则表 示上传成功 当返回 100 或者 -1 后,Flash 就不再调 用该函数了 第四步, 回调 当处理完毕视频后 ( 上传 转码 审核都完成后 ),Spark 平台会通过由 notify_url 指定的 HTTP/HTTPS 地址以 GET 方式发起回调 若 用户 网站地址使 用HTTPS 协议进 行数据安全传输时, 用户需保证其拥有的 CA 证书是合法的 用户指定的 notify_url 符合以下四种 notify_url 格式之 一即为合法 : 1 http://domain 2 http://domain?data=****(data 为 用户 自定义的 ) 3 https://domain 4 https://domain?data=**** 若 notify_url 中携带有 用户 自定义的, 则在进 行回调通知时会将 用户 自定义的和下表中的 一起以 THQS 方式进 行加密 videoid status 视频 id,16 位 hex 字符串 视频状态 OK 表 示视频处理成功, FAIL 表 示视频处理失败 视频处理失败有多种情况, 例如视频 文件异常 视频内容违规等等 <?xml version="1.0" encoding="utf-8"?> <result>ok</result> 当 notify_url 指定的接 口返回上述 XML 时,Spark 平台会认为 网站已经成功接收到了回调信息, 不再进 行重试 返回其它任何内容,Spark 平台会进 行回调重试, 重试的间隔会随着重试次数的增 大 而增 大 若重试 7 次后, 依然没有成功, 则不再进 行通知 因此,Spark 平台最多通知 8 次 这 8 次的通知时间距第 一次的通知时间的差分别为 : duration 片 长 ( 单位 : 秒 ) image [0,15s, 1m, 4m, 16m, 1h4m, 4h16m, 17h4m] 4.2 HTTP 视频上传 ( 断点续传 ) 此段 文档 用于指导使 用 CC 视频云平台 HTTP_API 接 口编码来完成上传视频 文件功能 userid 用户 CC 视频云平台账号 ccvid 或 vid 用户视频 文件 ID CC 视频云平台指定 apikey 用户 CC 视频云平台 API 的密钥 key 使 用步骤 视频截图地址 1 用户调 用创建视频上传信息返回数据, 并提取 vid,metaurl,chunkurl 等返回数据 2 用户调 用上传视频 META 信息 (metaurl) 将 文件描述等信息发送到服务器 3 用户反复调 用上传视频 文件块 CHUNK(chunkurl) 将 文件实际数据发送到服务器直到全部发完 4 如果调 用上传视频 文件块 CHUNK(chunkurl) 中间出现中断, 可使 用断点续传 方式上传视频 META 信息 (metaurl) 获取已发 文件 长度后继续调 用上传视频 文件块 CHUNK(chunkurl) 将 文件发送完成

Spark API 开发指南 流程图 1 创建视频上传信息 通过该接 口获取视频 VID, 上传 URL 等信息 此接 口为后续调 用提供 需使 用 THQS 算法将处理 http://spark.bokecc.com/api/video/create 需要传递以下 : 含义 userid title tag 用户 id, 不可为空 视频标题 视频标签

Spark API 开发指南 含义 description 视频描述 categoryid 二级分类 id( 主账号可选, 子帐号不可为空 ) filename filesize notify_url 视频 文件名 视频 文件 大 小 视频处理完毕的通知地址 format 返回信息,xml 格式如下 : 返回信息,json 格式如下 : 异常返回格式 XML 格式 返回格式 : 包含 xml 和 json <?xml version="1.0" encoding="utf-8"?> <uploadinfo> <videoid>3b35ed608474b8db2bb</videoid> <userid>40ef004a6f1</userid> <servicetype>240593f08</servicetype> <metaurl><[cdata[http://abc.com/servlet/uploadmeta]]></metaurl> <chunkurl><[cdata[http://abc.com/servlet/uploadchunk]]> </chunkurl> </uploadinfo> { "uploadinfo": { "videoid": "3B35ED608474B8DB2BBA", "userid": 40EF004A6F", "servicetype": 240593F089", "metaurl": http://abc.com/servlet/uploadmeta", "chunkurl": "http://abc.com/servlet/uploadchunk" <? xml version="1.0" encoding="utf-8"?> <error>service_expired</error> JSON 格式 { "error":" SERVICE_EXPIRED " 错误码的定义如下表 : 错误码 含义 INVALID_REQUEST SPACE_NOT_ENOUGH 用户输 入错误 用户剩余空间不 足

Spark API 开发指南 错误码 含义 SERVICE_EXPIRED PROCESS_FAIL TOO_MANY_REQUEST 用户服务终 止 服务器处理失败 访问过于频繁 PERMISSION_DENY 2 上传视频 META 信息 http://*.bokecc.com/servlet/uploadmeta 需要传递以下 : 通过以下接 口可以发送视频 文件到平台接收服务器 : 用户服务 无权限 含义 uid 用户 id, 不可为空断点续传请求时为可选 ccvid 视频 文件 vid 不可为空 返回信息, 内容统 一 含义如下 result 结果成功 (0) 失败 (-1) msg 消息信息错误描述 received 已接收 文件 长度范围 0 到 文件 大 小 xml 格式如下 : first 是否 首次 first=1 表 示 首次 断点续传为 非 首次 first=2 filename 视频名称断点续传请求时为可选 md5 视频 文件 md5 断点续传请求时为可选 filesize 视频 文件 大 小单位 Byte 断点续传请求时为可选 servicetype servicetype 来源于创建视频上传信息接 口 断点续传请求时为可选 format <?xml version="1.0" encoding="utf-8"?> <root> <result>0</result> <msg>success</msg> <received>0</received> </root> 返回信息,json 格式如下 : 返回格式 : 包含 xml 和 json 可选不选默认 json 返回

Spark API 开发指南 异常返回格式 xml 格式如下 : 返回信息,json 格式如下 : 3 上传视频 文件块 CHUNK { "result": 0, "msg": success", "received": 0 <?xml version="1.0" encoding="utf-8"?> <root> <result>-1</result> <msg> 文件写 入错误 </msg> <received>-1</received> </root> { "result": -1, "msg": 文件写 入错误 ", "received": -1 http://*.bokecc.com/servlet/uploadchunk 需要传递以下 : 含义 ccvid vid, 视频 id 不可为空 format 返回信息, 内容统 一 含义如下 result 结果成功 (0) 失败 (-1) msg 消息信息错误描述 received 已接收 文件 长度范围 0 到 文件 大 小 xml 格式如下 : 返回格式 : 包含 xml 和 json 可选不选默认 json 返回

Spark API 开发指南 <?xml version="1.0" encoding="utf-8"?> <root> <result>0</result> <msg>success</msg> <received>3413432</received> </root> 返回信息,json 格式如下 : 异常返回格式 xml 格式如下 : 返回信息,json 格式如下 : { "result": 0, "msg": success", "received": "412432" <?xml version="1.0" encoding="utf-8"?> <root> <result>-1</result> <msg> 文件写 入错误 </msg> <received>-1</received> </root> { "result": -1, "msg": 文件写 入错误 ", "received": -1" 此接 口使 用 POST 方式将实际 文件的指定部分 二进制数据发送到服务器, 服务器会返回已接收到的实际 文件 长度, 当服务器返回 文件 长度等于发送 文件 长度时即 文件已发送完成 POST 协议详解 示例 HTTP 协议需要 用户修改 header 中 Content-Range 内容 Content-Range: bytes x-y/z x 表 示该段数据在 文件中的开始位置 == 上次请求返回 received 数值 y 表 示该段数据在 文件中的结束位置 z 表 示 文件总 长度 提醒 :y 表 示 文件索引下标位置, 所以有 y <= z - 1 (binary) 部分为 文件部分块 二进制内容 ##### 报 文格式 POST /servlet/uploadchunk HTTP/1.1

Spark API 开发指南 Accept: text/* Content-Type:multipart/form-data; boundary=----------ij5gi3gi3ei4gi3ei4km7gi3km7km7 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) Host: www.example.com Content-Length: 421 Connection: Keep-Alive Cache-Control: no-cache Content-Range: bytes 0-100/500 ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data;name="file";filename="myfile.jpg" Content-Type: application/octet-stream (binary) ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7-- 示例代码 Java 版本代码 上传视频 文件块 CHUNK 接 口 3 示例代码 /* url 为 /servlet/uploadchunk?ccvid=&format= */ /* chunkstart 为 chunk 起始位置 */ /* chunkend 为 chunk 结束位置 */ /* file 为 文件 */ /* bufferout 为实际 文件输出 二进制内容 */ public String uploadchunk(string url, int chunkstart, int chunkend, File file, byte[] bufferout) { HttpURLConnection conn = null; try { String BOUNDARY = "---------CCHTTPAPIFormBoundaryEEXX" + new Random().nextInt(65536); // 定义数据分隔线 URL openurl = new URL(url); conn = (HttpURLConnection)openUrl.openConnection(); // 发送 POST 请求必须设置如下两 行 conn.setdooutput(true); conn.setdoinput(true); conn.setusecaches(false); conn.setrequestmethod("post"); conn.setrequestproperty("connection", "Keep-Alive"); conn.setrequestproperty("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4)"); conn.setrequestproperty("charsert", "UTF-8"); conn.setrequestproperty("content-type", "multipart/form-data; boundary=" + BOUNDARY); // content-range conn.setrequestproperty("content-range", "bytes " + chunkstart + "-" + chunkend + "/" + file.length()); OutputStream out = new DataOutputStream(conn.getOutputStream()); StringBuilder sb = new StringBuilder(); sb.append("--").append(boundary).append("\r\n"); sb.append("content-disposition: form-data;name=\"file" + file.getname() + "\";filename=\"" + file.getname() + "\"\r\n"); sb.append("content-type: application/octet-stream\r\n"); sb.append("\r\n"); byte[] data = sb.tostring().getbytes(); out.write(data); out.write(bufferout);

Spark API 开发指南 out.write("\r\n".getbytes()); // 定义最后数据分隔线 byte[] end_data = ("--" + BOUNDARY + "--\r\n").getbytes(); out.write(end_data); out.flush(); out.close(); // 定义 BufferedReader 输 入流来读取 URL 的响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer resultbuf = new StringBuffer(""); String line = null; while ((line = reader.readline()) = null) { resultbuf.append(line); reader.close(); conn.disconnect(); return resultbuf.tostring(); catch (Exception e) { System.out.println(" 发送 POST 请求出现异常 " + e); e.printstacktrace(); finally { if (conn = null) conn.disconnect(); return null; 附录 1. HTTP 通信加密算法 当需要和 Spark 平台进 行 HTTP 通信时, 需要将原始的 Query String 转换为和请求时刻相关的 Hashed Query String 后再通过 GET 方法请求 Spark API 为了描述的 方便, 我们将 Query String 转换为 Hashed Query String 的算法称为 THQS 算法 在描述详细的算法流程之前, 我们先介绍 一下 Unix 时间戳的概念 Unix 时间戳, 即该时间到 1970 年 1 月 1 日 (UTC/GMT 的午夜 ) 之间的秒数 例如, 北京时间 2010 年 12 月 9 日 15 点 23 分 12 秒的 Unix 时间戳为 1291879392 THQS 算法 假设原来的 QueryString 为 q, 通过以下 4 个步骤, 即可得到最终 用于通信的 HashedQueryString: 1. 对于 q 中的每个键值对按照键的字 母顺序升序排序, 得到排序后的请求字符串 qs; 2. 加 入当前时间的 Unix 时间戳和 Spark 平台帐号对应的 API Key 值, 得到散列前的字符串 qf: qf qs&time=12345&salt=asdf1234 3. 计算得到 qf 的 md5 值, 假设为 abcdefg hash md5(qf) 4. 最终的 HashedQueryString 为 : hqs qs&time=12345&hash=abcdefg 用 hqs 代替 q 进 行 Http 通信 下 面举 一个例 子计算过程 假设 用户从 Spark 获取到的 API Key 值是 asdf1234, 当前时间为 2010 年 12 月 9 日 15 点 23 分 12 秒, 原始的 QueryString 是 name=harry&level=top&salary=1000

Spark API 开发指南 第 一步, 将上述 QueryString 按照字 母顺序进 行升序排序, 结果是 level=top&name=harry&salary=1000 第 二步, 附加 time 值和 salt 值, 得到取 hash 前的字符串 level=top&name=harry&salary=1000&time=1291879392&salt=asdf1234 第三步, 对上述字符串取 md5 值 hash=bf04a55b30cff562f7add9f054ab7ffb 因此, 最终进 行 Http 通信的字符串为 level=top&name=harry&salary=1000&time=1291879392&hash=bf04a55b30cff562f7add9f054ab7ffb 附录 2. Flash 和 JavaScript 交互 Spark 平台的通信模式中, 有若干种 方式需要通过与 页 面中嵌 入的 Flash 交互完成 Flash 和 页 面有多种 方式可以交互, 为了保证 Spark 平台提供的 Flash 能够在各种环境下都能正常 工作, 推荐采 用以下 方式进 行处理 首先, 需要 用将 swf 文件嵌 入到 网 页中, 推荐采 用 swfobject 1.5 版本 将 swfobject.js 添加到 网 页中后, 用以下 js 语句将 swf 嵌 入到 网 页中, <script type="text/javascript"> var swfobj=new SWFObject('http://xxx/xx.swf', 'swfname', '80', '80', '8'); swfobj.addvariable('title','test'); swfobj.addvariable('number', 123); swfobj.addparam('allowfullscreen','true'); swfobj.addparam('allowscriptaccess','always'); swfobj.addparam('wmode','transparent'); swfobj.write('divid'); </script> 其次, 调 用 Flash 中的函数的时候, 如果 Flash 提供的函数名叫 func, 而需要传递的是 param 的话, 那么下 面这句就可以调 用该函数 swfname["func"](param); 其中,swfname 是嵌 入 Flash 的 id 值