不知你们是否被这样的需求困扰,公司要做矩阵推广,每天几百个视频需要发抖音上面,单一的人工操作费时又费力,这个时候来个自动化的配置一键发送就是件多么幸福的事情啊。
要实现靠代码方式实现自动化去发送的话这中间就是牵扯到爬虫层面的请求了,爬虫开发语言推荐python,接下来开始分析操作
咋们用电脑跑代码那咱们就复现web端的视频上传操作,通过对上传操作过程的抓包分析,最后大概总结技术点的话,一个是抖音系通用的signature验证,另外就是流程的校验比较严格,还有就是auth的获取与相关的加密
流程方面主要就是把八步操作: 一,从接口注册ttwid cookie,然后需要生成s_v_web_id cookie参数 二,获取相关的key,token,该接口需要抖音系通用的signature签名 三,准备上传视频,参数中有视频文件的大小等等,该接口请求头需要通过上一步得到的key,token等参数计算得到一个 authorization 参数,最后返回出视频的video_id、后续要用到的auth、上传视频接口的host以及uri等参数 四,请求上一步返回host,uri拼接得到的url,请求头需要上一步返回的auth参数、通过视频数据计算得到的视频的哈希值crc32以,通过put请求上传视频 五,提交上传的视频,该接口需传入第三步返回的一个sessionkey参数,去计算得到Authorization,x-amz-content-sha256等等参数,此次步骤是用来激活上传视频,会返回一个poster_uri,用于后续步骤 六,对接口发起head请求,接口需要signature签名验证,拿到返回的请求头里面x-ware-csrf-token字段,用于后续添加视频标题接口 七,给视频添加标题,对接口发起post请求,需要上一步拿到的csrf-token、需要添加的标题以及signature签名验证 八,通过接口发布视频,需要的参数有视频标题,video_id以及signature签名,发起post请求发布视频
大概的流程主要是这些,最后附上上传成功视频,需要的可以看我签名v我,出源码服务
#!/usr/bin/python
# -*- coding:utf-8 -*-
import _thread
import os
import subprocess, time, sys
TIME = 1 # 程序状态检测间隔(单位:分钟)
class Auto_Run():
def __init__(self, sleep_time, cmd):
self.sleep_time = sleep_time
self.cmd = cmd
self.ext = (cmd[-3:]).lower() # 判断文件的后缀名,全部换成小写
self.p = [] # self.p为subprocess.Popen()的返回值,初始化为None
self.file_list = []
self.__start__()
self.run() # 启动时先执行一次程序
try:
while 1:
time.sleep(sleep_time * 6) # 休息10分钟,判断程序状态
for p in self.p:
tag = p['p'].poll()
if tag is None:
print("运行正常")
else:
print("未检测到程序运行状态,准备启动程序")
self.run(p)
# self.poll = self.p.poll()
# print(self.poll)# 判断程序进程是否存在,None:表示程序正在运行 其他值:表示程序已退出
except KeyboardInterrupt as e:
print("检测到CTRL+C,准备退出程序!")
# self.p.kill() #检测到CTRL+C时,kill掉CMD中启动的exe或者jar程序
def __start__(self):
for i in os.listdir(self.cmd):
self.file_list.append(i)
def run(self, Process=False):
if Process:
p = subprocess.Popen(['python', '%s\%s' % (self.cmd, Process['file_name'])], stdin=sys.stdin, stdout=sys.stdout,
stderr=sys.stderr, shell=False)
self.p[Process['index']] = {'p': p, 'index': Process['index'], 'file_name': Process['file_name']}
return
for i, j in enumerate(self.file_list):
if self.ext == ".py":
print('start OK!')
p = subprocess.Popen(['python', '%s\%s' % (self.cmd, j)], stdin=sys.stdin, stdout=sys.stdout,
stderr=sys.stderr, shell=False)
self.p.append({'p': p, 'index': i, 'file_name': j})
else:
pass
Auto_Run(TIME, CMD)
|