python 网盘上传_【Python3】基于文叔叔网盘上传与下载的Python脚本
[Python] 纯文本查看 复制代码import requests
import os
import hashlib
from threading import Thread
import sys
def login_anonymous():
r = s.post(
url = 'https://www.wenshushu.cn/ap/login/anonymous',
json = {
"dev_info":"{}"
}
)
return r.json()['data']['token']
def download(url):
def get_tid(token):
r = s.post(
url = 'https://www.wenshushu.cn/ap/task/token',
json = {
'token': token
}
)
return r.json()['data']['tid']
def mgrtask(tid):
r = s.post(
url = 'https://www.wenshushu.cn/ap/task/mgrtask',
json = {
'tid': tid,
'password': ''
}
)
rsp = r.json()
expire = rsp['data']['expire']
days, remainder = divmod(int(float(expire)),3600*24)
hours, remainder = divmod(remainder, 3600)
minutes, seconds = divmod(remainder, 60)
print(f'文件过期时间:{days}天{hours}时{minutes}分{seconds}秒')
file_size = rsp['data']['file_size']
print(f'文件大小:{round(int(file_size)/1024**2,2)}MB')
return rsp['data']['boxid'], rsp['data']['ufileid'] # pid
def list_file(tid):
bid, pid = mgrtask(tid)
r = s.post(
url = 'https://www.wenshushu.cn/ap/ufile/list',
json = {
"start":0,
"sort":{
"name":"asc"
},
"bid":bid,
"pid":pid,
"type":1,
"options":{
"uploader":"true"
},
"size":50
}
)
rsp = r.json()
filename = rsp['data']['fileList'][0]['fname']
fid = rsp['data']['fileList'][0]['fid']
print(f'文件名:{filename}')
sign(bid, fid, filename)
def down_handle(url, filename):
print('开始下载!',end='\r')
r = s.get(url)
with open(filename, 'wb') as f:
f.write(r.content)
f.close()
print('下载完成!')
def sign(bid, fid, filename):
r = s.post(
url = 'https://www.wenshushu.cn/ap/dl/sign',
json = {
'bid': bid,
'fid': fid
}
)
url = r.json()['data']['url']
down_handle(url, filename)
if len(url.split('/')[-1]) == 16:
token = url.split('/')[-1]
tid = get_tid(token)
elif len(url.split('/')[-1]) == 11:
tid = url.split('/')[-1]
list_file(tid)
def upload(filePath):
file_size = os.path.getsize(filePath)
ispart = True if file_size > 2097152 else False
def read_file():
read_size = 2097152
partnu = 0
with open(filePath,"rb") as f:
while True:
block = f.read(read_size)
partnu += 1
if block:
yield block, partnu
else:
return
def sha1_str(s):
cm = hashlib.sha1(s.encode('utf-8')).hexdigest()
return cm
def md5_file(block=None):
read_size = 2097152 if ispart else None
if not block:
block = open(filePath,'rb').read(read_size)
md5_code = hashlib.md5(block).hexdigest()
return md5_code
def sha1_file(block=None):
read_size = 2097152 if ispart else None
if not block:
block = open(filePath,'rb').read(read_size)
sha1_code = hashlib.sha1(block).hexdigest()
return sha1_code
def storage():
r = s.post(
url = 'https://www.wenshushu.cn/ap/user/storage'
)
rsp = r.json()
rest_space = int(rsp['data']['rest_space'])
send_space = int(rsp['data']['send_space'])
storage_space = rest_space + send_space
print('当前已用空间:{}GB,剩余空间:{}GB,总空间:{}GB'.format(
round(send_space / 1024**3, 2),
round(rest_space / 1024**3, 2),
round(storage_space / 1024**3, 2)
))
def userinfo():
s.post(
url = 'https://www.wenshushu.cn/ap/user/userinfo'
)
def addsend():
userinfo()
storage()
r = s.post(
url = 'https://www.wenshushu.cn/ap/task/addsend',
json = {
"sender":"",
"remark":"",
"isextension":False,
"pwd":"",
"expire":3,
"recvs":[
"social",
"public"
],
"file_size":file_size,
"file_count":1
}
)
rsp = r.json()
if rsp['code'] == 1021:
print(f'操作太快啦!请{rsp["message"]}秒后重试')
os._exit(0)
return rsp['data']['bid'], rsp['data']['ufileid'], rsp['data']['tid']
def psurl(fname, tid, file_size, partnu=None):
payload = {
"ispart":ispart,
"fname":fname,
"fsize":file_size,
"tid":tid,
}
if ispart:
payload['partnu'] = partnu
r = s.post(
url = 'https://www.wenshushu.cn/ap/upload/psurl',
json = payload
)
rsp = r.json()
url = rsp['data']['url']
return url
def cpltsend(boxid, taskid, preid):
r = s.post(
url = 'https://www.wenshushu.cn/ap/task/cpltsend',
json = {
'bid': boxid,
'tid': taskid,
'ufileid': preid
}
)
rsp = r.json()
print(f"个人管理链接:{rsp['data']['mgr_url']}")
print(f"公共链接:{rsp['data']['public_url']}")
def fast():
boxid, preid, taskid = addsend()
cm1 = md5_file()
cs1 = sha1_file()
cm = hashlib.sha1(cm1.encode('utf-8')).hexdigest()
name = filePath.split('/')[-1]
payload = {
"hash":{
"cm1":cm1, # md5
"cs1":cs1, # SHA1
},
"uf":{
"name": name,
"boxid":boxid,
"preid":preid
},
"taskid":taskid
}
if not ispart:
payload['hash']['cm'] = cm # 把md5用SHA1加密
for _ in range(2):
r = s.post(
url = 'https://www.wenshushu.cn/ap/upload/fast',
json = payload
)
rsp = r.json()
can_fast = rsp['data']['isCan']
ufile = rsp['data']['ufile']
if can_fast and not ufile:
hash_codes = ''
for block, _ in read_file():
hash_codes += md5_file(block)
payload['hash']['cm'] = sha1_str(hash_codes)
elif can_fast and ufile:
print(f'文件{name}可以被秒传!')
cpltsend(boxid, taskid, preid)
os._exit(0)
return name, taskid, boxid, preid
def complete(fname, tid, boxid, preid):
s.post(
url = 'https://www.wenshushu.cn/ap/upload/complete',
json = {
"ispart":ispart,
"fname":fname,
"tid":tid,
"location":{
"boxid":boxid,
"preid":preid
}
}
)
cpltsend(boxid, tid, preid)
def file_put(url, block=open(filePath, 'rb').read()):
requests.put(url = url, data = block)
if ispart:
task.pop(0)
def upload_main():
global task
threads = []
task = []
fname, tid, boxid, preid = fast()
if ispart:
print('文件正在被分块上传!')
for block, partnu in read_file():
url = psurl(fname, tid, len(block), partnu)
t = Thread(target=file_put,args=(url,block))
threads.append(t)
task.append(1)
for thread in threads:
thread.start()
while True:
sp = (len(threads)-len(task)) / len(threads) * 100
print(f'分块进度:{int(sp)}%',end='\r')
if sp == 100:
print('上传完成:100%')
break
for thread in threads:
thread.join()
else:
print('文件被整块上传!')
url = psurl(fname, tid, file_size)
file_put(url)
complete(fname, tid, boxid, preid)
upload_main()
if __name__ == "__main__":
s = requests.session()
s.headers['x-token'] = login_anonymous()
try:
command = sys.argv[1]
if command == 'upload':
file = sys.argv[2]
upload(file)
elif command == 'download':
url = sys.argv[2]
download(url)
except:
print('请输入正确命令\n',
'上传:[python wss.py upload "file.exe"]\n',
'下载:[python wss.py download "url"]')
python 网盘上传_【Python3】基于文叔叔网盘上传与下载的Python脚本相关推荐
- html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传
(给DotNet加星标,提升.Net技能) 转自:学习中的苦与乐 cnblogs.com/xiongze520/p/10412693.html 现在的项目开发基本上都用到了上传文件功能,或图片,或文档 ...
- python mac os安装教程_教程:在 Mac OS X 上安装 TensorFlow
简评:手把手教你如何在 Mac OSX 系统安装 TensorFlow. 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 ...
- ajax文件插件上传,7 款基于 JavaScript/AJAX 的文件上传插件
本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 具有多文件上传.拖 ...
- 拖拽文件夹上传 一(基于Vue的文件夹上传组件)
前言 首先说一下,小弟第一次写文章,如果有什么错误 还望小哥哥 小姐姐多多包涵.如果有什么缺陷还望大家指出来 让小弟多学习. 内容划分 上传文件夹一共分两部分来写 一方面怕太长了 大家看五分钟就不想看 ...
- vue 文件及描述信息一起上传_用Vue实现一个大文件上传和断点续传
前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding ...
- python二手房使用教程_python实战:基于链家网二手房数据解析任务
实战:基于链家网二手房数据解析任务 页面:https://bd.ke.com/ershoufang/ 获取如下信息: 标题 位置 房屋信息 关注人数 / 发布时间 房屋总价 房屋单价 备注信息 1.导 ...
- python画函数图像网格_如何基于Python Matplotlib实现网格动画
-1- 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看.第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了. 这篇文章虽然不是篇典型的数据科学类文章,不过 ...
- python论坛系统源码_十个基于Python的BBS论坛类开源web框架汇总(附源码地址
1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...
- python建站的缺点_记录一下自己的建站过程(三):Python与Django
前言(都是唠叨) 讲完了前端了,后端开始了.还是pml老师,因为我后面的课都没听过,所以一直都是不知道后端到底是怎么工作的.只听过一个词叫Tornado,对就真的只知道这个词,龙卷风,它是个啥我到现在 ...
最新文章
- raid模式_基于网络的磁盘热备技术|网络RAID-1
- Spring Cloud Alibaba 高级特性 应用性能监控:通过 SkyWalking 实施链路追踪
- oracle11g程序调优纪实
- DevOps笔记-10:金融行业分支策略的建议
- BS程序代码与安全与基本攻击/防御模式
- BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)
- 在linux命令行中直接执行php命令
- 【LeetCode笔记】461. 汉明距离(Java、位运算)
- leetcode3. Longest Substring Without Repeating Characters
- C#起步:WinForm当中的字符
- 使用 C-JDBC 给 Mysql 集群
- 【电脑帮助】解决Wind10系统桌面没有“我的电脑”图标的问题
- nexus配置第三方库文件
- Android控件开发之Gallery3D酷炫效果(带源码)
- 全国青少年编程等级考试scratch三级真题2019年3月(含题库答题软件账号)
- SpringBoot2 学习5集成Thymeleaf
- 引用 孙悟空的师傅菩提祖师的真实真份和镇元大仙辈份排名+四大灵猴
- 小升初随感--年年小升初,一段辛酸史
- 【数据结构】哈希表、哈希值计算分析
- 几种常见窗函数的特性
热门文章
- ui设计师与android,总算知道ui设计师适配的知识点
- 04747_Java语言程序设计(一)_第3章_面向对象编程基础
- 这45个小技巧,帮你写出一手同事都羡慕的漂亮代码!
- 免费的天气预报API接口--谷歌,雅虎,中央气象台
- 计算机英语口语面试自我介绍,英语口语的简单面试自我介绍(精选7篇)
- 用WinForm实现的仿微信聊天系统
- xp未受用户在此计算机登录,XP系统无线网络连接受限制或无连接的解决办法
- 计算机视觉英语论文,计算机视觉导论论文中英双语版(10页)-原创力文档
- vue项目中 axios 请求成功 却进入catch中
- 《我们的梦》——我公司形象歌曲