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中splitlines()方法的使用简介
May 20 Python
python定时器(Timer)用法简单实例
Jun 04 Python
深入理解Django的中间件middleware
Mar 14 Python
python爬取各类文档方法归类汇总
Mar 22 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
Django框架模板的使用方法示例
May 25 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
python add_argument()用法解析
Jan 29 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 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实现二分查找算法代码分享
2011/06/24 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
php显示时间常用方法小结
2015/06/05 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
2014年圣诞节促销方案
2014/03/14 职场文书
超市创业计划书
2014/09/15 职场文书
关于召开会议的通知
2015/04/15 职场文书
2015年财政局工作总结
2015/05/21 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python