应该前几年不少友友用网易数帆的对象存储做免费图床薅羊毛
邮件被告知要下线了,4-7号,去对象存储那看了下,没有批量取回
然后写了个py脚本,因为我只存图,所以这篇只测过图片下载
希望有帮助 也致敬网易数帆,感谢
环境: python3.11
前置步骤: 安装依赖
pip3 install nos-python3-sdk
代码
import os
import time
import nos
from numexpr.expressions import double
access_key = "你的"
secret_key = "换成你的"
end_point = "nos-eastchina1.126.net"
client = nos.Client(access_key, secret_key, end_point=end_point)
bucket = "换成你的桶名"
def download_file(file_name):
try:
result = client.get_object(bucket, file_name)
fp = result.get("body")
object_str = fp.read()
target_folder = './blog-cc'
file_path = os.path.join(target_folder, file_name)
os.makedirs(target_folder, exist_ok=True)
with open(file_path, 'wb') as local_file:
local_file.write(object_str)
except nos.exceptions.ServiceException as e:
print(
"ServiceException: %s\n"
"status_code: %s\n"
"error_type: %s\n"
"error_code: %s\n"
"request_id: %s\n"
"message: %s\n"
) % (
e,
e.status_code,
e.error_type,
e.error_code,
e.request_id,
e.message
)
except nos.exceptions.ClientException as e:
print(
"ClientException: %s\n"
"message: %s\n"
) % (
e,
e.message
)
if __name__ == '__main__':
try:
object_lists = client.list_objects(bucket=bucket, limit=1000)
f_num = len(object_lists["response"].findall("Contents"))
print(f'文件个数:{f_num}')
print('准备全部下载')
start_time = time.time()
for count, item in enumerate(object_lists["response"].findall("Contents"), start=1):
f_name = item.find("Key").text
f_size = double(item.find("Size").text) / 1000
update_time = item.find("LastModified").text
print(f'正在下载第{count},文件名:{f_name}')
now = time.time()
download_file(f_name)
print(f'第{count},文件名:{f_name}下载成功,耗时{time.time() - now} s')
end_time = time.time()
take_time_s = end_time - start_time
print(f'下载完成,共{f_num}个文件,共耗时{take_time_s}秒 == {take_time_s / 60}分钟')
except nos.exceptions.ServiceException as e:
print(
"ServiceException: %s\n"
"status_code: %s\n"
"error_type: %s\n"
"error_code: %s\n"
"request_id: %s\n"
"message: %s\n"
) % (
e,
e.status_code,
e.error_type,
e.error_code,
e.request_id,
e.message
)
except nos.exceptions.ClientException as e:
print(
"ClientException: %s\n"
"message: %s\n"
) % (
e,
e.message
)
|