Maison >développement back-end >Tutoriel Python >Grattoir à papier peint Bing d'entrée de gamme

Grattoir à papier peint Bing d'entrée de gamme

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 01:22:39521parcourir

Entry-Level Bing Wallpaper Scraper

Travaux préparatoires

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.

Composants clés :

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

  • idx=0 : L'index du fond d'écran (à partir d'aujourd'hui).
  • n=1 : Le nombre de fonds d'écran à récupérer (dans ce cas, un seul).
  • mkt=en-US : le code du marché/langue (dans ce cas, anglais - 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.

Convention de format et de dénomination :

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.

Processus

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn