首页 > 编程语言 >python操作百度网盘

python操作百度网盘

时间:2023-02-13 15:36:35浏览次数:43  
标签:baidu 百度网 python responsestr self write file 操作 dir

1、首先需要你去百度网盘开放平台申请一个控制台权限

2、开通后新建应用

 

 3、应用新建完之后你会得到:

 

 

 

这是我的代码:

start_web.py

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        list = []

        list.append({'title':'百度网盘device', 'url':'/baidu/device'})
        list.append({'title':'百度网盘token', 'url':'/baidu/token'})
        list.append({'title':'百度网盘用户信息', 'url':'/baidu/userinfo'})
        list.append({'title':'百度网盘文件信息', 'url':'/baidu/filelist'})
        list.append({'title':'百度网盘图片信息', 'url':'/baidu/imglist'})
        self.render('index.html', list=list)

if __name__ == "__main__":
        handlers=[
            (r"/", IndexHandler),
            (r"/baidu/device", baiduwangpan.DeviceHandler),
            (r"/baidu/token", baiduwangpan.TokenHandler),
            (r"/baidu/userinfo", baiduwangpan.UserinfoHandler),
            (r"/baidu/filelist", baiduwangpan.FilelistHandler),
            (r"/baidu/imglist", baiduwangpan.ImglistHandler),
        ],

 

baiduwangpan.py
#coding=utf-8

import tornado.web
import tornado.httpclient
from tornado import gen
import urllib
import json
import datetime
import time
import os,sys
import requests
from awscli.customizations.emr.constants import FALSE


deviceinfo = {}
Appkey = '' #填入你自己的appkey
Secretkey = '' #填入你自己的Secretkey
class DeviceHandler(tornado.web.RequestHandler):
    def get(self):
        payload = {}
        url1 = 'https://openapi.baidu.com/oauth/2.0/device/code?response_type=device_code&client_id=%s&scope=basic,netdisk' % (Appkey)
        response = requests.request("GET", url1, data = payload)
        responsestr = response.text.encode('utf8')
        #print(type(responsestr))
        try:
            file = open("./deviceinfo.txt", 'w', encoding='utf-8')
            file.write(str(responsestr, 'utf-8'))
            file.close()
        except Exception as e:
            pass
                    
        deviceinfo = json.loads(str(responsestr, 'utf-8'))
        #print(deviceinfo)
        
        self.write("%s<br />\n\n" % url1)
        self.write("<img src='"+deviceinfo['qrcode_url']+"' width=200 height=200 /><br />\n\n")
        #self.write(deviceinfo)


class TokenHandler(tornado.web.RequestHandler):
    def get(self):
        
        file = open("./deviceinfo.txt", 'r', encoding='utf-8')
        responsestr = file.read()
        file.close()
        
        deviceinfo = json.loads(responsestr)
        #print(deviceinfo)
                    
        payload = {}
        url2 = 'https://openapi.baidu.com/oauth/2.0/token?grant_type=device_token&code=%s&client_id=%s&client_secret=%s' % (deviceinfo['device_code'], Appkey, Secretkey)
        response = requests.request("GET", url2, data = payload)
        responsestr = response.text.encode('utf8')
        try:
            file = open("./tokeninfo.txt", 'w', encoding='utf-8')
            file.write(str(responsestr, 'utf-8'))
            file.close()
        except Exception as e:
            pass
        tokeninfo = json.loads(str(responsestr, 'utf-8'))
        
        self.write("%s<br />\n\n" % url2)
        self.write(tokeninfo)


class UserinfoHandler(tornado.web.RequestHandler):
    def get(self):
        file = open("./tokeninfo.txt", 'r', encoding='utf-8')
        responsestr = file.read()
        file.close()
        
        tokeninfo = json.loads(responsestr)
        #print(deviceinfo)
                    
        payload = {}
        url3 = 'https://pan.baidu.com/rest/2.0/xpan/nas?method=uinfo&access_token=%s' % tokeninfo['access_token']
        response = requests.request("GET", url3, data = payload)
        responsestr = response.text.encode('utf8')
        
        #self.write(url3)
        userinfo = json.loads(str(responsestr, 'utf-8'))
        #self.write(userinfo)
        self.write("<img src='"+userinfo['avatar_url']+"' width=200 height=200 /><br />\n\n")
        self.write(userinfo['netdisk_name']+"\n\n")


class FilelistHandler(tornado.web.RequestHandler):
    def get(self):
        page = int(self.get_argument("page", 1))
        dir = self.get_argument("dir", "/")
        
        file = open("./tokeninfo.txt", 'r', encoding='utf-8')
        responsestr = file.read()
        file.close()
        
        tokeninfo = json.loads(responsestr)
        #print(deviceinfo)

        limit = 30
        start = (page - 1) * limit
        payload = {}
        url3 = 'https://pan.baidu.com/rest/2.0/xpan/file?method=list&access_token=%s&dir=%s&web=1&start=%s&limit=%s&order=size&desc=0' % (tokeninfo['access_token'], dir, start, limit)
        response = requests.request("GET", url3, data = payload)
        responsestr = response.text.encode('utf8')
        
        #self.write(url3)
        filelist = json.loads(str(responsestr, 'utf-8'))
        #print(filelist)
        count = len(filelist['list'])
        
        prepage = " <a href=\"/baidu/filelist?dir=%s&page=%s\">上一页</a> " % (dir, page-1)
        nextpage = " <a href=\"/baidu/filelist?dir=%s&page=%s\">下一页</a> " % (dir, page+1)
        self.write("<h2>当前目录:%s,文件数量:%s, %s, %s</h2>" % (dir, count, prepage, nextpage))
        self.write("<table border=\"1\" bordercolor=\"#003366\" style=\"border-collapse:collapse;\" width=100%>")
        self.write("<tr bgcolor=\"#CC9966\"><td>顺序</td><td>id</td><td>文件名</td><td>大小</td></tr>")
        k = 0
        for dir in filelist['list']:
            bgcolor = ''
            if k % 2 == 1:
                bgcolor = '#F0FFFF'
            k += 1
            
            if dir['isdir'] == 1:
                filename = "<a href=\"/baidu/filelist?dir="+dir['path']+"\">"+dir['server_filename']+"</a>"
            else:
                filename = dir['server_filename']
                
            try:
                filename = "<img src=\""+dir['thumbs']['url3']+"\">"
            except:
                pass
                
            self.write("<tr bgcolor=\""+bgcolor+"\"><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (k, dir['fs_id'], filename, dir['size']))
        self.write("</table>")


class ImglistHandler(tornado.web.RequestHandler):
    def get(self):
        page = int(self.get_argument("page", 1))
        dir = self.get_argument("dir", "/图片")
        
        file = open("./tokeninfo.txt", 'r', encoding='utf-8')
        responsestr = file.read()
        file.close()
        
        tokeninfo = json.loads(responsestr)
        #print(deviceinfo)
        
        limit = 30
        start = (page - 1) * limit
        payload = {}
        url3 = 'https://pan.baidu.com/rest/2.0/xpan/file?method=imagelist&parent_path=%s&page=%s&access_token=%s&web=1&order=size&desc=0&num=%s' % (dir, page, tokeninfo['access_token'], limit)
        response = requests.request("GET", url3, data = payload)
        responsestr = response.text.encode('utf8')
        
        #self.write(url3)
        filelist = json.loads(str(responsestr, 'utf-8'))
        count = len(filelist['info'])
        #print(filelist)
        prepage = " <a href=\"/baidu/filelist?dir=%s&page=%s\">上一页</a> " % (dir, page-1)
        nextpage = " <a href=\"/baidu/filelist?dir=%s&page=%s\">下一页</a> " % (dir, page+1)
        self.write("<h2>当前目录:%s,图片数量:%s, %s, %s</h2>" % (dir, count, prepage, nextpage))
        if filelist['errno'] != 0:
            pass
        else:
            self.write("<table border=\"1\" bordercolor=\"#003366\" style=\"border-collapse:collapse;\" width=100%>")
            self.write("<tr bgcolor=\"#CC9966\"><td>顺序</td><td>id</td><td>文件类型</td><td>预览</td><td>目录</td><td>修改时间</td><td>大小</td></tr>")
            k = 0
            for dir in filelist['info']:
                bgcolor = ''
                if k % 2 == 1:
                    bgcolor = '#F0FFFF'
                k += 1
                
                category = dir['category']
                icon = "<img src=\""+dir['thumbs']['url3']+"\">"
                    
                self.write("<tr bgcolor=\""+bgcolor+"\"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (k, dir['fs_id'], category, icon, dir['isdir'], dir['server_mtime'], dir['size']))
            self.write("</table>")

 

展示效果:

 

 

 

 

 

 

 

 

 

 

标签:baidu,百度网,python,responsestr,self,write,file,操作,dir
From: https://www.cnblogs.com/xuxiaobo/p/17116522.html

相关文章

  • python的学习之路Day2
    2023.2.13DAY2今日内容概要编程语言的发展史python解释器版本解释器的下载与安装多版本共存(必会)第一个python程序编程软件的下载(pycharm)   ......
  • python retry feature
    简单的retry功能有两种实现方法retrymodule-可以实现简单的retry,指定retry次数。backoffmodule-相对于retry模块,功能更丰富一点。 retryexample......
  • python画图的简单案例
    #导包frompyecharts.chartsimportLinefrompyecharts.optionsimportTitleOpts,ToolboxOpts,LegendOpts,VisualMapOpts#创建一个折线图像对象,即创建一个空的坐标系line......
  • mybatis基于注解的多对多关联操作
    文章目录​​一、前言​​​​二、实体类:​​​​1、角色类RoleInfo​​​​2、权限类:ModuleInfo​​​​3、中间表ModuleRole​​​​三、多对多操作​​​​1、向中间表......
  • redis命令操作list和set&sortedset以及通用命令
    列表类型list:可以添加一个元素到列表的头部(左边)或者尾部(右边) 1.添加: 1.lpushkeyvalue:将元素加入列表左表 2.rpushkeyvalue:将元素加入列表右边 ......
  • python 导包失败:--ImportError: No module named XXXX
    问题Traceback(mostrecentcalllast):File"/home/app/auto_train/scripts/train_auto/train_auto.py",line5,in<module>frommonitorimportyarn_monitorIm......
  • java使用JDBC与mysql进行连接基础操作
    packagecom.atguigu.api.statement;importcom.mysql.cj.jdbc.Driver;importjava.sql.*;//使用statement查询t_user表下所有用户数据//在连接前要导入数据库连接的jar包p......
  • Python缓存机制
    1.什么是缓存机制Python对象在创建的时候,会为其开辟一个内存,当变量引用该对象时,实际上是指向该对象的内存地址,当该对象不在被引用,会被垃圾回收机制回收,释放内存。但......
  • python datetime 时间模块
    datetime.now()会得到当前时间,datetime.datetime(2023,2,13,17,24,29,309381currentDateAndTime=datetime.now()print(f'Time:{currentDateAndTime.year}/{cur......
  • redis数据结构介绍和redis命令操作string&hash
    redis的数据结构:*redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构*value的数据结构:(1)字符串类型string(2......