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中文编码问题小结
Sep 28 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
如何正确理解python装饰器
Jun 15 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
APMServ使用说明
2006/10/23 PHP
php实现源代码加密的方法
2015/07/11 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python帮你识破双11的套路
2019/11/11 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
质检部部长职责
2013/12/16 职场文书
市政管理求职信范文
2014/05/07 职场文书
食堂标语大全
2014/06/11 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
居委会工作总结2015
2015/05/18 职场文书
安全教育培训制度
2015/08/06 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python