获取OneDrive直链的方案

发布于 2024-01-22  44 次阅读


可以直接使用本站搭设好的提取工具

原理

原链接:
https://xxxx-my.sharepoint.com/:x:/g/personal/xx_xx_xx/xxxxxxxxxx

直链:
https://xxxx-my.sharepoint.com/personal/xx_xx_xx/_layouts/52/download.aspx?share=xxxxxxxxxx(这一种更有效)

https://xxxx-my.sharepoint.com/:x:/g/personal/xx_xx_xx/xxxxxxxxxx?download=1(这是重定向跳转至直链)

python实现

import re

def directLink(url):
    reg1 = r'https://.+sharepoint\.com'
    reg2 = r'personal/(\w+?)/'
    reg3 = r'.*/(\S+)'
    reg4 = r'com/:(\w):/'

    p1 = re.findall(reg1, url)[0]
    p2 = re.findall(reg2, url)[0]
    p3 = re.findall(reg3, url)[0]

    if '?' in p3:
        p3 = re.findall(r'(\S+?)\?', p3)[0]

    return p1 + '/personal/' + p2 + '/_layouts/52/download.aspx?share=' + p3
if __name__ == "__main__":
    url = input("OneDrive share link:")
    try:
        url_directed = directLink(url)
        print(f"\n>>> {url_directed}")
    except:
        print("\n>>> 格式错误")

代码参考来源https://blog.csdn.net/qq_43523315/article/details/109450059

根据python的实现方案我做了一份js版本的方案以便部署在网站上,这样不管到哪里都可以方便使用

JS实现方案

// 定义一个函数,接受一个url参数,返回一个处理后的结果
function judgeLink(url) {
  // 定义四个正则表达式,用来匹配和提取url中的参数
  var reg1 = /https:\/\/.+sharepoint\.com/;
  var reg2 = /personal\/(\w+?)\//;
  var reg3 = /.\/(\S+)/;
  var reg4 = /com\/:(\w):/;

  // 使用match方法,返回一个数组,包含匹配的结果
  var p1 = url.match(reg1)[0];
  var p2 = url.match(reg2)[1];
  var p3 = url.match(reg3)[1];

  // 如果p3中包含问号,就去掉问号后面的部分
  if (p3.includes("?")) {
    p3 = p3.split("?")[0];
  }

  // 如果reg4匹配到的结果是f,就返回一个错误提示
  if (url.match(reg4)[1] == "f") {
    return "抱歉,你所输入链接分享的是文件夹,直链生成仅对单文件有效。";
  }

  // 否则,拼接p1, p2, p3,返回一个直链下载地址
  return p1 + "/personal/" + p2 + "/_layouts/52/download.aspx?share=" + p3;
}

// 获取用户输入的url
var url = prompt("请输入你的OneDrive单文件分享链接:");

// 调用judgeLink函数,获取处理后的结果
var url_judged = judgeLink(url);

// 在控制台或网页上显示结果
console.log("\n>>> " + url_judged);
// 或者
document.write("\n>>> " + url_judged);