可以直接使用本站搭设好的提取工具
点击直达-->Onedrive直链提取工具
原理
原链接:
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);
Comments 3 条评论
不知道博主的资源中心是不是也是输出的onedrive网盘里的内容,用的是什么方式或程序实现的?
用的是oneindex吧?试了一下,也是不能把链接复制到下载软件里进行下载,只能在浏览器中下载
@笑望书 访客的话看到的是混合内容,有挂OneDrive,还有国内网盘的内容,用的是alist,功能全面一些,要用下载软件下载是可以的,批量下载可以推送到aria2之类的程序去下,你那不行可能是没有权限。不过说实话这类程序对多线程下载确实支持不太好