[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脚本相关推荐

  1. html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传

    (给DotNet加星标,提升.Net技能) 转自:学习中的苦与乐 cnblogs.com/xiongze520/p/10412693.html 现在的项目开发基本上都用到了上传文件功能,或图片,或文档 ...

  2. python mac os安装教程_教程:在 Mac OS X 上安装 TensorFlow

    简评:手把手教你如何在 Mac OSX 系统安装 TensorFlow. 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 ...

  3. ajax文件插件上传,7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 具有多文件上传.拖 ...

  4. 拖拽文件夹上传 一(基于Vue的文件夹上传组件)

    前言 首先说一下,小弟第一次写文章,如果有什么错误 还望小哥哥 小姐姐多多包涵.如果有什么缺陷还望大家指出来 让小弟多学习. 内容划分 上传文件夹一共分两部分来写 一方面怕太长了 大家看五分钟就不想看 ...

  5. vue 文件及描述信息一起上传_用Vue实现一个大文件上传和断点续传

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding ...

  6. python二手房使用教程_python实战:基于链家网二手房数据解析任务

    实战:基于链家网二手房数据解析任务 页面:https://bd.ke.com/ershoufang/ 获取如下信息: 标题 位置 房屋信息 关注人数 / 发布时间 房屋总价 房屋单价 备注信息 1.导 ...

  7. python画函数图像网格_如何基于Python Matplotlib实现网格动画

    -1- 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看.第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了. 这篇文章虽然不是篇典型的数据科学类文章,不过 ...

  8. python论坛系统源码_十个基于Python的BBS论坛类开源web框架汇总(附源码地址

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  9. python建站的缺点_记录一下自己的建站过程(三):Python与Django

    前言(都是唠叨) 讲完了前端了,后端开始了.还是pml老师,因为我后面的课都没听过,所以一直都是不知道后端到底是怎么工作的.只听过一个词叫Tornado,对就真的只知道这个词,龙卷风,它是个啥我到现在 ...

最新文章

  1. raid模式_基于网络的磁盘热备技术|网络RAID-1
  2. Spring Cloud Alibaba 高级特性 应用性能监控:通过 SkyWalking 实施链路追踪
  3. oracle11g程序调优纪实
  4. DevOps笔记-10:金融行业分支策略的建议
  5. BS程序代码与安全与基本攻击/防御模式
  6. BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)
  7. 在linux命令行中直接执行php命令
  8. 【LeetCode笔记】461. 汉明距离(Java、位运算)
  9. leetcode3. Longest Substring Without Repeating Characters
  10. C#起步:WinForm当中的字符
  11. 使用 C-JDBC 给 Mysql 集群
  12. 【电脑帮助】解决Wind10系统桌面没有“我的电脑”图标的问题
  13. nexus配置第三方库文件
  14. Android控件开发之Gallery3D酷炫效果(带源码)
  15. 全国青少年编程等级考试scratch三级真题2019年3月(含题库答题软件账号)
  16. SpringBoot2 学习5集成Thymeleaf
  17. 引用 孙悟空的师傅菩提祖师的真实真份和镇元大仙辈份排名+四大灵猴
  18. 小升初随感--年年小升初,一段辛酸史
  19. 【数据结构】哈希表、哈希值计算分析
  20. 几种常见窗函数的特性

热门文章

  1. ui设计师与android,总算知道ui设计师适配的知识点
  2. 04747_Java语言程序设计(一)_第3章_面向对象编程基础
  3. 这45个小技巧,帮你写出一手同事都羡慕的漂亮代码!
  4. 免费的天气预报API接口--谷歌,雅虎,中央气象台
  5. 计算机英语口语面试自我介绍,英语口语的简单面试自我介绍(精选7篇)
  6. 用WinForm实现的仿微信聊天系统
  7. xp未受用户在此计算机登录,XP系统无线网络连接受限制或无连接的解决办法
  8. 计算机视觉英语论文,计算机视觉导论论文中英双语版(10页)-原创力文档
  9. vue项目中 axios 请求成功 却进入catch中
  10. 《我们的梦》——我公司形象歌曲