本帖最后由 sxlixiaoyang 于 2023-5-27 20:37 编辑
看到有大佬在论坛上发布了123网盘的解析原理及代码 ,飞机直达: https://www.52pojie.cn/thread-1790395-1-1.html
本人在大佬的基础上,用PHP+html重构了代码(PS:其实是gpt的功劳,自己只是稍加修改了部分代码,话说GPT还是有一点点智障…………)
运行效果请访问URL:点击这里
废话不多说,下面是代码:
[PHP] 纯文本查看 复制代码 <!DOCTYPE html>
<html>
<head>
<title>123解析</title>
<style>
body {
font-family: "Helvetica Neue", Arial, sans-serif;
background-color: #f5f5f7;
margin: 0;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.container {
max-width: 600px;
padding: 20px;
box-sizing: border-box;
text-align: center;
}
h1 {
font-size: 32px;
font-weight: bold;
color: #333333;
margin-bottom: 40px;
margin-top: 40px;
}
form {
margin-bottom: 40px;
}
label {
display: block;
font-size: 20px;
font-weight: bold;
color: #333333;
margin-bottom: 10px;
}
input[type="text"] {
width: 100%;
padding: 12px;
font-size: 16px;
border: 1px solid #cccccc;
box-sizing: border-box;
margin-bottom: 20px;
}
input[type="submit"] {
padding: 12px 24px;
font-size: 18px;
font-weight: bold;
color: #ffffff;
background-color: #0070c9;
border: none;
cursor: pointer;
}
.download-link {
margin-top: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.error-icon {
margin-right: 10px;
color: #ff0000;
font-size: 24px;
}
.success-icon {
margin-right: 10px;
color: #009900;
font-size: 24px;
}
a {
display: inline-block;
padding: 12px 24px;
font-size: 18px;
font-weight: bold;
color: #ffffff;
background-color: #0070c9;
text-decoration: none;
}
a:hover {
background-color: #0057a0;
}
</style>
</head>
<body>
<div class="container">
<h1>123解析</h1>
<form method="post" action="">
<label for="shareUrl">分享链接:</label>
<input type="text" id="shareUrl" name="shareUrl" required>
<input type="submit" name="submit" value="解析">
</form>
<?php if(isset($_POST['submit']) && isset($redirectUrl)): ?>
<?php endif; ?>
<?php
if(isset($_POST['submit'])) {
$shareUrl = $_POST['shareUrl'];
$shareCode = "";
$pattern = "/(?<=\/s\/)[^\/.]+/";
preg_match($pattern, $shareUrl, $match);
if ($match) {
$shareId = $match[0];
$extractCodePattern = "/提取码:(\w+)/";
preg_match($extractCodePattern, $shareUrl, $extractCodeMatch);
if ($extractCodeMatch) {
$shareCode = $extractCodeMatch[1];
}
// Get user information
getInfo($shareId, $shareCode);
} else {
echo'<span class="error-icon">✗</span>'. "错误: 123pan URL 未找到!";
}
}
function getInfo($shareId, $shareCode) {
$requestUrl = "https://www.123pan.com/b/api/share/get?limit=100&next=1&orderBy=share_id&orderDirection=desc&shareKey=" . $shareId . "&SharePwd=" . $shareCode . "&ParentFileId=0&Page=1";
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n"
)
);
$context = stream_context_create($opts);
$responseText = file_get_contents($requestUrl, false, $context);
parseInfo($responseText, $shareId);
}
function parseInfo($str, $shareId) {
$data = json_decode($str, true);
if ($data['code'] == 0) {
$type = $data['data']['InfoList'][0]['Type'];
if ($type == 0) {
$fileId = $data['data']['InfoList'][0]['FileId'];
$size = $data['data']['InfoList'][0]['Size'];
$s3KeyFlag = $data['data']['InfoList'][0]['S3KeyFlag'];
$etag = $data['data']['InfoList'][0]['Etag'];
// Perform second step
combinedData($shareId, $fileId, $size, $s3KeyFlag, $etag);
} else {
echo "错误: Folder parsing is currently not supported.";
}
} else {
$code = $data['code'];
$message = $data['message'];
echo '<span class="error-icon">✗</span>'."错误: 错误码" . $code . "//" . $message;
}
}
function combinedData($shareId, $fileId, $size, $s3KeyFlag, $etag) {
$requestUrl = "https://www.123pan.com/b/api/share/download/info";
$postData = json_encode(array(
"ShareKey" => $shareId,
"FileID" => $fileId,
"S3keyFlag" => $s3KeyFlag,
"Size" => $size,
"Etag" => $etag
));
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n" .
"Content-Type: application/json;charset=UTF-8\r\n",
'method' => 'POST',
'content' => $postData
)
);
$context = stream_context_create($opts);
$response = file_get_contents($requestUrl, false, $context);
parseDownloadURL($response);
}
function parseDownloadURL($str) {
$data = json_decode($str, true);
if ($data['code'] == 0) {
$downloadURL = $data['data']['DownloadURL'];
$downloadURL = extractDownloadLink($downloadURL);
getDirectLink($downloadURL);
} else {
$code = $data['code'];
$message = $data['message'];
echo '<span class="error-icon">✗</span>'."错误: 错误码" . $code . "//" . $message;
}
}
function extractDownloadLink($str) {
$pattern = "/params=([^&]+)/";
preg_match($pattern, $str, $match);
if ($match) {
$paramsValue = $match[1];
$decodedString = base64_decode($paramsValue);
// Check if auto_redirect parameter exists
if (strpos($decodedString, 'auto_redirect') === false) {
if (strpos($decodedString, '?') !== false) {
$decodedString .= "&auto_redirect=0";
} else {
$decodedString .= "?auto_redirect=0";
}
}
return $decodedString;
} else {
echo "Failed to extract Download URL";
}
}
function getDirectLink($requestUrl) {
$opts = array(
'http' => array(
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100\r\n"
)
);
$context = stream_context_create($opts);
$responseText = file_get_contents($requestUrl, false, $context);
parseDirectLink($responseText);
}
function parseDirectLink($str) {
$data = json_decode($str, true);
if ($data['code'] == 0) {
$redirectUrl = $data['data']['redirect_url'];
echo '<span class="success-icon">✓</span><a href="' . $redirectUrl . '">点击下载</a>';
} else {
$code = $data['code'];
$message = $data['message'];
echo '<span class="error-icon">✗</span>'."错误: 错误码" . $code . "//" . $message;
}
}
?>
</div>
</body>
</html>
|