======2023.08.31更新======
请使用 QQ、微信第三方登陆有道云笔记的账号分享外链,目前邮箱等账号分享在特定情况会存在信息泄露的风险!
又复现出了问题,但还没有摸清规律,建议最好还是使用第三方账号登陆。
======2023.08.21更新======
请使用 QQ、微信第三方登陆有道云笔记的账号分享外链,目前邮箱等账号分享在特定情况会存在信息泄露的风险!
======2023.08.20原文======
前言
有道云笔记的直链解析分析其实出来很长一段时间,搜索了一下,也有类似的桌面程序制作。
因为最近发现 ChatGPT 在生产力方面挺好用的,于是就用它辅助写了一个有道云笔记的直链解析接口和网页。
方法
1、在有道云笔记分享文件之后,得到分享链接。
http://note.youdao.com/noteshare?id=9862400b661006b5cf5a512e5ad80d6d
2、取出链接中 id 值 9862400b661006b5cf5a512e5ad80d6d。
3、根据 id 值拼接链接:
http://note.youdao.com/yws/public/note/9862400b661006b5cf5a512e5ad80d6d?editorType=0&cstk=cGtjFpHb
3.1、拼接逻辑为:
http://note.youdao.com/yws/public/note/ {id值}?editorType=0&cstk=cGtjFpHb
4、访问拼接后的链接,得到一串 json 字符串。
{"p":"/WEBf82fd575bd63c60f98ba999f1c1279ad","ct":1475838565,"su":null,"pr":0,"au":null, "pv":1,"mt":1475838565,"sz":15581976,"domain":1,"tl":"shsn.mp4"}
5、获取 p 值,并去掉其中的/,拼接新的链接。
拼接逻辑为:
http://note.youdao.com/yws/api/personal/file/{第 4 步得到的 p 的值}?method=download&inline=true&shareKey={第 1 步分享链接中的 id 值}
6、得到最终的直链地址:
分析
知道直链获得的逻辑之后,就是如何通过代码实现上面的功能。
一开始我考虑的是通过浏览器来处理所有逻辑,这样可以减轻服务器的请求压力。
但几经尝试,跨域的问题都没法很好的解决,无奈还是加入了 PHP。
而且上面的直链获得逻辑是六年前大佬发表的(你没有听错时间,原文链接在最下方参考文章中),这期间,有道云笔记在上述第一步获得 id 值前,加入了短链接,也就是说要通过访问分享得到的短链接跳转到带有 id 值的链接。
这无疑又给我这个本来就是菜鸡,又很久没写代码的辣鸡增添了许多难度(主要也是懒,想一步到位,其实完全可以手动访问短链接,手动复制 id 值,但我觉得这样太麻烦)。
所以,虽然最终功能实现,但是因为通过了服务器去处理部分逻辑,所以在处理速度上终归是有些差强人意。
当然,归根结底,处理速度跟服务器有很大的关系。
实现
以下是接口代码的实现(考虑到方便,将所有代码都写在了一个文件):
<?php // 验证请求是否合法,防止恶意请求 if ($_SERVER['REQUEST_METHOD'] !== 'GET') { http_response_code(400); echo json_encode(['error' => 'Invalid request method']); exit; } // 获取传入的链接参数 if (!isset($_GET['url'])) { http_response_code(400); echo json_encode(['error' => 'Missing url parameter']); exit; } $url = $_GET['url']; $json = isset($_GET['json']) && $_GET['json'] == 'ture'; // 获取跳转后的链接 function getRedirectUrl($url) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_NOBODY => true, // 只获取响应头,不获取响应体 CURLOPT_HEADER => true, // 将响应头包含在输出中 CURLOPT_CONNECTTIMEOUT => 5, // 设置连接超时时间为5秒 CURLOPT_TIMEOUT => 10 // 设置请求超时时间为10秒 ]); curl_exec($curl); $redirectUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); curl_close($curl); return $redirectUrl; } $redirectUrl = getRedirectUrl($url); // 提取链接中的ID值 $queryString = parse_url($redirectUrl, PHP_URL_QUERY); parse_str($queryString, $params); $id = isset($params['id']) ? $params['id'] : ''; if (empty($id)) { http_response_code(400); echo json_encode(['error' => 'Invalid url parameter']); exit; } // 构建API请求链接 $apiUrl = "http://note.youdao.com/yws/public/note/{$id}?editorType=0&cstk=cGtjFpHb"; // 发送API请求 $curl = curl_init($apiUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($curl); curl_close($curl); if (!$res) { http_response_code(500); echo json_encode(['error' => 'Failed to fetch API response']); exit; } // 解析API响应 $resArr = json_decode($res, true); if (!$resArr || !isset($resArr['p'])) { // 打印API响应内容进行调试 var_dump($res); http_response_code(500); echo json_encode(['error' => 'Invalid API response']); exit; } // 提取p值 $p = trim($resArr['p'], '/'); // 构建下载链接 $downUrl = "http://note.youdao.com/yws/api/personal/file/{$p}?method=download&inline=true&shareKey={$id}"; // 返回下载链接 if ($json) { echo json_encode(['downloadUrl' => $downUrl]); } else { echo $downUrl; }
PS:以上代码(含注释)由 ChatGPT 辅助编写、优化等
部署
1、新建一个index.php文件
2、复制代码至文件
3、上传至服务器
4、访问文件的地址即可使用
演示
调用地址
https://api.lkblog.net/youdao/?url=有道云笔记文件分享链接&json=true
Type参数详解
url:有道云笔记文件分享地址(支持短链接)
json:非必须,是否返回 json 格式
请求示例
Web演示:https://lab.lkblog.net/youdao-note/
说明
目前看这个直链还是比较稳定的,希望别打脸,而且具备国内直链该有的防盗链(苦笑),用来作为文件的下载链接还是不错的,当然你要是自己能想办法,也可以在线播放视频。
参考
鸣谢
Chat For AI(提供 ChatGPT 服务)
声明
分析文章仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则一切后果自负。
Comments | NOTHING