没画框架 也没有发布功能 只有上传视频
发布就一个包 抓一下就行了
主要给大伙学习一下分段上传 模块就精易模块 自己导入就行
.版本 2
.支持库 spec
.子程序 ixigua_upload, 逻辑型, , 上传成功返回真
.参数 Cookie, 文本型
.参数 filePath, 文本型, , 视频文件路径
.参数 vid, 文本型, 参考, 视频vid,上传成功后返回
.参数 msg, 文本型, 参考
.局部变量 url, 文本型
.局部变量 header, 文本型
.局部变量 data, 文本型
.局部变量 str, 文本型
.局部变量 json, 类_json
.局部变量 accessKey, 文本型
.局部变量 uploadToken, 文本型
.局部变量 oid, 文本型
.局部变量 tos_host, 文本型
.局部变量 tos_sign, 文本型
.局部变量 hash, 文本型
.局部变量 key, 文本型
.局部变量 extra_param, 文本型
.局部变量 crc32, 文本型
.局部变量 token, 文本型
.局部变量 filedata, 字节集
.局部变量 fileSize, 长整数型
.局部变量 partCount, 整数型
.局部变量 partNumber, 整数型
.局部变量 partData, 字节集
.局部变量 uploadId, 文本型
.局部变量 crc32校验, 文本型
url = “https://studio.ixigua.com/api/upload/getAuthKey/?params=%7B%22type%22%3A%22video%22%2C%22isLandscape%22%3Atrue%7D”
header = “Referer: https://studio.ixigua.com/upload” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36”
str = 编码_Utf8到Ansi (网页_访问_对象 (url, , , Cookie, , header))
json.解析 (str)
.如果真 (json.取属性 (“status”).取数据文本 () ≠ “0”)
msg = “accessKey获取失败!”
返回 (假)
.如果真结束
accessKey = json.取通用属性 (“data.accessKey”)
uploadToken = json.取通用属性 (“data.uploadToken”)
url = “https://vas-lf-x.snssdk.com/video/openapi/v1/?action=GetVideoUploadParams&s=” + getS () + “&use_edge_node=1&file_size=289151”
header = “Authorization: ” + uploadToken + #换行符 + “Content-Type: application/json” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/upload” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36” + #换行符 + “X-Tt-Access: ” + accessKey
str = 编码_Utf8到Ansi (网页_访问_对象 (url, , , , , header))
json.解析 (str)
.如果真 (json.取属性 (“code”).取数据文本 () ≠ “2000”)
msg = “oid获取失败!”
返回 (假)
.如果真结束
tos_host = json.取通用属性 (“data['edge_nodes'][0]['tos_host']”)
oid = json.取通用属性 (“data['edge_nodes'][0].oid”)
tos_sign = json.取通用属性 (“data['edge_nodes'][0]['tos_sign']”)
extra_param = json.取通用属性 (“data['edge_nodes'][0]['extra_param']”)
vid = json.取通用属性 (“data['edge_nodes'][0].vid”)
token = json.取通用属性 (“data['edge_nodes'][0].token”)
filedata = 读入文件 (filePath)
fileSize = 文件_取实际大小 (filePath)
' 5242880
.如果 (fileSize ≤ 5242880) ' 判断文件大小是否超过5M 超过5M需要分段上传
' 不需要分段
url = “https://” + tos_host + “/” + oid
crc32 = 到小写 (校验_取crc32 (filedata, 真))
header = “Authorization: ” + tos_sign + #换行符 + “Content-Crc32: ” + crc32 + #换行符 + “Content-Disposition: attachment; filename=” + #引号 + “undefined” + #引号 + #换行符 + “Content-Type: application/octet-stream” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/upload” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36” + #换行符 + “X-Storage-U: ”
str = 编码_Utf8到Ansi (网页_访问_对象 (url, 1, , , , header, , , , filedata))
json.解析 (str)
.如果真 (json.取属性 (“error.code”).取数据文本 () ≠ “200”)
msg = json.取通用属性 (“error.message”)
返回 (假)
.如果真结束
hash = json.取通用属性 (“payload.hash”)
key = json.取通用属性 (“payload.key”)
.否则
' 需要分段上传
url = “https://” + tos_host + “/” + oid + “?uploads”
data = “------WebKitFormBoundaryb5z6D2ACHhHcmMpa--”
header = “Authorization: ” + tos_sign + #换行符 + “Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryb5z6D2ACHhHcmMpa” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36” + #换行符 + “X-Storage-U: ”
str = 编码_Utf8到Ansi (网页_访问_对象 (url, 1, data, , , header))
json.解析 (str)
.如果真 (json.取属性 (“error.code”).取数据文本 () ≠ “200”)
msg = json.取通用属性 (“error.message”)
返回 (假)
.如果真结束
uploadId = json.取通用属性 (“payload.uploadID”)
.如果 (fileSize % 5242880 > 0)
partCount = 取整 (fileSize ÷ 5242880) + 1
.否则
partCount = 取整 (fileSize ÷ 5242880)
.如果结束
.计次循环首 (partCount, partNumber)
partData = 字节集_取指定位置字节集 (filedata, (partNumber - 1) × 5242880, 5242880)
crc32 = 到小写 (校验_取crc32 (partData, 真))
url = “https://” + tos_host + “/” + oid + “?partNumber=” + 到文本 (partNumber) + “&uploadID=” + uploadId
header = “Authorization: ” + tos_sign + #换行符 + “Content-Crc32: ” + crc32 + #换行符 + “Content-Disposition: attachment; filename=” + #引号 + “undefined” + #引号 + #换行符 + “Content-Length: 289151” + #换行符 + “Content-Type: application/octet-stream” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/upload” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36” + #换行符 + “X-Storage-U: ”
str = 编码_Utf8到Ansi (网页_访问_对象 (url, 1, , , , header, , , , partData))
调试输出 (partNumber, crc32, str)
json.解析 (str)
.如果真 (json.取属性 (“error.code”).取数据文本 () ≠ “200”)
msg = json.取通用属性 (“error.message”)
返回 (假)
.如果真结束
crc32校验 = crc32校验 + 到文本 (partNumber) + “:” + crc32 + “,”
.计次循环尾 ()
crc32校验 = 取文本左边 (crc32校验, 取文本长度 (crc32校验) - 1)
调试输出 (crc32校验)
url = “https://” + tos_host + “/” + oid + “?uploadID=” + uploadId
header = “Authorization: ” + tos_sign + #换行符 + “Content-Type: application/octet-stream” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36” + #换行符 + “X-Storage-U: ”
str = 编码_Utf8到Ansi (网页_访问_对象 (url, 1, crc32校验, , , header))
json.解析 (str)
.如果真 (json.取属性 (“error.code”).取数据文本 () ≠ “200”)
msg = json.取通用属性 (“error.message”)
返回 (假)
.如果真结束
hash = json.取通用属性 (“payload.hash”)
key = json.取通用属性 (“payload.key”)
.如果结束
url = “https://vas-lf-x.snssdk.com/video/openapi/v1/?action=UpdateVideoUploadInfos&” + extra_param
header = “Authorization: ” + uploadToken + #换行符 + “Content-Type: application/json” + #换行符 + “Origin: https://studio.ixigua.com” + #换行符 + “Referer: https://studio.ixigua.com/upload” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36” + #换行符 + “X-Tt-Access: ” + accessKey
data = 子文本替换 (“{|vid|:|” + vid + “|,|oid|:|” + oid + “|,|token|:|” + token + “|,|poster_ss|:0,|is_exact_poster|:false,|user_reference|:||}”, “|”, #引号, , , 真)
str = 编码_Utf8到Ansi (网页_访问_对象 (url, 1, data, , , header))
调试输出 (str)
json.解析 (str)
.如果真 (json.取属性 (“code”).取数据文本 () ≠ “2000”)
msg = json.取通用属性 (“message”)
返回 (假)
.如果真结束
vid = json.取通用属性 (“data.vid”)
msg = “success”
返回 (真)