1 changed files with 628 additions and 0 deletions
-
628wxsph/main.py
@ -0,0 +1,628 @@ |
|||
import hashlib |
|||
import os |
|||
import random |
|||
import time |
|||
|
|||
import cv2 |
|||
from PIL import Image |
|||
from io import BytesIO |
|||
|
|||
import requests |
|||
import json |
|||
import uuid |
|||
|
|||
from moviepy.video.io.VideoFileClip import VideoFileClip |
|||
|
|||
|
|||
class Auth: |
|||
def __init__(self, cookies): |
|||
self.cookies = cookies |
|||
self.headers = { |
|||
"Host": "channels.weixin.qq.com", |
|||
"Pragma": "no-cache", |
|||
"Cache-Control": "no-cache", |
|||
"sec-ch-ua-platform": "\"Windows\"", |
|||
"X-WECHAT-UIN": "0000000000", |
|||
"sec-ch-ua": "\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"", |
|||
"sec-ch-ua-mobile": "?0", |
|||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36", |
|||
"Accept": "application/json, text/plain, */*", |
|||
"Content-Type": "application/json", |
|||
"Origin": "https://channels.weixin.qq.com", |
|||
"Sec-Fetch-Site": "same-origin", |
|||
"Sec-Fetch-Mode": "cors", |
|||
"Sec-Fetch-Dest": "empty", |
|||
"Referer": "https://channels.weixin.qq.com/platform/", |
|||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8" |
|||
} |
|||
|
|||
def get_rid(self): |
|||
timestamp_hex = format(int(time.time()), "x") |
|||
random_hex = "".join(format(random.randint(0, 15), "x") for _ in range(8)) |
|||
|
|||
result = f"{timestamp_hex}-{random_hex}" |
|||
# print(result) |
|||
return result |
|||
|
|||
def get_aid(self): |
|||
return str(uuid.uuid4()) |
|||
|
|||
def get_v2(self): |
|||
url = "https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data" |
|||
params = { |
|||
"_aid": self.get_aid(), |
|||
"_rid": self.get_rid(), |
|||
"_pageUrl": "https://channels.weixin.qq.com/platform/login-for-iframe" |
|||
} |
|||
data = { |
|||
"timestamp": str(int(time.time() * 1000)), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": "", |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
data = json.dumps(data, separators=(',', ':')) |
|||
response = requests.post(url, headers=self.headers, cookies=self.cookies, params=params, data=data).json() |
|||
print(response) |
|||
return response['data']['finderUser']['finderUsername'] |
|||
|
|||
def get_auth(self, ): |
|||
self.v2 = self.get_v2() |
|||
|
|||
url = "https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_upload_params" |
|||
params = { |
|||
"_aid": self.get_aid(), |
|||
"_rid": self.get_rid(), |
|||
"_pageUrl": "https://channels.weixin.qq.com/platform/" |
|||
} |
|||
data = { |
|||
"timestamp": str(int(time.time() * 1000)), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
data = json.dumps(data, separators=(',', ':')) |
|||
response = requests.post(url, headers=self.headers, cookies=self.cookies, params=params, data=data).json() |
|||
authKey = response['data']['authKey'] |
|||
print('authkey--', authKey) |
|||
return authKey |
|||
|
|||
|
|||
class WxSphImage(object): |
|||
def __init__(self, cookies): |
|||
self.auto = Auth(cookies) |
|||
self.authorization = self.auto.get_auth() # 获取鉴权 |
|||
self.cookies = cookies |
|||
self.image_file = '' # 图片地址 |
|||
self.image_data = b'' # 图片内容 |
|||
self.image_size = 0 # 图片长度 |
|||
self.headers = {} |
|||
self.width, self.height = 0, 0 |
|||
self.image_file = '' |
|||
self.width, self.height, self.duration = 0, 0, 0 |
|||
|
|||
def md5(self, data): |
|||
if type(data) == str: |
|||
data = data.encode('utf-8') |
|||
return hashlib.md5(data).hexdigest() |
|||
|
|||
def get_image_data(self): |
|||
with open(self.image_file, 'rb') as f: |
|||
data = f.read() |
|||
return data |
|||
|
|||
def get_ts(self): |
|||
return str(int(time.time() * 1000)) |
|||
|
|||
def get_headers(self): |
|||
headers = { |
|||
"Accept": "application/json, text/plain, */*", |
|||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", |
|||
"Authorization": self.authorization, |
|||
"Cache-Control": "no-cache", |
|||
"Connection": "keep-alive", |
|||
"Content-MD5": "null", |
|||
"Content-Type": "application/json", |
|||
"Origin": "https://channels.weixin.qq.com", |
|||
"Pragma": "no-cache", |
|||
"Referer": "https://channels.weixin.qq.com/", |
|||
"Sec-Fetch-Dest": "empty", |
|||
"Sec-Fetch-Mode": "cors", |
|||
"Sec-Fetch-Site": "same-site", |
|||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36", |
|||
"X-Arguments": f"apptype=251&filetype=20304&weixinnum=2841261318&filekey=finder_video_img.jpeg&filesize={self.image_size}&taskid={self.auto.get_aid()}&scene=2", |
|||
"sec-ch-ua": "\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"", |
|||
"sec-ch-ua-mobile": "?0", |
|||
"sec-ch-ua-platform": "\"Windows\"" |
|||
} |
|||
return headers |
|||
|
|||
def get_uid(self, BlockPartLength): |
|||
""" |
|||
获取要上传的图片地址 |
|||
:return: |
|||
""" |
|||
url = "https://finderassistancea.video.qq.com/applyuploaddfs" |
|||
data = { |
|||
"BlockSum": len(BlockPartLength), |
|||
"BlockPartLength": BlockPartLength |
|||
} |
|||
data = json.dumps(data, separators=(',', ':')) |
|||
response = requests.put(url, headers=self.headers, data=data).json() |
|||
print(response) |
|||
return response['UploadID'] |
|||
|
|||
def put_image(self, uid, image_data=None, PartNumber=1): |
|||
""" |
|||
上传图片/视频 |
|||
PartNumber 这个是上传视频用的 1是第一段 2是第二 |
|||
image_data 为了适配视频上传 |
|||
:return: |
|||
""" |
|||
# url = "https://finderassistancec.video.qq.com/uploadpartdfs?" |
|||
url = 'https://finderassistancee.video.qq.com/uploadpartdfs?' |
|||
params = {'PartNumber': PartNumber, |
|||
'UploadID': uid, |
|||
'QuickUpload': 2 |
|||
} |
|||
|
|||
if image_data is None: |
|||
image_data = self.image_data |
|||
headers = self.headers |
|||
else: |
|||
|
|||
headers = self.get_headers() |
|||
headers[ |
|||
"X-Arguments"] = f"apptype=251&filetype=20302&weixinnum=2841261318&filekey=aa.mp4&filesize={self.image_size}&taskid={self.auto.get_aid()}&scene=2" |
|||
headers['content-md5'] = self.md5(image_data) |
|||
response = requests.put(url, data=image_data, headers=headers, params=params).json() |
|||
print(response) |
|||
|
|||
return response['ETag'], response['TransFlag'] |
|||
|
|||
def get_image_url(self, uid, etag='', trans_flag='0_0', part_info=[]): |
|||
""" |
|||
获取图片地址 |
|||
:param etag: |
|||
:param trans_flag: |
|||
:param uid: |
|||
:return: |
|||
""" |
|||
url = "https://finderassistancea.video.qq.com/completepartuploaddfs" |
|||
# https://finderassistancea.video.qq.com/completepartuploaddfs? |
|||
params = { |
|||
"UploadID": uid |
|||
} |
|||
data = { |
|||
"TransFlag": trans_flag, |
|||
"PartInfo": [] |
|||
} |
|||
if not part_info: |
|||
data['PartInfo'] = [ |
|||
{ |
|||
"PartNumber": 1, |
|||
"ETag": etag |
|||
} |
|||
] |
|||
|
|||
else: |
|||
data['PartInfo'] = part_info |
|||
|
|||
data = json.dumps(data, separators=(',', ':')) |
|||
print(data) |
|||
response = requests.post(url, headers=self.headers, params=params, data=data).json() |
|||
print(response) |
|||
return response['DownloadURL'] |
|||
|
|||
def get_traceKey(self): |
|||
""" |
|||
这个是为了获取发布视频的 traceKey |
|||
:return: |
|||
""" |
|||
url = "https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/get-finder-post-trace-key" |
|||
params = { |
|||
'_aid': self.auto.get_aid(), |
|||
'_rid': self.auto.get_rid(), |
|||
"_pageUrl": "https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate" |
|||
} |
|||
data = { |
|||
"objectId": "", |
|||
"timestamp": self.get_ts(), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.auto.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
data = json.dumps(data, separators=(',', ':')) |
|||
response = requests.post(url, headers=self.headers, cookies=cookies, params=params, data=data).json() |
|||
print(response) |
|||
traceKey = response['data']['traceKey'] |
|||
|
|||
return traceKey |
|||
|
|||
def get_clip_key(self, video_url, traceKey, width, height, duration): |
|||
""" |
|||
这个用来获取发布视频的参数 |
|||
:return: |
|||
""" |
|||
|
|||
url = "https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_clip_video" |
|||
params = { |
|||
"_aid": self.auto.get_aid(), |
|||
"_rid": self.auto.get_rid(), |
|||
"_pageUrl": "https://channels.weixin.qq.com/micro/content/post/create" |
|||
} |
|||
data = { |
|||
"url": video_url, |
|||
"timeStart": 0, |
|||
"cropDuration": 0, |
|||
"height": 1280, |
|||
"width": width, |
|||
"x": 0, |
|||
"y": 0, |
|||
"clipOriginVideoInfo": { |
|||
"width": width, |
|||
"height": height, |
|||
"duration": duration, |
|||
"fileSize": self.image_size |
|||
}, |
|||
"traceInfo": { |
|||
"traceKey": traceKey, |
|||
"uploadCdnStart": int(time.time()), |
|||
"uploadCdnEnd": int(time.time()) |
|||
}, |
|||
"targetWidth": width, |
|||
"targetHeight": height, |
|||
"type": 4, |
|||
"useAstraThumbCover": 1, |
|||
"timestamp": self.get_ts(), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.auto.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
data = json.dumps(data, separators=(',', ':')) |
|||
response = requests.post(url, headers=self.headers, cookies=self.cookies, params=params, data=data).json() |
|||
|
|||
print(response) |
|||
return response['data']['clipKey'] |
|||
|
|||
def release(self, title, connect, media): |
|||
""" |
|||
发布 |
|||
:param title: 内容头 |
|||
:param connect: 内容 |
|||
:param media: 图片的列表 |
|||
:return: |
|||
""" |
|||
url = 'https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_create' |
|||
params = { |
|||
'_aid': self.auto.get_aid(), |
|||
'_rid': self.auto.get_rid(), |
|||
'_pageUrl': 'https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate' |
|||
} |
|||
traceKey = self.get_traceKey() |
|||
data = { |
|||
"objectType": 0, |
|||
"longitude": 0, |
|||
"latitude": 0, |
|||
"feedLongitude": 0, |
|||
"feedLatitude": 0, |
|||
"originalFlag": 0, |
|||
"topics": [], |
|||
"isFullPost": 1, |
|||
"handleFlag": 2, |
|||
"videoClipTaskId": "", |
|||
"traceInfo": { |
|||
"traceKey": traceKey, |
|||
"uploadCdnStart": int(time.time()), |
|||
"uploadCdnEnd": int(time.time()) |
|||
}, |
|||
"objectDesc": { |
|||
"mpTitle": "", |
|||
"description": connect, |
|||
"extReading": {}, |
|||
"mediaType": 2, |
|||
"location": { |
|||
"latitude": 31.992259979248047, |
|||
"longitude": 118.77870178222656, |
|||
"city": "南京市", |
|||
"poiClassifyId": "" |
|||
}, |
|||
"topic": { |
|||
"finderTopicInfo": "<finder><version>1</version><valuecount>1</valuecount><style><at></at></style><value0><![CDATA[" + connect + "]]></value0></finder>" |
|||
}, |
|||
"event": {}, |
|||
"mentionedUser": [], |
|||
"media": media, |
|||
"finderNewlifeDesc": { |
|||
"richTextTitle": title, |
|||
"richTextJson": '[{"insert":"' + title + '"},{"attributes":{"header":1},"insert":"\\n"},{"insert":"' + connect + '"},{"insert":"\\n\\n"}]', |
|||
"fromRichPublisher": 1 |
|||
}, |
|||
"member": {} |
|||
}, |
|||
"postFlag": 0, |
|||
"mode": 1, |
|||
"clientid": self.auto.get_aid(), |
|||
"timestamp": self.get_ts(), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.auto.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
|
|||
# 5. 发送POST请求 |
|||
response = requests.post( |
|||
url=url, |
|||
params=params, |
|||
headers=self.headers, |
|||
cookies=cookies, |
|||
json=data, # 确保中文正常传输 |
|||
timeout=30 # 设置超时时间 |
|||
) |
|||
print(response.json()) |
|||
|
|||
def release_video(self, title, connect, video_url, im_url): |
|||
""" |
|||
发布 |
|||
:param title: 内容头 |
|||
:param connect: 内容 |
|||
:param media: 图片的列表 |
|||
:return: |
|||
""" |
|||
url = 'https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_create' |
|||
params = { |
|||
'_aid': self.auto.get_aid(), |
|||
'_rid': self.auto.get_rid(), |
|||
'_pageUrl': 'https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate' |
|||
} |
|||
traceKey = self.get_traceKey() |
|||
|
|||
width = self.width |
|||
height = self.height |
|||
duration = self.duration |
|||
clip = self.get_clip_key(video_url=video_url, traceKey=traceKey, width=width, height=height, duration=duration) |
|||
print(clip) |
|||
data = { |
|||
"objectType": 0, |
|||
"longitude": 0, |
|||
"latitude": 0, |
|||
"feedLongitude": 0, |
|||
"feedLatitude": 0, |
|||
"originalFlag": 0, |
|||
"topics": [], |
|||
"isFullPost": 1, |
|||
"handleFlag": 2, |
|||
"videoClipTaskId": clip, |
|||
"traceInfo": { |
|||
"traceKey": traceKey, |
|||
"uploadCdnStart": int(time.time()), |
|||
"uploadCdnEnd": int(time.time()), |
|||
}, |
|||
"objectDesc": { |
|||
"mpTitle": "", |
|||
"description": title, |
|||
"extReading": {}, |
|||
"mediaType": 4, |
|||
"location": { |
|||
"latitude": 31.992259979248047, |
|||
"longitude": 118.77870178222656, |
|||
"city": "南京市", |
|||
"poiClassifyId": "" |
|||
}, |
|||
"topic": { |
|||
"finderTopicInfo": "<finder><version>1</version><valuecount>1</valuecount><style><at></at></style><value0><![CDATA[" + connect + "]]></value0></finder>" |
|||
}, |
|||
"event": {}, |
|||
"mentionedUser": [], |
|||
"media": [ |
|||
{ |
|||
"url": video_url, |
|||
"fileSize": self.image_size, |
|||
"thumbUrl": im_url, |
|||
"fullThumbUrl": im_url, |
|||
"mediaType": 4, |
|||
"videoPlayLen": int(duration), |
|||
"width": width, |
|||
"height": height, |
|||
"md5sum": self.auto.get_aid(), |
|||
"coverUrl": im_url, |
|||
"fullCoverUrl": im_url, |
|||
"urlCdnTaskId": clip |
|||
} |
|||
], |
|||
"shortTitle": [{"shortTitle": connect}], |
|||
"member": {} |
|||
}, |
|||
"report": { |
|||
"clipKey": clip, |
|||
"draftId": clip, |
|||
"timestamp": self.get_ts(), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.auto.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7, |
|||
"height": height, |
|||
"width": width, |
|||
"duration": duration, |
|||
"fileSize": self.image_size, |
|||
"uploadCost": 268 |
|||
}, |
|||
"postFlag": 0, |
|||
"mode": 1, |
|||
"clientid": self.auto.get_aid(), |
|||
"timestamp": self.get_ts(), |
|||
"_log_finder_uin": "", |
|||
"_log_finder_id": self.auto.v2, |
|||
"rawKeyBuff": None, |
|||
"pluginSessionId": None, |
|||
"scene": 7, |
|||
"reqScene": 7 |
|||
} |
|||
|
|||
# 5. 发送POST请求 |
|||
response = requests.post( |
|||
url=url, |
|||
params=params, |
|||
headers=self.headers, |
|||
cookies=cookies, |
|||
json=data, # 确保中文正常传输 |
|||
timeout=30 # 设置超时时间 |
|||
).json() |
|||
print(response) |
|||
return response |
|||
|
|||
def run_images(self, image_file): |
|||
self.image_file = image_file # 图片地址 |
|||
self.image_data = self.get_image_data() # 图片内容 |
|||
self.image_size = len(self.image_data) # 图片长度 |
|||
self.headers = self.get_headers() |
|||
img = Image.open(BytesIO(self.image_data)) |
|||
self.width, self.height = img.size |
|||
uid = self.get_uid([ |
|||
self.image_size |
|||
]) |
|||
etag, trans_flag = self.put_image(uid) |
|||
image_url = self.get_image_url(uid=uid, etag=etag, trans_flag=trans_flag) # 这里官方是上传了3个不同尺寸的 测试一样的也可以 |
|||
# thumbUrl = self.get_image_url(uid=uid, etag=etag, trans_flag=trans_flag) |
|||
# fullThumbUrl = self.get_image_url(uid=uid, etag=etag, trans_flag=trans_flag) |
|||
media = { |
|||
"url": image_url, |
|||
"fileSize": self.image_size, |
|||
"thumbUrl": image_url, |
|||
"fullThumbUrl": image_url, |
|||
"mediaType": 2, |
|||
"videoPlayLen": 0, |
|||
"width": self.width, |
|||
"height": self.height, |
|||
"md5sum": self.auto.get_aid(), |
|||
"urlCdnTaskId": "" |
|||
} |
|||
return media |
|||
# self.release(title='下午好', connect='我是阿巴阿巴阿巴', media=media) |
|||
|
|||
def video_cover(self, video_path): |
|||
cap = cv2.VideoCapture(video_path) |
|||
# 获取视频信息 |
|||
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) |
|||
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) |
|||
fps = cap.get(cv2.CAP_PROP_FPS) |
|||
frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT) |
|||
|
|||
duration = frame_count / fps |
|||
|
|||
print("宽高:", width, height) |
|||
print("时长:", duration) |
|||
self.width, self.height, self.duration = width, height, duration |
|||
# 读取第1秒帧 |
|||
cap.set(cv2.CAP_PROP_POS_MSEC, 1000) |
|||
|
|||
ret, frame = cap.read() |
|||
|
|||
cap.release() |
|||
|
|||
if ret: |
|||
# OpenCV是BGR,需要转RGB |
|||
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) |
|||
|
|||
img = Image.fromarray(frame) |
|||
|
|||
img.save("cover.png") |
|||
|
|||
def run_video(self, video_path): |
|||
""" |
|||
这里发现视频和图片上传一致就共用了 |
|||
:param video_path: |
|||
:return: |
|||
""" |
|||
|
|||
self.image_file = video_path # 视频地址 |
|||
self.image_data = self.get_image_data() # 视频内容 |
|||
self.image_size = len(self.image_data) # 视频长度 |
|||
self.headers = self.get_headers() |
|||
self.headers[ |
|||
"X-Arguments"] = f"apptype=251&filetype=20302&weixinnum=2841261318&filekey=aa.mp4&filesize={self.image_size}&taskid={self.auto.get_aid()}&scene=2" |
|||
# apptype=251&filetype=20302&weixinnum=2841261318&filekey=_1.mp4&filesize=122544202&taskid=436451aa-f4fe-4a50-81be-4616bdb08c6c&scene=2 |
|||
chunk_size = 1024 * 1024 * 8 # 这个是上传视频的最大值 |
|||
if self.width == 0: |
|||
self.video_cover(video_path) |
|||
else: |
|||
print('已有视频数据,不再次获取') |
|||
BlockPartLength = [] # 每个视频大小存放 |
|||
if self.image_size > chunk_size: |
|||
for start in range(0, self.image_size, chunk_size): |
|||
end = min(start + chunk_size, self.image_size) |
|||
BlockPartLength.append(end) |
|||
else: |
|||
BlockPartLength.append(len(self.image_data)) |
|||
# print(BlockPartLength) |
|||
uid = self.get_uid(BlockPartLength=BlockPartLength) |
|||
start = 0 |
|||
part_info = [] |
|||
trans_flag = '0_0' |
|||
for index, end in enumerate(BlockPartLength): |
|||
chunk = self.image_data[start:end] |
|||
print(index, start, end, len(chunk)) |
|||
etag, trans_flag = self.put_image(uid, image_data=chunk, PartNumber=index + 1) |
|||
start = end |
|||
part_info.append({ |
|||
"PartNumber": index + 1, |
|||
"ETag": etag |
|||
}) |
|||
video_url = self.get_image_url(uid=uid, part_info=part_info, trans_flag=trans_flag) |
|||
return video_url |
|||
|
|||
|
|||
def start(cookie): |
|||
wxsph_image = WxSphImage(cookie) |
|||
media = [] |
|||
for i in os.listdir('data'): |
|||
r = wxsph_image.run_images(f'data\{i}') |
|||
media.append(r) |
|||
# wxsph_image.release(title='下午好', connect='我是大鹅,大白鹅', media=media) |
|||
|
|||
|
|||
def start2(cookie, path='bb.mp4'): |
|||
wxsph_image = WxSphImage(cookie) |
|||
wxsph_image.video_cover(path) |
|||
media = wxsph_image.run_images("cover.png") |
|||
im_url = media['url'] |
|||
video_url = wxsph_image.run_video(path) |
|||
wxsph_image.release_video(title='护肤小妙招', connect='零零零零', video_url=video_url, im_url=im_url) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
cookies = { |
|||
"sessionid": 'BgAAqTVttQ7sIhon30QFGwPOpNPlQIpVNuqwUrd3lCCvLzrBkAEkEyuk1nI3zfGoMe0Qd38FvByNaq1%2FTWIaXwoiH7apYb6usnTCPewc2ucN', |
|||
"wxuin": "1256030655" |
|||
} |
|||
# start(cookies) |
|||
start2(cookies) |
|||
|
|||
# https://channels.weixin.qq.com/platform/post/finderNewLifeCreate |
|||
""" |
|||
原图 1440*1920 |
|||
810*1080 |
|||
1440*1920 |
|||
|
|||
|
|||
1438 * |
|||
|
|||
http://wxapp.tc.qq.com/251/20302/stodownload?bizid=1023&dotrans=0&encfilekey=Cvvj5Ix3eewK0tHtibORqcsqchXNh0Gf3sJcaYqC2rQAj7FSjPM3xflXxKHA63ZOrTibicJ9v7u7J4fYdgdOOMAySBURcTZ7sSROXeYhcJkA0NMVcbicDq8iaPQnqVGj2zIxb&findertoken=0886eae8ca0a10a4dea4cd061800223c66696e64657275706c6f616475726c5f323834313236313331385f313737323639353333323636305f333531383737313532323839353535323834312a2039393936353864633535653261366137643662393866303232316264363533613801400348005000580260ce9e01&hy=SH&idx=1&m=&scene=2&token=AxricY7RBHdW6dqda02zm3HiaicQibGV1ib8zfD9icC3T9A8c6t4zN9VWAM7nZtvAtt4oAqMqEvxj9KoFTiaYFBtQP5UC5BmmDWK37LTFiabH3m6rhq8sp8XWWaibicg&uzid=7a15c |
|||
http://wxapp.tc.qq.com/251/20304/stodownload?bizid=1023&dotrans=0&encfilekey=Cvvj5Ix3eewK0tHtibORqcsqchXNh0Gf3sJcaYqC2rQAgkKWLMfzK1J50xmbjOvs8wYzYKbvibicABqEW4zyA0bsuHYIdDdRYMuGz1dU2OyuO6WXBrYKveY2gDRZkv84t2A&hy=SH&idx=1&m=&scene=2&token=x5Y29zUxcibBpSHJLicjXJ6R7YDibFkMzwCNXu1DAa7W7jvkodt2kjXmsYYrnWNuBc35NgDetCXmeTxBexibwoDiaITKay4FZwicy6ich6DvGhZQMHTGCo1RANhxQ&uzid=1 |
|||
http://wxapp.tc.qq.com/251/20304/stodownload?bizid=1023&dotrans=0&encfilekey=Cvvj5Ix3eewK0tHtibORqcsqchXNh0Gf3sJcaYqC2rQAgkKWLMfzK1J50xmbjOvs8wYzYKbvibicADoD7ptve2Vn5jFhCMOJRfXkekcy1lTcR3oOYKHZGibZOf2jicTMCEWM5&hy=SH&idx=1&m=&scene=2&token=x5Y29zUxcibBpSHJLicjXJ6QtAnlI3LxaeKdyJpZocIvkRYdXaYYp1iaNnm3H3rMb4cTeAaCc7EUmmx9Mqic7rMRYicuza3e6yibBjyQYRgGtE9FnMicSibFrNZScA&uzid=1 |
|||
""" |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue