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分析git log日志示例
Feb 27 Python
python音频处理用到的操作的示例代码
Oct 27 Python
Python实现Kmeans聚类算法
Jun 10 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
通过实例了解python property属性
Nov 01 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python logging模块写入中文出现乱码
May 21 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 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/08/08 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
PHP PDO操作总结
2014/11/17 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python制作刷网页流量工具
2017/04/23 Python
python2.7安装图文教程
2018/03/13 Python
解决DataFrame排序sort的问题
2018/06/07 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
什么是组件架构
2016/05/15 面试题
投标人法定代表人授权委托书格式
2014/09/28 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
会计出纳岗位职责
2015/03/31 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
DE1103使用报告
2022/04/05 无线电