py實現百度雲批量生成文件共享連接

背景

最近在設計本站PDF電子書頁面的時候發現針對百度雲PDF目錄下的電子書生成不加密的共享連接很不方便。json

 

有人可能問那麼多文件生成一個共享連接供你們下載那多方便?不存在的,防止大家一次性保存到本身百度雲而後跑路。api

 

每次都要一個一個右鍵共享生成,這樣不只容易出錯,眼花繚亂,並且效率低,浪費時間等等。因此打算經過程序實現,正好百度了一下,發現有Python對應的百度雲的API,正好練練手。cookie

環境準備

Python3.5.3,Windows操做系統,pycharm,Python包(setuptools,pyinstaller,baidupcsapi等反正缺啥模塊安啥模塊)app

開始搬磚

新建類

打開pycharm,新建Python文件,命名爲BaiduYunLinksShare.py函數

導入模塊

from baidupcsapi import PCS
import time
import json

編寫init函數

def __init__(self, username, password, sharedir):
        self.username = username
        self.passwrod = password
        self.sharedir = sharedir
        encrypt_password = "%s*****%s" % (password[:2], password[-2:])
        print("您輸入的帳號:%s,密碼:%s,須要批量生成共享鏈接的目錄是:%s" % (username, encrypt_password, sharedir))

解釋:學習

  • 默認實例化BaiduYunLinksShare類使須要傳入百度雲用戶名,百度雲密碼,須要批量生成共享連接的百度雲目錄
  • 針對密碼進行輸出加密用星號代替中間部分

客戶端鏈接

def client(self):
    return PCS(self.username, self.passwrod)

解釋:加密

  • 經過用戶名和密碼鏈接百度雲的客戶端並做爲返回值返回
  • 第一次鏈接須要驗證碼驗證,會在C盤用戶目錄下生成一個臨時圖片.png,根據png上的漢字進行輸入,填寫正確後會默認生成一個cookie文件,之後再次使用就不須要圖片驗證了。

生成cookie文件截圖spa

第一次輸入驗證碼截圖操作系統

 

驗證目錄是否存在

def input_path_exist(self, client):
    input_path_exist_flag = client.list_files(self.sharedir, "size", "asc").json().get('errno')
    if input_path_exist_flag == -9:  # errno=-9 目錄不存在 不然返回該目錄下的文件詳情
        return False
    else:
        return pcs.list_files(self.shardir, "size", "asc").json().get('list')

解釋:設計

  • 首先須要根據返回碼判斷傳入的目錄是否正確,正確的話返回文件列表集合,不正確返回False

主函數

baiduyun = BaiduYunLinksShare(username, password, dir_path)
pcs = baiduyun.client()
input_path_exist = baiduyun.input_path_exist(pcs)
file_ids_list = []
if input_path_exist is False:
    print(">>>>>您輸入的須要批量生成共享鏈接的目錄不存在")
else:
    for i, file in enumerate(input_path_exist):
        file_ids_list.append(file.get('fs_id'))
        res_json = json.loads(pcs.share(file_ids_list).text)
        if res_json['errno'] != 0:
            print(">>>>>您今天的分享次數可能已經達到上限")
            break
        else:
            res = "序號:[%s] 共享文件:%s 共享連接:%s" % (i, file.get('server_filename'), res_json['link'])
            print(res)
            try:
                with open(r'D:\baiduyun_share.txt', 'a+', encoding='UTF-8') as f:
                    f.write(res)
                    f.write('\n')
                    file_ids_list = []
                    time.sleep(2)
            except Exception as e:
                print(str(e))
            else:
                f.close()
                print(">>>>>連接已經保存在D:\\baiduyun_share.txt文件中")

解釋:

  • 實例化BaiduYunLinksShare.py,並鏈接客戶端,判斷傳入的目錄是否存在
  • 根據文件號來實現文件共享
  • 將共享的文件返回信息中的共享連接輸入到文件中進行保存
  • 判斷當天共享的連接數是否已達上限

總結

以上就是批量實現共享百度雲某個目錄下的文件連接的主要代碼了,僅供我的學習。

 

相關文章
相關標籤/搜索