该 GIF 图来自于官网,文末有给出链接。

描述

依托于百度网盘巨大的的云存储空间,绝大数人会习惯性的将一些资料什么的存储到上面,但是有的私密链接需要提取码,但是让每个想下载私密资源的人记住每一个提取码显然是不现实的。这个时候,云盘万能钥匙 诞生了,我们通过安装相应的浏览器插件就可以自动获获取相应链接的提取码。我在 Github 上看了一下,有 Web JS 版的, python 版的貌似还没有找到,所以我参照了JS 版本和官网的请求接口写了两种方式的获取脚本。

实现

下述两种方式的具体实现就不做代码解释了,思路都是一样,通过请求接口,拿到数据,然后返回即可。

v1

"""
Author:hippieZhou
Date:20190608
Description: Get BaiDuYun shared link's Code
"""
import argparse
import re
import requests
import json
import time VERSION = "VERSION 1.0.0" def checkUrl(url: str) -> str:
m1 = re.match(
"https?:\/\/pan\.baidu\.com\/s\/1([a-zA-Z0-9_\-]{5,22})", url)
m2 = re.match(
"https?:\/\/pan\.baidu\.com\/share\/init\?surl=([a-zA-Z0-9_\-]{5,22})", url)
if not m1 and not m2:
print("参数不合法")
return False
else:
return True def getKey(url: str) -> bool:
if checkUrl(url):
try:
req = requests.get(f"https://node.pnote.net/public/pan?url={url}")
code = req.status_code
if code == 200:
data = dict(json.loads(req.text))
status = data.get("status", False)
if status:
return data.get("access_code", "未能查询到该链接的提取码,可能原因是:该链接不需要提取码或已过期")
else:
return data.get("messages", "为能查询到提取码")
elif code == 404:
return "不存在该链接的记录"
except Exception as e:
return f"请求服务器失败,错误代码:{code}" def get_parser():
parser = argparse.ArgumentParser()
parser.description = "百度网盘提取码一键获取器"
parser.add_argument('urls', metavar="urls", type=str, nargs="*",
help='设置要获取提取码的链接(多个链接请用空格分隔)')
parser.add_argument('-v', '--version', action='store_true',
help='版本号')
return parser def command_line_runner():
parser = get_parser()
args = vars(parser.parse_args())
if args['version']:
print(VERSION)
return s_time = time.time()
if len(args['urls']) > 1:
for item in args["urls"][1:]:
print(f"{item}:\r\n\t{getKey(item)}")
e_time = time.time()
print(f"\n\n操作完毕,总耗时:{e_time-s_time} 秒") def main():
command_line_runner() if __name__ == "__main__":
main()

运行效果如下图所示:

v2

"""
Author:hippieZhou
Date:20190608
Description: Get BaiDuYun shared link's Code
""" import argparse
import time
import re
import requests
from datetime import datetime
import json accessKey = "4fxNbkKKJX2pAm3b8AEu2zT5d2MbqGbD"
clientVersion = "web-client" def getPid(url: str) -> str:
matches = re.match(
"https?:\/\/pan\.baidu\.com\/s\/1([a-zA-Z0-9_\-]{5,22})", url)
return matches[1] if matches else None def getUuid(pid: str) -> str:
return f"BDY-{pid}" def getKey(url: str) -> str:
pid = getPid(url)
uuid = getUuid(pid)
headers = {
"type": "GET",
"data": '',
"dataType": "json"
}
url = f"http://ypsuperkey.meek.com.cn/api/items/{uuid}?access_key={accessKey}&client_version={clientVersion}&{datetime.utcnow()}"
try:
req = requests.get(url, headers=headers)
code = req.status_code
if code == 200:
data = json.loads(req.text)
accessCode = data.get("access_code", None)
return "没找到提取密码,o(╥﹏╥)o" if (accessCode == "undefined" or accessCode == None or accessCode == "") else accessCode
elif code == 400:
return " 服务器不理解请求的语法"
elif code == 404:
return "不存在该链接的记录"
else:
return f"请求服务器失败,错误代码:{code}"
except Exception as e:
return e def get_parser():
parser = argparse.ArgumentParser()
parser.description = "百度网盘提取码一键获取器"
parser.add_argument('urls', metavar="urls", type=str, nargs="*",
help='设置要获取提取码的链接(多个链接请用空格分隔)')
parser.add_argument('-v', '--version', action='store_true',
help='版本号')
return parser def command_line_runner():
parser = get_parser()
args = vars(parser.parse_args())
if args['version']:
print(VERSION)
return s_time = time.time()
if len(args['urls']) > 1:
for item in args["urls"][1:]:
print(f"{item}:\r\n\t{getKey(item)}")
e_time = time.time()
print(f"\n\n操作完毕,总耗时:{e_time-s_time} 秒") def main():
command_line_runner() if __name__ == "__main__":
main()

运行效果如下图所示:

总结

v1 版本和 v2 版本是通过请求不同的接口方式来实现的, v2 接口的数据要相对更准确一些。具体可查阅具体的代码实现。

如果你觉得上述代码不错的话,欢迎访问对应的仓库地址: baidupankey 进行 starforkfollow

相关参考

Python 一键获取百度网盘提取码的更多相关文章

  1. 利用Python爬虫实现百度网盘自动化添加资源

    事情的起因是这样的,由于我想找几部经典电影欣赏欣赏,于是便向某老司机寻求资源(我备注了需要正规视频,绝对不是他想的那种资源),然后他丢给了我一个视频资源网站,说是比较有名的视频资源网站.我信以为真,便 ...

  2. python自动保存百度网盘资源

    觉得有帮助的别忘了关注一下知识图谱与大数据公众号,完整代码移步从今天开始种树 开始 在上一文中,我们保存了百度云盘的地址和提取码,但是这种分享链接很容易被屏蔽,最好的做法就是保存资源到自己的网盘,不过 ...

  3. python自动保存百度网盘资源,一定要看

    觉得有帮助的别忘了关注一下知识图谱与大数据公众号 开始 在上一文中,我们保存了百度云盘的地址和提取码,但是这种分享链接很容易被屏蔽,最好的做法就是保存资源到自己的网盘,不过采集的链接有上万个,人肉保存 ...

  4. 百度网盘不限速下载PanDownload网页版+IDM

    1.安装配置IDM 下载链接:链接:https://pan.baidu.com/s/13P4ae-IPgi5Y13CGEZgmlg 提取码:do44 安装后在浏览器(推荐chrome或Firefox) ...

  5. 用php实现百度网盘图片直链的代码分享

    第一种代码:代码量较少通过正则表达式获取百度网盘的文件真实地址,来实现直链的效果 将下面的代码保存为downbd.php 复制代码代码如下: <?php $canshu=$_SERVER[&qu ...

  6. C# 学习之路--百度网盘爬虫设计与实现(一)

    百度网盘爬虫 现在市面上出现了很多网盘搜索引擎,写这系列博文及爬虫程序的初衷: 更方面的查找资源 学习C# 学习爬虫的设计与实现 记录学习历程 自我监督 能力有限,如有不妥之处,还请各位看官点评.同在 ...

  7. linux 从百度网盘下载文件的方法

    linux 从百度网盘下载文件的方法 发表于2015 年 月 日由shenwang 方法1.wget wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括 ...

  8. 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!

    百度网盘已然成为分享型网盘中一家独大的“大佬”了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了“感人”的地步了,常常十多KB/秒的速度真 ...

  9. 百度网盘快速下载工具下载:Pandownload下载

    众所周知的百度网盘下载限速很厉害,所以就有了快速下载工具出现了.一般情况下,按照家里网速有多快,使用工具下载就有多快. 可以直接复制如下图进行下载: 另外,PanDownload[百度网盘下载工具]无 ...

随机推荐

  1. VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别

    VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机: VMnet1:这是VMware用于虚拟Host-Only网络下的虚拟交换机: VMnet8:这是VMware用于虚拟NAT网络下的虚拟交 ...

  2. Linux vi与vim使用

    vi与vimvi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对U ...

  3. 发布一个基于协程和事件循环的c++网络库

    目录 介绍 使用 性能 实现 日志库 协程 协程调度 定时器 Hook RPC实现 项目地址:https://github.com/gatsbyd/melon 介绍 开发服务端程序的一个基本任务是处理 ...

  4. C语言笔记 08_函数指针&回调函数&字符串&结构体&位域

    函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: / ...

  5. [ASP.NET Core 3框架揭秘] 文件系统[3]:物理文件系统

    ASP.NET Core应用中使用得最多的还是具体的物理文件,比如配置文件.View文件以及作为Web资源的静态文件.物理文件系统由定义在NuGet包"Microsoft.Extension ...

  6. aspnet boilerplate 随笔一

    使用abp模板进行项目开发: 1:准备工作:我使用v2.x版本,所以会依赖.net core 2.2 查看并更新本地环境: 更新.net core版本:cmd 运行 dotnet --version查 ...

  7. Oracle 创建用户,赋予指定表名/视图只读权限

    步骤指南 创建用户 格式:; 语法:create user 用户名 identified by 密码; 注:密码不行的话,前后加(单引号):' create user TEST identified ...

  8. JS---DOM/BOM---学习road map---7 parts

    JS---DOM/BOM---学习road map---6 parts Part 1-2: Part 3-4 part 5-7:

  9. CentOS 服务器版安装教程(超级详细图解)

    使用安装说明:http://www.jb51.net/os/85895.html

  10. oracle数据库执行sql文件

    使用oracle客户端连接数据库,从oracle官网下载客户端instantclient_18_3工具,到目录下打开cmd命令窗口: 个人网盘客户端工具:https://pan.baidu.com/s ...