去年发布过一个123云盘直链解析分析过程,貌似123云盘增加了验证,导致以前的接口无法使用,今天看到某位大佬分析的新版解析接口,分享给大家。
先上源码
复制
import requests
import random
import re
import base64
import time
def 取多重文本随机数(位数:int):
文本数字=''
for i in range(位数):
文本数字+=str(random.randint(0,10))
return 文本数字
while True:
原地址=input('请输入分享链接:')
密码=input('请输入密码,若无则留空:')
标识=re.search('s/(.+).html',原地址).group(1)
时间戳_秒=time.time()
随机数_文本x10=取多重文本随机数(10)
随机数_文本x10_1=取多重文本随机数(10)
随机数_文本x7=取多重文本随机数(7)
密码地址=f'https://www.123pan.com/b/api/share/get?\
{随机数_文本x10}={时间戳_秒}-{随机数_文本x7}-{随机数_文本x10_1}\
&limit=100&next=0&orderBy=file_name&orderDirection=asc&shareKey=\
{标识}&SharePwd={密码}&ParentFileId=0&Page=1&event=homeListFile&operateType=1'
数据列表=requests.get(密码地址).json()
数据列表=数据列表['data']['InfoList'][0]
接口地址='https://www.123pan.com/b/api/share/download/info?\
{随机数_文本x10}={时间戳_秒}-{随机数_文本x7}-{随机数_文本x10_1}'
提交数据={
'ShareKey':标识,
'FileId':数据列表['FileId'],
'S3KeyFlag':数据列表['S3KeyFlag'],
'Size':数据列表['Size'],
'Etag':数据列表['Etag'],
}
返回数据_接口=requests.post(url=接口地址,json=提交数据)
base64密文=re.search(r'params=(.+)\\u',返回数据_接口.text).group(1)
直链=base64.b64decode(base64密文).decode()
print('\n',直链,'\n')
需要注意的是这段代码仅对小文件生效,大文件必须登录才能使用。
解析的分享地址应该是像下面这样的地址
复制
https://www.123pan.com/s/qfTFjv-QndBB.html
而不是这样的文件夹地址
复制
https://www.123pan.com/s/UweA-FhZQH
简单来讲就是仅能单个文件解析
解析过程
通过分享链接拿到文件标识如上所示的qfTFjv-QndBB
就是文件标识
然后准备三个随机数,长度分别为10,10,7。再加上当前时间戳
构建文件信息请求地址
复制
https://www.123pan.com/b/api/share/get?\
{随机数_文本x10}={时间戳_秒}-{随机数_文本x7}-{随机数_文本x10_1}\
&limit=100&next=0&orderBy=file_name&orderDirection=asc&shareKey=\
{标识}&SharePwd={密码}&ParentFileId=0&Page=1&event=homeListFile&operateType=1
使用get请求后,可以拿到文件的详细信息,包括下一步获取直链使用的数据,这些数据在上一步返回的json数据的[‘data’][‘InfoList’][0]中。
构建直链请求地址
复制
https://www.123pan.com/b/api/share/download/info?\
{随机数_文本x10}={时间戳_秒}-{随机数_文本x7}-{随机数_文本x10_1}
注意,这里的时间戳使用上一步相同的时间戳,也就是说这个参数保持一致。
请求内容就是从上一步获得的json数据中获取的。
复制
{
'ShareKey':标识,
'FileId':数据列表['FileId'],
'S3KeyFlag':数据列表['S3KeyFlag'],
'Size':数据列表['Size'],
'Etag':数据列表['Etag'],
}
最后以post方式发送请求即可获得被base64编码后的直链地址,params=后面的就是,直接解码即可。
评论 (3)