├── README.md ├── parse-safe.php └── parse.php /README.md: -------------------------------------------------------------------------------- 1 | # Videoparse短视频解析接口文档 2 | 3 | ## Videoparse(https://www.videoparse.cn) 短视频解析接口已支持:抖音、快手、小红书、西瓜视频、今日头条、微视、火山小视频、陌陌视频、映客视频、小咖秀、开眼、全民小视频、全民K歌、最右、小影、微博、美拍、皮皮虾等平台的短视频去水印解析API接口 4 | 5 | 6 | ### 一. 解析短视频接口 7 | **URL:https://api-sv.videoparse.cn/api/video/normalParse** 8 | **请求方式:GET/POST** 9 | **请求参数:** 10 | 11 | |字段|类型|必填|备注|赋值| 12 | |---|---|---|---|---| 13 | | appid | string | Y | appid |开发者后台生成的appid| 14 | | appsecret | string | Y | appsecret |开发者后台生成的appsecret| 15 | | url | string | Y | 要解析的短视频地址 | 16 | 17 | **返回结果:** 18 | 19 | **成功:** 20 | 21 | {"code":0,"msg":"success","body":{"source":"douyin","url":"http:\/\/v.douyin.com\/2duavD\/","title":"\u767e\u5c81\u5c71\u4e3a\u4ec0\u4e48\u79f0\u4e3a\u6c34\u4e2d\u8d35\u65cf \u89c6\u9891\u5bfb\u627e\u7b54\u6848@\u6296\u97f3\u5c0f\u52a9\u624b","cover_url":"https:\/\/p1.pstatp.com\/large\/1bda8000852aa26656c12.jpg","video_url":"http:\/\/v6-dy.ixigua.com\/2c3a7f072b949101ceac0d465b35ef82\/5ca88513\/video\/m\/2203c9cfb2a446e4c99bb6b34927f3e875911619893d00005d48e8bf9a57\/?rc=am13aWg5bnlobDMzN2kzM0ApQHRAbzM2NzU1ODkzNDo1Ojk3PDNAKXUpQGczdylAZmxkamV6aGhkZjs0QDVecWBkb15pLV8tLWItL3NzLW8jbyM2LzYtLi0uLS0yMi4tLS4vaTpiLW8jOmAtbyNtbCtiK2p0OiMvLl4=","video_key":"ZRGO3V1JNKJ270QWE5"}} 22 | 23 | 24 | **失败:** 25 | 26 | {"code":10001,"msg":"parameter lost","body":[]} 27 | 28 | **返回字段注释** 29 | 30 | |字段名|注释|备注| 31 | |---|---|---| 32 | |code|错误码|错误码:请参考错误码说明| 33 | |msg|错误信息|错误码:请参考错误码说明| 34 | |body||| 35 | |source|解析视频来源|如:douyin、kuaishou| 36 | |url|开发者请求的url|| 37 | |title|短视频标题|| 38 | |cover_url|短视频封面|| 39 | |video_url|无水印的视频地址|此地址有有效期限制,不可作为永久存储| 40 | 41 | PHP EXAMPLE: 42 | 43 | //开发者后台生成的appid 44 | $appId = ''; 45 | 46 | //开发者后台生成的appsecret 47 | $appSecret = ''; 48 | 49 | //需要解析的url 50 | $url = ''; 51 | 52 | $param = [ 53 | 'appid' => $appId, 54 | 'appsecret' => $appSecret, 55 | 'url' => $url, 56 | ]; 57 | 58 | //得到请求的地址:https://api-sv.videoparse.cn/api/video/normalParse?appid=2m3Ju99MPXrNtkgH&appsecret=bNG3JYjT83qp4cib&url=http%3A%2F%2Fv.douyin.com%2Fa2X5ab%2F 59 | $apiUrl = 'https://api-sv.videoparse.cn/api/video/normalParse?'.http_build_query($param); 60 | $videoInfo = file_get_contents($apiUrl); 61 | print_r($videoInfo); 62 | 63 | ### 二. 解析短视频接口 - 安全版 64 | **URL:https://api-sv.videoparse.cn/api/video/parse** 65 | **请求方式:GET/POST** 66 | **请求参数:** 67 | 68 | |字段|类型|必填|备注|赋值| 69 | |---|---|---|---|---| 70 | | appid | string | Y | appid |开发者后台生成的appid| 71 | | url | string | Y | 要解析的短视频地址 | 72 | | timestamp | string | Y | 时间戳 | 秒数时间戳 | 73 | | sign | string | Y | 参数签名 | 通过签名算法生成(部分语言如:c#,md5后得到的是大写的字符串,需将每次md5加密后的字符串转换为小写) | 74 | 75 | **签名算法验证 签名验证** 76 | 77 | 签名算法: 78 | 79 | 假设传入的参数如下: 80 | appid: 26jJu99MPXrNtkgH 81 | url: http://v.douyin.com/2duavD/ 82 | timestamp:1546766273 83 | appsecret: mtUjY1z2D7TiZDqb 84 | 85 | 注意:部分语言(例如:c#),字符串通过md5加密后,得到的为大写的字符串,请将每次md5加密后得到的字符串转换为小写 86 | 87 | 签名步骤如下: 88 | 89 | 第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下(格式为:appid=appid&timestamp=秒级时间戳&url=编码后的短视频地址,注意:需要先对传入url值进行编码): 90 | stringA="appid=26jJu99MPXrNtkgH&timestamp=1546766273&url=http%3A%2F%2Fv.douyin.com%2F2duavD%2F" 91 | 92 | 第二步:将stringA进行MD5加密,然后从第6位开始,截取18位,拼接上API密钥,成为新的字符串stringB: 93 | stringB=substr(md5(stringA), 6, 18).appsecret // 得到:439cb914566659b146mtUjY1z2D7TiZDqb 94 | 95 | 第三步:将stringB进行MD5加密后,从10位开始,截取16位,得到最终的签名字符串sign: 96 | sign = substr(md5(stringB), 10, 16) 97 | 98 | 得到结果: 99 | a22919cc4d9eafce 100 | 101 | PHP 实现的签名算法代码: 102 | 103 | function sign($appId, $appSecret, $url, $timestamp) { 104 | $param = [ 105 | 'appid' => $appId, 106 | 'url' => $url, 107 | 'timestamp' => $timestamp, 108 | ]; 109 | ksort($param); 110 | return substr(md5(substr(md5(http_build_query($param)), 6, 18) . $appSecret), 10, 16); 111 | } 112 | 113 | 114 | **返回结果:** 115 | 116 | **成功:** 117 | 118 | {"code":0,"msg":"success","body":{"source":"douyin","url":"http:\/\/v.douyin.com\/2duavD\/","title":"\u767e\u5c81\u5c71\u4e3a\u4ec0\u4e48\u79f0\u4e3a\u6c34\u4e2d\u8d35\u65cf \u89c6\u9891\u5bfb\u627e\u7b54\u6848@\u6296\u97f3\u5c0f\u52a9\u624b","cover_url":"https:\/\/p1.pstatp.com\/large\/1bda8000852aa26656c12.jpg","video_url":"http:\/\/v6-dy.ixigua.com\/2c3a7f072b949101ceac0d465b35ef82\/5ca88513\/video\/m\/2203c9cfb2a446e4c99bb6b34927f3e875911619893d00005d48e8bf9a57\/?rc=am13aWg5bnlobDMzN2kzM0ApQHRAbzM2NzU1ODkzNDo1Ojk3PDNAKXUpQGczdylAZmxkamV6aGhkZjs0QDVecWBkb15pLV8tLWItL3NzLW8jbyM2LzYtLi0uLS0yMi4tLS4vaTpiLW8jOmAtbyNtbCtiK2p0OiMvLl4=","video_key":"ZRGO3V1JNKJ270QWE5"}} 119 | 120 | 121 | **失败:** 122 | 123 | {"code":10001,"msg":"parameter lost","body":[]} 124 | 125 | **返回字段注释** 126 | 127 | |字段名|注释|备注| 128 | |---|---|---| 129 | |code|错误码|错误码:请参考错误码说明| 130 | |msg|错误信息|错误码:请参考错误码说明| 131 | |body||| 132 | |source|解析视频来源|如:douyin、kuaishou| 133 | |url|开发者请求的url|| 134 | |title|短视频标题|| 135 | |cover_url|短视频封面|| 136 | |video_url|无水印的视频地址|此地址有有效期限制,不可作为永久存储| 137 | 138 | PHP EXAMPLE: 139 | 140 | function curlPost( $url = '', $data ) { 141 | $ch = curl_init(); 142 | curl_setopt($ch, CURLOPT_URL, $url ); 143 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 144 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); //部分环境下,需要将参数值设为2,即:curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 145 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 146 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 147 | curl_setopt($ch, CURLOPT_TIMEOUT, 10); 148 | curl_setopt($ch, CURLOPT_POST, 1); 149 | curl_setopt($ch, CURLOPT_HEADER, 0); 150 | curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 151 | $response = curl_exec( $ch ); 152 | curl_close ( $ch ); 153 | 154 | return $response; 155 | } 156 | 157 | function sign($appId, $appSecret, $url, $timestamp) { 158 | $param = [ 159 | 'appid' => $appId, 160 | 'url' => $url, 161 | 'timestamp' => $timestamp, 162 | ]; 163 | ksort($param); 164 | return substr(md5(substr(md5(http_build_query($param)), 6, 18) . $appSecret), 10, 16); 165 | } 166 | 167 | //开发者后台生成的appid 168 | $appId = ''; 169 | 170 | //开发者后台生成的appsecret 171 | $appSecret = ''; 172 | 173 | //需要解析的url 174 | $url = ''; 175 | 176 | //时间戳 177 | $timestamp = time(); 178 | 179 | //生成签名 180 | $sign = sign($appId, $appSecret, $url, $timestamp); 181 | 182 | //curl post请求接口解析短视频 183 | $param = [ 184 | 'appid' => $appId, 185 | 'url' => $url, 186 | 'timestamp' => $timestamp, 187 | 'sign' => $sign, 188 | ]; 189 | 190 | $apiUrl = 'https://api-sv.videoparse.cn/api/video/parse'; 191 | $videoInfo = curlPost($apiUrl, $param); 192 | print_r($videoInfo); 193 | 194 | ### 三. 获取开发者信息接口 195 | **URL:https://api-sv.videoparse.cn/api/user/getInfo** 196 | **请求方式:GET/POST** 197 | **请求参数:** 198 | 199 | |字段|类型|必填|备注|赋值| 200 | |---|---|---|---|---| 201 | | appid | string | Y | appid |开发者后台生成的appid| 202 | 203 | **返回结果:** 204 | 205 | **成功:** 206 | 207 | {"code":0,"msg":"success","body":{"username":"test","appid":"2m3Ju99MPXrNtkgH","end_time":"1525931778","wallet":"100"}} 208 | 209 | **失败:** 210 | 211 | {"code":10001,"msg":"parameter lost","body":[]} 212 | 213 | 返回字段注释 214 | 215 | |字段名|注释|备注| 216 | |---|---|---| 217 | |code|错误码|错误码:请参考错误码说明| 218 | |msg|错误信息|错误码:请参考错误码说明| 219 | |body||| 220 | |username|开发用户名|| 221 | |appid|appid|| 222 | |end_time|vip到期时间|| 223 | |wallet|剩余解析次数|| 224 | 225 | ### 错误码说明 226 | |错误码|注释| 227 | |---|---| 228 | |code|错误码| 229 | |0|解析成功| 230 | |10001|请求参数缺失| 231 | |10002|请求参数不合法| 232 | |10003|开发者权限错误或开发者不存在| 233 | |10004|签名校验失败| 234 | |10005|请求接口的ip地址不在白名单或开发者没有设置ip白名单| 235 | |10006|当前开发者不是vip或没有解析次数| 236 | |10007|解析视频失败| 237 | |10008|请求参数url地址不合法| 238 | |10009|请求受限| 239 | |10010|vip已过期或无解析次数| 240 | -------------------------------------------------------------------------------- /parse-safe.php: -------------------------------------------------------------------------------- 1 | $appId, 29 | 'url' => $url, 30 | 'timestamp' => $timestamp, 31 | ]; 32 | ksort($param); 33 | return substr(md5(substr(md5(http_build_query($param)), 6, 18) . $appSecret), 10, 16); 34 | } 35 | 36 | //开发者后台生成的appid 37 | $appId = ''; 38 | 39 | //开发者后台生成的appsecret 40 | $appSecret = ''; 41 | 42 | //需要解析的url 43 | $url = ''; 44 | 45 | //时间戳 46 | $timestamp = time(); 47 | 48 | //生成签名 49 | $sign = sign($appId, $appSecret, $url, $timestamp); 50 | 51 | //curl post请求接口解析短视频 52 | $param = [ 53 | 'appid' => $appId, 54 | 'url' => $url, 55 | 'timestamp' => $timestamp, 56 | 'sign' => $sign, 57 | ]; 58 | 59 | $apiUrl = 'https://api-sv.videoparse.cn/api/video/parse'; 60 | $videoInfo = curlPost($apiUrl, $param); 61 | print_r($videoInfo); -------------------------------------------------------------------------------- /parse.php: -------------------------------------------------------------------------------- 1 | $appId, 21 | 'appsecret' => $appSecret, 22 | 'url' => $url, 23 | ]; 24 | 25 | //得到请求的地址:https://api-sv.videoparse.cn/api/video/normalParse?appid=2m3Ju99MPXrNtkgH&appsecret=bNG3JYjT83qp4cib&url=http%3A%2F%2Fv.douyin.com%2Fa2X5ab%2F 26 | $apiUrl = 'https://api-sv.videoparse.cn/api/video/normalParse?'.http_build_query($param); 27 | $videoInfo = file_get_contents($apiUrl); 28 | print_r($videoInfo); --------------------------------------------------------------------------------