百度云获取全部文件API探索

通过抓包发现百度云获取文件列表接口https://pan.baidu.com/api/list,本文主要试图通过该接口来封装一个获取百度网盘文件的api接口

1.抓包分析

2.代码实现

#! /usr/bin/python3
# -*- coding: UTF-8 -*-

import time, requests, json, urllib, sys, os

def get_dir_path (dir_path, bdstoken, cookies, db_file):

    flag = True

    dir_path = urllib.parse.quote (dir_path)
    dir_path = dir_path.replace (‘/‘, ‘%2F‘)

    page = 1

    args = []

    ret_list_all = []
    ret_list_dir = []

    while True:
        url = ‘https://pan.baidu.com/api/list?‘
        url += ‘app_id=250528‘
        url += ‘&bdstoken=‘ + bdstoken
        url += ‘&channel=chunlei‘
        url += ‘&clienttype=0‘
        url += ‘&desc=1‘
        url += ‘&dir=‘ + dir_path
        url += ‘&logid=MTUzNDM4NDk3MjYzNDAuNTAyODg4NzM4MTQyNDE0Nw==‘
        url += ‘&num=100‘
        url += ‘&order=time‘
        url += ‘&page=‘ + str (page)
        url += ‘&showempty=0‘
        url += ‘&web=1‘

        Cookie = ‘‘
        for item in cookies:
            if item [‘name‘] == ‘BDUSS‘ or item [‘name‘] == ‘STOKEN‘:
                Cookie += item [‘name‘] + ‘=‘ + item [‘value‘] + ‘;‘
        Cookie.rstrip (‘;‘)

        headers = {
                "Accept": "application/json, text/javascript, */*; q=0.01",
                "Accept-Encoding": "gzip, deflate, br",
                "Accept-Language": "zh-CN,zh;q=0.9",
                "Connection": "keep-alive",
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "Cookie": Cookie,
                "Host": "pan.baidu.com",
                "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
                }

        try:
            response = requests.get (url = url, headers = headers)
            content = json.loads (response.text)
            if content [‘list‘] == []:
                break
            else:
                for file_item in content [‘list‘]:
                    fs_id = file_item [‘fs_id‘]
                    path = file_item [‘path‘]
                    name = file_item [‘server_filename‘]
                    size = file_item [‘size‘]
                    try:
                        md5 = file_item [‘md5‘]
                    except:
                        md5 = ‘md5‘
                    isdir = file_item [‘isdir‘]

                    arg = (str (fs_id), path, name, str (size), md5, isdir, str (file_item))
                    args.append (arg)

                    if isdir == 1:
                        ret_list_dir.append (path)
                    ret_list_all.append (path)
        except BaseException as e:
            print (‘Error Function: get_dir_path (dir_path, bdstoken, cookies, db_file)‘)
            print (‘Error Argument:‘, urllib.parse.unquote (dir_path))
            print (‘Error :‘, response.text)
            print (‘Error Reason :‘, e)
            flag = False
            break

        page += 1

    return flag, ret_list_dir, ret_list_all

def get_all_files (username, bdstoken, cookies, db_file):

    flag, cur_list, all_list = get_dir_path (‘/‘, bdstoken, cookies, db_file)
    retry_list = []
    while len (cur_list) != 0:
        cur_path = cur_list [0]
        cur_list.pop (0)
        #print (‘next dir path :‘, cur_path)
        flag, ret_list, all_list = get_dir_path (cur_path, bdstoken, cookies, db_file)
        if flag:
            cur_list.extend (ret_list)
            #print (‘len (cur_list) :‘, len (cur_list))
            #print (‘depth :‘, cur_path.count (‘/‘))
            #print (‘*‘ * 64)
        else:
            retry_list.append (cur_path)

    if len (retry_list) == 0:
        print (‘get all files successful‘)

        if os.path.exists (‘error_dir_path_list_‘ + username):
            os.remove (‘error_dir_path_list_‘ + username)
    else:
        print (‘retry_list is :‘, retry_list)
        print (‘start get retry_list‘)

        cur_list = retry_list
        retry_list = []
        while len (cur_list) != 0:
            cur_path = cur_list [0]
            cur_list.pop (0)
            #print (‘next dir path :‘, cur_path)
            flag, ret_list, all_list = get_dir_path (cur_path, bdstoken, cookies, db_file)
            if flag:
                cur_list.extend (ret_list)
                #print (‘len (cur_list) :‘, len (cur_list))
                #print (‘depth :‘, cur_path.count (‘/‘))
                #print (‘*‘ * 64)
            else:
                retry_list.append (cur_path)

        if len (retry_list) == 0:
            print (‘get all files successful‘)
        else:
            print (‘retry_list is :‘, retry_list)

3.代码分析

此代码与上一篇文章百度云删除文件API接口探索紧密关联,其中部分代码共用,主要体现在bdstoken和cookie的获取方面,此文不多做赘述

需要注意的是,构造数据请求链接时,文件路径需要做urldecode,但是Python3中对“/”不做处理,需要手动替换才能正确获取

get_all_files则通过宽度优先遍历的方式遍历全部文件

原文地址:https://www.cnblogs.com/countryKing/p/9533125.html

时间: 2024-10-09 18:08:46

百度云获取全部文件API探索的相关文章

百度云超4g文件如何上传

CreateTime--2017年7月10日07:58:56Author:Marydon 制作工具:比特彗星软件 下载地址:Bitcomet V1.45绿色版 http://www.ouyaoxiazai.com/soft/llrj/56/1259.html#dizhi 参考链接:http://jingyan.baidu.com/article/59a015e34f1870f7948865fe.html 菜单栏-->文件-->制作torrent文件-->选择要制作成torrent文件的单

配置IDM不限速下载百度云的大文件

IDM介绍Internet Download Manager(简称IDM)是一个用于Windows系统的下载管理器,它是共享软件,免费试用期为30天,但是每月均有一段时间优惠. IDM可以让用户自动下载某些类型的文件,它可将文件划分为多个下载点以更快下载,并列出最近的下载,方便访问文件.相对于其它下载管理器,它具有独特的动态档案分区技术. IDM本身自带网页视频监视和音频监视功能,所以只要你的浏览器支持IDM的扩展连接就会自动下载. 如果嫌其频繁的过于弹出下载框,这时候的解决方法就是打开IDM,

百度联盟“获取验证文件失败或文件错误”解决办法

许多朋友都用过百度联盟,不过,我相信好多朋友都会遇到过这种情况,不管你的网站是备-案了还是没备-案,你在申请百度联盟的时候都会遇到网站验证不成功的问题,提示获取验证文件失败或文件错误,请您确认正确放置后,再次点击"完成验证"按钮,如下图: 我以前没有用过百度联盟,不过我以前用过淘宝联盟.前些天我在申请百度联盟的时候需要验证网站权限,就是下载验证文件上传到网站根目录,然后点击验证的. 不过,我发现怎么验证都不成功,我的文件明明也上传到网站的根目录了.其实,对于这个问题我一直就知道怎么解决

百度云文件的下载方案

1.在百度云的连接前面,添加https,然后点击下载,如果是360浏览器,选择迅雷下载.(相对安全一些,但是很可能被ban掉) 2.搜一个百度云不限速文件,然后直接免安装启动下载.(百度云的会员现在也很多免费帐号,如果无法忍受百度云的限速,那就尝试换到360云盘,或者阿里云盘.)

你下载的文件过大 请使用百度云管家

很多人都会使用百度网盘,但是当我们从百度云下载大文件时,百度云会强制使用百度云管家下载,这让很多习惯用迅雷等其他下载工具的用户很苦恼,因此笔者这里介绍一种不使用百度云管家从百度云下载大文件的方法. 首先,打开浏览器,进入百度云网盘,找到一个大文件下载,会发现百度云要求安装并使用百度云管家下载大文件.为了跳过用百度云管家下载大文件,我们进入百度云的wap网页(链接见参考资料),找到相应的大文件并下载,可以发现此时百度云并不会强制使用百度云管家下载文件,即可以用其他的下载器下载大文件了.百度云wap

Android 高仿微信实时聊天 基于百度云推送

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百度云推送仿一仿微信聊天了~~~ 首先特别感谢:weidi1989分享的Android之基于百度云推送IM ,大家可以直接下载:省了很多事哈,本例中也使用了weidi的部分代码,凡是@author way的就是weidi1989的代码~~ 1.效果图 核心功能也就上面的两张图了~~~我拿着手机和模拟器

百度云存储教程---免费建立自己的静态网站

欢迎訪问的我个人站点:点击打开链接--我的个人站点    想建设个人站点的朋友能够找我聊.无门槛,就能永远自己的永久域名和server空间,全然免费哦 曾经开发的站点苦于没有云server,站点没地方挂,如今百度出了云存储和应用引擎,能够让开发人员免费上传动态站点和静态站点.这篇文章,我准备用云存储的方式,存储用户的静态站点,开发人员可通过将静态页面上传至云存储空间中,并将其訪问权限设置为公开读,就可以实现静态站点的效果.文章底部有源代码和项目下载. 一.实现效果 本地目录 上传成后百度云存储的

百度云满速下载原理与方法

前言 今天给大家介绍一款好用的开源工具proxyee-down,之前已经测试了好多天了,挺强大,可以满速下载百度云里的文件,而且不用输入账号,因此不存在盗号的可能性. github地址: https://github.com/proxyee-down-org/proxyee-down 百度云下载地址: https://pan.baidu.com/share/init?surl=fgBnWJ0gl6ZkneGkVDIEfQ ,密码d92x. 百度大文件破解 1.限速与封号 使用过百度云的朋友肯定知

删除百度云同步盘

今天在查找文件的时候,偶然发现自己的计算机中出现百度云同步盘,记得自己已经将百度云盘的软件进行了删除它,但是这个图标仍然还在,很是头疼,所以进行了一些删除的尝试: 首先说明一下:本人电脑win7 家庭普通版 64位 百度云盘已经删除 百度云管家已经删除 百度云同步盘文件夹属性为不可知 右键没有删除选项 尝试 1:打开注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameS