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