乐于分享
好东西不私藏

记录一个可以批量下载photoplus 谱时智能云的直播照片公开相册的python脚本

记录一个可以批量下载photoplus 谱时智能云的直播照片公开相册的python脚本
由于客户就发了个他们项目N年前的直播相册链接,让打包,只有阅读权限,没用批量权限,因为上千张照片,一个个手动下载得下到咸丰年,所以于网络苦苦寻找,终得此神器,虽然是五年前的产品,但放在如今,依然扛打,完美解决了我的需求,想到以后可能还会用到,故留此贴以做备份,同时分享出来
内容来源Github公开仓库,下面下载教程,仓库地址公开可自行查询

选择code按钮下的download zip

下载文件解压得如下内容,然后在命令提示符/cmd中进入上述文件夹

之后输入执行的代码:

python download_photos.py --id 12345678 --count 9999
12345678替换为为photoplus图片直播的网址中的八位数字,如下图红圈所示,代码其他部分的字母、空格、符号不要删除!
进度完成100%后,即可到根目录中的dist文件夹中看到了
以下为python代码备份
import osimport hashlibimport requestsimport argparseimport timeimport refrom tqdm import tqdmfrom concurrent.futures import ThreadPoolExecutor, as_completedSALT = 'laxiaoheiwu'COUNT = 9999def obj_key_sort(obj):    sorted_keys = sorted(obj.keys())    new_obj = []    for key in sorted_keys:        if obj[key] is not None:            value = str(obj[key])            new_obj.append(f"{key}={value}")    return '&'.join(new_obj)def sanitize_filename(filename):    return re.sub(r'[<>:"/\\|?*]''_', filename)def download_image(url, dir):    filename = url.split('/')[-1].split('#')[0].split('?')[0]    filename = sanitize_filename(filename)    image_path = os.path.join(dir, filename)    if os.path.exists(image_path):        return    response = requests.get(url, stream=True)    if response.status_code == 200:        with open(image_path, 'wb'as file:            for chunk in response.iter_content(1024):                file.write(chunk)def download_all_images(listdir):    with ThreadPoolExecutor(max_workers=10as executor:        futures = []        for item in list:            url = f"https:{item['origin_img']}"            futures.append(executor.submit(download_image, url, dir))        for future in tqdm(as_completed(futures), total=len(futures), desc="Downloading images"):            future.result()def get_all_images(id, count):    t = int(time.time() * 1000)  # Current timestamp in milliseconds    dir = f"./dist/{id}"    data = {        "activityNo"id,        "isNew"False,        "count": count,        "page"1,        "ppSign""live",        "picUpIndex""",        "_t": t    }    data_sort = obj_key_sort(data)    sign = hashlib.md5((data_sort + SALT).encode()).hexdigest()    params = {        **data,        "_s": sign,        "ppSign""live",        "picUpIndex""",    }    response = requests.get('https://photoplus网址/pic/pics', params=params)    result = response.json()['result']    print(f"Total photos: {result['pics_total']}, download: {count}")    os.makedirs(dir, exist_ok=True)    download_all_images(result['pics_array'], dir)if __name__ == "__main__":    parser = argparse.ArgumentParser(description="Download photos from PhotoPlus")    parser.add_argument("--id"type=inthelp="PhotoPlus ID (e.g., 87654321)", required=True)    parser.add_argument("--count"type=int, default=COUNT, help="Number of photos to download")    args = parser.parse_args()    if args.id:        get_all_images(args.id, args.count)    else:        print("Wrong ID")
  • 脚本仅用于个人合法用途,请勿滥用。

  • 如果遇到下载失败,可能是相册已过期或 ID 不正确。

  • 感谢原作者的无私分享,此备份只为方便日后查阅。