Skip to content

适配蓝奏云最近的奇奇怪怪的更改 #87

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions lanzou/api/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def __init__(self):
self._account_url = 'https://pc.woozooo.com/account.php'
self._mydisk_url = 'https://pc.woozooo.com/mydisk.php'
self._cookies = None
self._vei = None
self._headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Referer': 'https://pc.woozooo.com/mydisk.php',
Expand Down Expand Up @@ -145,8 +146,17 @@ def login_by_cookie(self, cookie: dict) -> int:
"""通过cookie登录"""
self._session.cookies.update(cookie)
html = self._get(self._account_url)
ylogin = cookie.get('ylogin','')
if ylogin:
self._doupload_url = f"{self._doupload_url}?uid={ylogin}"
if not html:
return LanZouCloud.NETWORK_ERROR
try:
temp = self._get(f"{self._mydisk_url}?item=files&action=index&u={ylogin}")
temp = remove_notes(temp.text)
self._vei = re.findall(r"'vei':'([0-9a-zA-Z=]{10,})'", temp)[0]
except:
return LanZouCloud.OFFICIAL_LIMITED
return LanZouCloud.FAILED if '网盘用户登录' in html.text else LanZouCloud.SUCCESS

def logout(self) -> int:
Expand Down Expand Up @@ -360,7 +370,7 @@ def get_file_list(self, folder_id=-1) -> FileList:
page = 1
file_list = FileList()
while True:
post_data = {'task': 5, 'folder_id': folder_id, 'pg': page}
post_data = {'task': 5, 'folder_id': folder_id, 'pg': page,'vei':self._vei}
resp = self._post(self._doupload_url, post_data)
if not resp: # 网络异常,重试
continue
Expand All @@ -387,7 +397,7 @@ def get_file_list(self, folder_id=-1) -> FileList:
def get_dir_list(self, folder_id=-1) -> FolderList:
"""获取子文件夹列表"""
folder_list = FolderList()
post_data = {'task': 47, 'folder_id': folder_id}
post_data = {'task': 47, 'folder_id': folder_id,'vei':self._vei}
resp = self._post(self._doupload_url, post_data)
if not resp:
return folder_list
Expand Down Expand Up @@ -428,7 +438,7 @@ def get_full_path(self, folder_id=-1) -> FolderList:
"""获取文件夹完整路径"""
path_list = FolderList()
path_list.append(FolderId('LanZouCloud', -1))
post_data = {'task': 47, 'folder_id': folder_id}
post_data = {'task': 47, 'folder_id': folder_id,'vei':self._vei}
resp = self._post(self._doupload_url, post_data)
if not resp:
return path_list
Expand Down Expand Up @@ -602,7 +612,7 @@ def get_share_info(self, fid, is_file=True) -> ShareInfo:
pwd = f_info['pwd'] if f_info['onof'] == '1' else ''
if 'f_id' in f_info.keys(): # 说明返回的是文件的信息
url = f_info['is_newd'] + '/' + f_info['f_id'] # 文件的分享链接需要拼凑
file_info = self._post(self._doupload_url, {'task': 12, 'file_id': fid}) # 文件信息
file_info = self._post(self._doupload_url, {'task': 12, 'file_id': fid,'vei':self._vei}) # 文件信息
if not file_info:
return ShareInfo(LanZouCloud.NETWORK_ERROR)
name = file_info.json()['text'] # 无后缀的文件名(获得后缀又要发送请求,没有就没有吧,尽可能减少请求数量)
Expand Down Expand Up @@ -701,7 +711,7 @@ def get_move_folders(self) -> FolderList:
# 这里 file_id 可以为任意值,不会对结果产生影响
result = FolderList()
result.append(FolderId(name='LanZouCloud', id=-1))
resp = self._post(self._doupload_url, data={"task": 19, "file_id": -1})
resp = self._post(self._doupload_url, data={"task": 19, "file_id": -1,'vei':self._vei})
if not resp or resp.json()['zt'] != 1: # 获取失败或者网络异常
return result
info = resp.json()['info'] or [] # 新注册用户无数据, info=None
Expand All @@ -717,7 +727,7 @@ def get_move_paths(self) -> List[FolderList]:
root = FolderList()
root.append(FolderId('LanZouCloud', -1))
result.append(root)
resp = self._post(self._doupload_url, data={"task": 19, "file_id": -1})
resp = self._post(self._doupload_url, data={"task": 19, "file_id": -1,'vei':self._vei})
if not resp or resp.json()['zt'] != 1: # 获取失败或者网络异常
return result

Expand Down Expand Up @@ -815,7 +825,7 @@ def _call_back(read_monitor):
self._upload_finished_flag = True

monitor = MultipartEncoderMonitor(post_data, _call_back)
result = self._post('https://pc.woozooo.com/fileup.php', data=monitor, headers=tmp_header, timeout=3600)
result = self._post('https://pc.woozooo.com/html5up.php', data=monitor, headers=tmp_header, timeout=3600)
if not result: # 网络异常
file.close()
return LanZouCloud.NETWORK_ERROR
Expand Down Expand Up @@ -1134,7 +1144,7 @@ def get_folder_info_by_url(self, share_url, dir_pwd='') -> FolderDetail:
html = remove_notes(html)
lx = re.findall(r"'lx':'?(\d)'?,", html)[0]
t = re.findall(r"var [0-9a-z]{6} = '(\d{10})';", html)[0]
k = re.findall(r"var [0-9a-z]{6} = '([0-9a-z]{15,})';", html)[0]
k = re.findall(r"var _[0-9a-z]{5} = '([0-9a-z]{15,})';", html)[0]
# 文件夹的信息
folder_id = re.findall(r"'fid':'?(\d+)'?,", html)[0]
folder_name = re.findall(r"var.+?='(.+?)';\n.+document.title", html) or \
Expand Down