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读取Android permission文件
Nov 01 Python
神经网络python源码分享
Dec 15 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
PyQt5实现简易计算器
May 30 Python
python3射线法判断点是否在多边形内
Jun 28 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
python如何实现word批量转HTML
Sep 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 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Django添加feeds功能的示例
2018/08/07 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python中time.ctime()实例用法
2021/02/03 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
实习自荐信
2013/10/13 职场文书
求职简历推荐信范文
2013/12/02 职场文书
环境科学专业求职信
2014/08/04 职场文书
卖房协议书样本
2014/10/30 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers