Python 一键获取百度网盘提取码的方法


Posted in Python onAugust 01, 2019

Python 一键获取百度网盘提取码的方法

该 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()

运行效果如下图所示:

Python 一键获取百度网盘提取码的方法

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()

运行效果如下图所示:

Python 一键获取百度网盘提取码的方法

总结

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

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

相关参考

  • 云盘万能钥匙
  • JS 版

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python抓取京东图书评论数据
Aug 31 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
python 编写简单网页服务器的实例
Jun 01 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python3 mmh3安装及使用方法
Oct 09 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Python快速实现一键抠图功能的全过程
Jun 29 Python
Django中的静态文件管理过程解析
Aug 01 #Python
pycharm 批量修改变量名称的方法
Aug 01 #Python
python腾讯语音合成实现过程解析
Aug 01 #Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 #Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 #Python
Python中list的交、并、差集获取方法示例
Aug 01 #Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 #Python
You might like
PHP脚本数据库功能详解(下)
2006/10/09 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python 字典访问的三种方法小结
2019/12/05 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
人事主管的岗位职责
2013/11/16 职场文书
《观舞记》教学反思
2014/04/16 职场文书
我的老师教学反思
2014/05/01 职场文书
数控机床专业自荐信
2014/05/19 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript