Maison >développement back-end >Tutoriel Python >Grattoir à papier peint Bing d'entrée de gamme
Analyse des éléments Web et de l'API du fond d'écran Bing
Pour créer un téléchargeur de fond d'écran automatisé à l'aide de Bing, nous devons comprendre comment interagir avec l'API Bing. L'objectif est de récupérer les URL des fonds d'écran et de les enregistrer localement au format souhaité. Nous explorerons également l'API, les éléments d'image et les modèles d'URL pertinents.
1. API de papier peint de Bing :
Bing fournit un point de terminaison pour accéder aux métadonnées de son fond d'écran, y compris les URL, les titres et les descriptions des images. Le critère d'évaluation principal que nous utilisons est :
https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US
2. URL de l'image et téléchargement :
Les URL d'images fournies par l'API sont souvent dans un format relatif (commençant par /th?id=...). Pour télécharger l'image, nous devrons ajouter l'URL de base https://www.bing.com.
L'URL de l'image sera souvent sous la forme :
/th?id=OHR.SouthPadre_ZH-CN8788572569_1920x1080.jpg
Nous traiterons cela pour extraire les informations nécessaires, telles que le nom de l'image et l'extension du fichier, et les enregistrerons en conséquence.
1. Récupération de données depuis l'API Bing :
La première étape consiste à envoyer une requête GET à l'API Bing. Cela renvoie un objet JSON contenant les métadonnées du fond d'écran pour un jour donné.
import requests import os # Simulate browser request headers headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" } # Directory to save wallpapers default_pictures_dir = os.path.join(os.path.expanduser("~"), "Pictures") picture_path = os.path.join(default_pictures_dir, "bing") # Create the directory if it doesn't exist if not os.path.exists(picture_path): os.makedirs(picture_path) # Fetch wallpapers (last 4 days including today) for idx in range(4): # Request Bing's wallpaper metadata api_url = f"https://www.bing.com/HPImageArchive.aspx?format=js&idx={idx}&n=1&mkt=en-US" response = requests.get(api_url, headers=headers) if response.status_code != 200: print(f"Failed to fetch data for idx={idx}, skipping.") continue data = response.json() if not data.get("images"): print(f"No images found for idx={idx}, skipping.") continue # Extract image details image_info = data["images"][0] image_url = "https://www.bing.com" + image_info["url"] image_name = image_info["urlbase"].split("/")[-1] + ".jpg" save_path = os.path.join(picture_path, image_name) # Download the image image_response = requests.get(image_url, headers=headers) if image_response.status_code == 200: with open(save_path, "wb") as f: f.write(image_response.content) print(f"Downloaded: {save_path}") else: print(f"Failed to download image for idx={idx}.")
Test en ligne
python3 -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/Excalibra/scripts/refs/heads/main/d-python/get_bing_wallpapers.py)"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!