使用Python写了一个bing壁纸下载

使用Python写了一个bing壁纸下载

这是第一个版本,算是1.0版本,实现了选择日期,然后自动批量下载4K的壁纸,图片全部来源必应。

这里我会将代码全部公开,然后包括软件的下载等,后续会更新,也会更新新版本的代码,你可以根据代码自行打包exe软件。

开箱即用的版本请看文末下载区域。

代码:(接口来源网络)

import requests
import os
from datetime import datetime, timedelta
import tkinter as tk
from tkinter import messagebox
from tkcalendar import DateEntry
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import threading

# 忽略不安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


def download_bing_wallpapers(start_date, end_date):
    base_url = "https://bing.ee123.net/img/"
    size = "UHD"
    output_dir = "bing_wallpapers"

    # 创建保存壁纸的文件夹
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    session = requests.Session()
    session.verify = False

    current_date = start_date
    while current_date <= end_date:
        date_str = current_date.strftime('%Y%m%d')
        params = {
            'date': date_str,
            'size': size,
            'type': 'json'
        }
        response = session.get(base_url, params=params)

        # 检查请求是否成功
        if response.status_code == 200:
            try:
                data = response.json()
                image_url = data.get('imgurl')  # 使用 'imgurl' 获取图片URL
                if image_url:
                    image_name = f"{date_str}.jpg"
                    image_path = os.path.join(output_dir, image_name)

                    # 下载图片
                    img_response = session.get(image_url)
                    if img_response.status_code == 200:
                        with open(image_path, 'wb') as img_file:
                            img_file.write(img_response.content)
                        print(f"Downloaded: {image_name}")
                    else:
                        print(f"Failed to download image from {image_url}")
                else:
                    print(f"No 'imgurl' found in the response for {date_str}")
            except ValueError:
                print(f"Failed to decode JSON response for {date_str}")
        else:
            print(f"Failed to retrieve data for {date_str}, status code: {response.status_code}")

        current_date += timedelta(days=1)

    messagebox.showinfo("完成", "壁纸下载完成!")


def start_download():
    start_date = start_date_entry.get_date()
    end_date = end_date_entry.get_date()

    if start_date > end_date:
        messagebox.showerror("错误", "开始日期不能晚于结束日期")
        return

    # 使用线程来运行下载任务,避免阻塞主线程
    download_thread = threading.Thread(target=download_bing_wallpapers, args=(start_date, end_date))
    download_thread.start()


# 创建主窗口
root = tk.Tk()
root.title("Bing 壁纸下载器")

# 日期选择框
tk.Label(root, text="选择开始日期:").grid(row=0, column=0, padx=10, pady=10)
start_date_entry = DateEntry(root, width=12, background='darkblue',
                             foreground='white', borderwidth=2, year=2024)
start_date_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(root, text="选择结束日期:").grid(row=1, column=0, padx=10, pady=10)
end_date_entry = DateEntry(root, width=12, background='darkblue',
                           foreground='white', borderwidth=2, year=2024)
end_date_entry.grid(row=1, column=1, padx=10, pady=10)

# 下载按钮
download_button = tk.Button(root, text="下载壁纸", command=start_download)
download_button.grid(row=2, column=0, columnspan=2, padx=10, pady=10)

# 运行GUI主循环
root.mainloop()

以下是第二个版本,新增了进度条,下载过程中实时更新进度条,显示当前的下载进度。

图片尺寸的填写框,可以通过填写框自由输入所需的图片尺寸。

分 辨 率UHD , 1920x1200 , 1920x1080 , 1366x768 , 1280x768 ,1024x768 , 800x600 , 800x480 , 768x1280 ,720x1280 , 640x480 , 480x800 , 400x240 , 320x240 , 240x320
API提供

以下是代码:

import requests
import os
from datetime import datetime, timedelta
import tkinter as tk
from tkinter import messagebox, ttk
from tkcalendar import DateEntry
import threading

# 忽略不安全请求警告
requests.packages.urllib3.disable_warnings()


def download_bing_wallpapers(start_date, end_date, size, progress_var, progress_bar):
    base_url = "https://bing.ee123.net/img/"
    output_dir = "bing_wallpapers"

    # 创建保存壁纸的文件夹
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    session = requests.Session()
    session.verify = False

    current_date = start_date
    total_days = (end_date - start_date).days + 1
    progress_step = 100 / total_days

    while current_date <= end_date:
        date_str = current_date.strftime('%Y%m%d')
        params = {
            'date': date_str,
            'size': size,
            'type': 'json'
        }
        response = session.get(base_url, params=params)

        if response.status_code == 200:
            try:
                data = response.json()
                image_url = data.get('imgurl')
                if image_url:
                    image_name = f"{date_str}.jpg"
                    image_path = os.path.join(output_dir, image_name)

                    # 下载图片
                    img_response = session.get(image_url)
                    if img_response.status_code == 200:
                        with open(image_path, 'wb') as img_file:
                            img_file.write(img_response.content)
                        print(f"Downloaded: {image_name}")
                    else:
                        print(f"Failed to download image from {image_url}")
                else:
                    print(f"No 'imgurl' found in the response for {date_str}")
            except ValueError:
                print(f"Failed to decode JSON response for {date_str}")
        else:
            print(f"Failed to retrieve data for {date_str}, status code: {response.status_code}")

        current_date += timedelta(days=1)

        # 更新进度条
        progress_var.set(progress_var.get() + progress_step)
        progress_bar.update()

    messagebox.showinfo("完成", "壁纸下载完成!")


def start_download():
    start_date = start_date_entry.get_date()
    end_date = end_date_entry.get_date()
    size = size_var.get()

    if start_date > end_date:
        messagebox.showerror("错误", "开始日期不能晚于结束日期")
        return

    # 重置进度条
    progress_var.set(0)
    progress_bar.update()

    # 使用线程来运行下载任务,避免阻塞主线程
    download_thread = threading.Thread(target=download_bing_wallpapers,
                                       args=(start_date, end_date, size, progress_var, progress_bar))
    download_thread.start()


# 创建主窗口
root = tk.Tk()
root.title("Bing 壁纸下载器")

# 日期选择框
tk.Label(root, text="选择开始日期:").grid(row=0, column=0, padx=10, pady=10)
start_date_entry = DateEntry(root, width=12, background='darkblue',
                             foreground='white', borderwidth=2, year=2024)
start_date_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(root, text="选择结束日期:").grid(row=1, column=0, padx=10, pady=10)
end_date_entry = DateEntry(root, width=12, background='darkblue',
                           foreground='white', borderwidth=2, year=2024)
end_date_entry.grid(row=1, column=1, padx=10, pady=10)

# 图片尺寸填写框
tk.Label(root, text="输入尺寸:").grid(row=2, column=0, padx=10, pady=10)
size_var = tk.StringVar(value="UHD")
size_entry = tk.Entry(root, textvariable=size_var, width=10)
size_entry.grid(row=2, column=1, padx=10, pady=10)

# 进度条
progress_var = tk.DoubleVar(value=0)
progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress_bar.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky="ew")

# 下载按钮
download_button = tk.Button(root, text="下载壁纸", command=start_download)
download_button.grid(row=4, column=0, columnspan=2, padx=10, pady=10)

# 运行GUI主循环
root.mainloop()

2.1版本:(自行填入有点蠢,还是改成下拉框吧)

import requests
import os
from datetime import datetime, timedelta
import tkinter as tk
from tkinter import messagebox, ttk
from tkcalendar import DateEntry
import threading

# 忽略不安全请求警告
requests.packages.urllib3.disable_warnings()

def download_bing_wallpapers(start_date, end_date, size, progress_var, progress_bar):
    base_url = "https://bing.ee123.net/img/"
    output_dir = "bing_wallpapers"
    
    # 创建保存壁纸的文件夹
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    session = requests.Session()
    session.verify = False
    
    current_date = start_date
    total_days = (end_date - start_date).days + 1
    progress_step = 100 / total_days
    
    while current_date <= end_date:
        date_str = current_date.strftime('%Y%m%d')
        params = {
            'date': date_str,
            'size': size,
            'type': 'json'
        }
        response = session.get(base_url, params=params)
        
        if response.status_code == 200:
            try:
                data = response.json()
                image_url = data.get('imgurl')
                if image_url:
                    image_name = f"{date_str}.jpg"
                    image_path = os.path.join(output_dir, image_name)
                    
                    # 下载图片
                    img_response = session.get(image_url)
                    if img_response.status_code == 200:
                        with open(image_path, 'wb') as img_file:
                            img_file.write(img_response.content)
                        print(f"Downloaded: {image_name}")
                    else:
                        print(f"Failed to download image from {image_url}")
                else:
                    print(f"No 'imgurl' found in the response for {date_str}")
            except ValueError:
                print(f"Failed to decode JSON response for {date_str}")
        else:
            print(f"Failed to retrieve data for {date_str}, status code: {response.status_code}")
        
        current_date += timedelta(days=1)
        
        # 更新进度条
        progress_var.set(progress_var.get() + progress_step)
        progress_bar.update()
    
    messagebox.showinfo("完成", "壁纸下载完成!")

def start_download():
    start_date = start_date_entry.get_date()
    end_date = end_date_entry.get_date()
    size = size_var.get()
    
    if start_date > end_date:
        messagebox.showerror("错误", "开始日期不能晚于结束日期")
        return
    
    # 重置进度条
    progress_var.set(0)
    progress_bar.update()
    
    # 使用线程来运行下载任务,避免阻塞主线程
    download_thread = threading.Thread(target=download_bing_wallpapers, args=(start_date, end_date, size, progress_var, progress_bar))
    download_thread.start()

# 创建主窗口
root = tk.Tk()
root.title("Bing 壁纸下载器")

# 日期选择框
tk.Label(root, text="选择开始日期:").grid(row=0, column=0, padx=10, pady=10)
start_date_entry = DateEntry(root, width=12, background='darkblue',
                             foreground='white', borderwidth=2, year=2024)
start_date_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(root, text="选择结束日期:").grid(row=1, column=0, padx=10, pady=10)
end_date_entry = DateEntry(root, width=12, background='darkblue',
                           foreground='white', borderwidth=2, year=2024)
end_date_entry.grid(row=1, column=1, padx=10, pady=10)

# 图片尺寸下拉选项
tk.Label(root, text="选择分辨率:").grid(row=2, column=0, padx=10, pady=10)
size_var = tk.StringVar(value="UHD")
size_combobox = ttk.Combobox(root, textvariable=size_var, values=[
    "UHD", "1920x1200", "1920x1080", "1366x768", "1280x768",
    "1024x768", "800x600", "800x480", "768x1280", "720x1280",
    "640x480", "480x800", "400x240", "320x240", "240x320"
])
size_combobox.grid(row=2, column=1, padx=10, pady=10)
size_combobox.set("UHD")

# 进度条
progress_var = tk.DoubleVar(value=0)
progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress_bar.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky="ew")

# 下载按钮
download_button = tk.Button(root, text="下载壁纸", command=start_download)
download_button.grid(row=4, column=0, columnspan=2, padx=10, pady=10)

# 运行GUI主循环
root.mainloop()
必应4K壁纸下载器1.0
1
必应4K壁纸下载器2.1
2
Download permission
View
  • Download for free
    Download after comment
    Download after login
  • {{attr.name}}:
Your current level is
Login for free downloadLogin Your account has been temporarily suspended and cannot be operated! Download after commentComment Download after paying points please firstLogin You have run out of downloads ( times) please come back tomorrow orUpgrade Membership Download after paying pointsPay Now Download after paying pointsPay Now Your current user level is not allowed to downloadUpgrade Membership
You have obtained download permission You can download resources every daytimes, remaining todaytimes left today
  • All rights reserved.
  • No part of this website, including text and images, may be reproduced, modified, distributed, or transmitted in any form or by any means, without the prior written permission of the author.
  • Unauthorized commercial use is strictly prohibited.
  • Unauthorized personal use is strictly prohibited.