def share(self, *remotepaths: str, password: Optional[str] = None): """Share `remotepaths` to public""" assert self._stoken, "`STOKEN` is not in `cookies`" meta = self.meta(*remotepaths) fs_ids = [i["fs_id"] for i in meta["list"]] url = PanNode.Share.url() params = { "channel": "chunlei", "clienttype": "0", "web": "1", "bdstoken": self.bdstoken, } data = { "fid_list": dump_json(fs_ids), "schannel": "0", "channel_list": "[]", } if password: data["pwd"] = password data["schannel"] = "4" resp = self._request(Method.Post, url, params=params, data=data) info = resp.json() # errno: 115, '该文件禁止分享'. 但也能分享出去。。。 if info.get("errno") == 115: info["errno"] = 0 # assign 0 to avoid capture error return info
def combine_slices( self, slice_md5s: List[str], remotepath: str, local_ctime: Optional[int] = None, local_mtime: Optional[int] = None, ondup="overwrite", ): url = PcsNode.File.url() params = { "method": "createsuperfile", "path": remotepath, "ondup": ondup, "BDUSS": self._bduss, } ntp = now_timestamp() data = { "param": dump_json({"block_list": slice_md5s}), "local_ctime": str(local_ctime or ntp), "local_mtime": str(local_mtime or ntp), } resp = self._request(Method.Post, url, params=params, data=data) return resp.json()
def transfer_shared_paths( self, remotedir: str, fs_ids: List[int], uk: int, share_id: int, bdstoken: str, shared_url: str, ): """`remotedir` must exist""" url = self._form_url(PcsNode.TransferShared, domain=PAN_BAIDU_COM) params = { "shareid": str(share_id), "from": str(uk), "bdstoken": bdstoken, "channel": "chunlei", "clienttype": "0", "web": "1", } data = { "fsidlist": dump_json(fs_ids), "path": remotedir, } hdrs = dict(PAN_HEADERS) hdrs["X-Requested-With"] = "XMLHttpRequest" hdrs["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8" hdrs["Origin"] = "https://pan.baidu.com" hdrs["Referer"] = shared_url # WARNING: Referer must be set to shared_url resp = self._request(Method.Post, url, headers=hdrs, params=params, data=data) return resp.json()
def cancel_shared(self, *share_ids: int): url = self._form_url(PcsNode.SharedCancel, domain=PAN_BAIDU_COM) data = { "shareid_list": dump_json(share_ids), } hdrs = dict(PCS_HEADERS) hdrs["Content-Type"] = "application/x-www-form-urlencoded" resp = self._request(Method.Post, url, headers=hdrs, params=None, data=data) return resp.json()
def combine_slices(self, slice_md5s: List[str], remotepath: str, ondup="overwrite"): url = self._form_url(PcsNode.File) params = { "method": "createsuperfile", "path": remotepath, "ondup": ondup, "BDUSS": self._bduss, } data = {"param": dump_json({"block_list": slice_md5s})} resp = self._request(Method.Post, url, params=params, data=data) return resp.json()
def file_operate(self, operate: str, param: List[Dict[str, str]]): url = PcsNode.File.url() params = {"method": operate} data = {"param": dump_json({"list": param})} resp = self._request(Method.Post, url, params=params, data=data) return resp.json()