Esempio n. 1
0
    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
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()
Esempio n. 4
0
 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()
Esempio n. 5
0
 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()
Esempio n. 6
0
 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()