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实现省市三级菜单效果
Jan 20 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
使用Python读取大文件的方法
Feb 11 Python
使用tensorflow实现线性回归
Sep 08 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Python文件路径名的操作方法
Oct 30 Python
python取均匀不重复的随机数方式
Nov 27 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python os.rename实例用法详解
Dec 06 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
投票管理程序
2006/10/09 PHP
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
php三元运算符知识汇总
2015/07/02 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
鼠标事件延时切换插件
2011/03/12 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python如何使用字符打印照片
2020/01/03 Python
用Python制作音乐海报
2021/01/26 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
营销与策划个人求职信
2013/09/22 职场文书
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
副总经理工作职责
2013/11/28 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
暂住证证明
2015/06/19 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL