Skip to content
This repository has been archived by the owner on Dec 17, 2019. It is now read-only.

Shared link with pickup password need cookie now #230

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Fix bad escape in JSON return for list share
baidu escapes ' with \ which is invalid for JSON. Python
json parser cannot handle invalid escape very well.
mozbugbox committed Mar 17, 2016
commit 1b5738db38584866b2c0da3f659bcc4de101f8aa
16 changes: 9 additions & 7 deletions bcloud/pcs.py
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
import json
import os
import re
import traceback

from lxml import html
from lxml.cssselect import CSSSelector as CSS
@@ -168,6 +169,7 @@ def parse_share_page(content):
else:
json_str = script.text[start+33:end]
try:
json_str = util.fix_json_escape(json_str)
return json.loads(json.loads(json_str))
except ValueError:
logger.warn(traceback.format_exc())
@@ -270,7 +272,7 @@ def verify_share_password(cookie, uk, shareid, pwd, vcode=''):
'''验证共享文件的密码.

如果密码正确, 会在返回的请求头里加入一个cookie: BDCLND

pwd - 四位的明文密码
vcode - 验证码; 目前还不支持
'''
@@ -559,7 +561,7 @@ def mkdir(cookie, tokens, path):
@return 返回一个dict, 里面包含了fs_id, ctime等信息.
'''
url = ''.join([
const.PAN_API_URL,
const.PAN_API_URL,
'create?a=commit&channel=chunlei&clienttype=0&web=1',
'&bdstoken=', tokens['bdstoken'],
])
@@ -843,7 +845,7 @@ def rapid_upload(cookie, tokens, source_path, path, upload_mode):

def slice_upload(cookie, data):
'''分片上传一个大文件

分片上传完成后, 会返回这个分片的MD5, 用于最终的文件合并.
如果上传失败, 需要重新上传.
不需要指定上传路径, 上传后的数据会被存储在服务器的临时目录里.
@@ -943,7 +945,7 @@ def search(cookie, tokens, key, path='/'):
def cloud_add_link_task(cookie, tokens, source_url, save_path,
vcode='', vcode_input=''):
'''新建离线下载任务.

source_url - 可以是http/https/ftp等一般的链接
可以是eMule这样的链接
path - 要保存到哪个目录, 比如 /Music/, 以/开头, 以/结尾的绝对路径.
@@ -1049,7 +1051,7 @@ def cloud_query_sinfo(cookie, tokens, source_path):

def cloud_query_magnetinfo(cookie, tokens, source_url, save_path):
'''获取磁链的信息.

在新建磁链任务时, 要先获取这个磁链的信息, 比如里面包含哪些文件, 文件的名
称与大小等.

@@ -1077,7 +1079,7 @@ def cloud_query_magnetinfo(cookie, tokens, source_url, save_path):

def cloud_list_task(cookie, tokens, start=0):
'''获取当前离线下载的任务信息

start - 从哪个任务开始, 从0开始计数, 会获取这50条任务信息
'''
url = ''.join([
@@ -1121,7 +1123,7 @@ def cloud_query_task(cookie, tokens, task_ids):

def cloud_cancel_task(cookie, tokens, task_id):
'''取消离线下载任务.

task_id - 之前建立离线下载任务时的task id, 也可以从cloud_list_task()里
获取.
'''
6 changes: 6 additions & 0 deletions bcloud/util.py
Original file line number Diff line number Diff line change
@@ -208,3 +208,9 @@ def validate_pathname(filepath):
if path[0] in filter3 or path[-1] in filter3:
return ValidatePathState.CHAR_ERROR3
return ValidatePathState.OK

def fix_json_escape(json_str):
# Remove invalid escape
json_str = re.sub(r'\\(?![\\"/bfnrt])', "", json_str)
return json_str