Existe-t-il un moyen d'obtenir la photo du jour de Bing?


89

Est-il possible d'obtenir l'image d'arrière-plan Bing par programmation?

L'API de Bing ne semble pas fournir une telle fonctionnalité, peut-être y a-t-il un autre moyen?

Réponses:


111

Je pense que le meilleur moyen est d'imiter la façon dont ils le font eux-mêmes via leurs appels AJAX.

Ils appellent cette URL et extraient les informations via la désérialisation XML.

XML: http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US

JSON: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US

RSS: http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US

L' mktattribut peut évidemment être changé pour une région différente de «en-US», mais peut également être entièrement désactivé si vous ne vous souciez pas d'une région spécifique.

Notez que le _1366x768.jpgsuffixe ajouté aux noms d'image semble être modifiable dans différentes résolutions (comme _1920x1080.jpgpour le Full HD et éventuellement d'autres).

Voici un vidage des données du 28/09/2013, au format XML.

<?xml version="1.0" encoding="utf-8"?>
<images>
    <image>
        <startdate>20130928</startdate>
        <fullstartdate>201309280000</fullstartdate>
        <enddate>20130929</enddate>
        <url>/az/hprichbg/rb/LakeTurkana_EN-US15976511099_1366x768.jpg</url>
        <urlBase>/az/hprichbg/rb/LakeTurkana_EN-US15976511099</urlBase>
        <copyright>Lava rock pools at the southern end of Lake Turkana, in Kenya (© Nigel Pavitt/Corbis)</copyright>
        <copyrightlink>http://www.bing.com/search?q=Lake+Turkana%2C+Kenya&amp;form=hpcapt</copyrightlink>
        <drk>1</drk>
        <top>1</top>
        <bot>1</bot>
        <hotspots>
            <hotspot>
                <desc>These are the southern reaches of a lake...</desc>
                <link>http://www.bing.com/maps/?v=2&amp;cp=2.794725~37.335197&amp;lvl=7&amp;dir=0&amp;sty=b&amp;q=Lake%20Turkana%2C%20Kenya&amp;form=hphot1</link>
                <query>That stretches for 180 miles, up into another country</query>
                <LocX>15</LocX>
                <LocY>33</LocY>
            </hotspot>
            <hotspot>
                <desc>This body of water was once called the Jade Sea.</desc>
                <link>http://www.bing.com/search?q=green+algae&amp;form=hphot2</link>
                <query>What gives the water here its sometimes vibrant hue?</query>
                <LocX>37</LocX>
                <LocY>42</LocY>
            </hotspot>
            <hotspot>
                <desc>One of the world's most powerful predators lives here.</desc>
                <link>http://www.bing.com/videos/search?q=Underwater+Croc+Cams+National+Geographic&amp;FORM=hphot3#view=detail&amp;mid=D25E1909D3514A8732C5D25E1909D3514A8732C5</link>
                <query>See some rare underwater footage of the beast</query>
                <LocX>66</LocX>
                <LocY>33</LocY>
            </hotspot>
            <hotspot>
                <desc>Many fossils of ancient human ancestors have been uncovered in the surrounding area.</desc>
                <link>http://www.bing.com/search?q=Turkana+Boy&amp;form=hphot4</link>
                <query>One skeleton was so complete, paleoanthropologists gave him a name</query>
                <LocX>82</LocX>
                <LocY>41</LocY>
            </hotspot>
        </hotspots>
        <messages></messages>
    </image>
    <tooltips>
        <loadMessage>
            <message>Indlæser...</message>
        </loadMessage>
        <previousImage>
            <text>Forrige</text>
        </previousImage>
        <nextImage>
            <text>Næste</text>
        </nextImage>
        <play>
            <text>Afspil</text>
        </play>
        <pause>
            <text>Pause</text>
        </pause>
    </tooltips>
</images>

11
FYI - vous pouvez également l'obtenir au format JSON! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

1
BTW: La résolution est variable, tout ce qui _1920x1200fonctionne, c'est-à-dire aussi 1920x1080et d'autres.
jmiserez

1
D'accord, il semble donc que Bing Desktop utilise bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 , c'est-à-dire sans &mkt=en-USpartie. C'est même si l'application est définie sur "Anglais-États-Unis".
jmiserez

1
@darksoulsong Bien sûr. Vous pouvez créer un service Web qui fournit les données par proxy pour vous. Normalement, on utiliserait jsonp, mais il ne semble pas qu'ils le permettent.
Mathias Lykkegaard Lorenzen

1
Si quelqu'un cherche des places de marché ... vous pouvez l'extraire de microsoft.com/en-in/locale.aspx
Amar Palsapure

30

FORMAT JSON de BING IMAGE

J'ai trouvé un moyen de récupérer le format JSON de l' image Bing du jour

http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

Remarque

      n=Le nombre d'images que vous voulez (vous pouvez utiliser des nombres entiers ),
      mkt=votre emplacement (exemple: en-US )


Voici la sortie JSON ressemble à

  {
  "images": [
    {
      "startdate": "20141214",
      "fullstartdate": "201412141830",
      "enddate": "20141215",
      "url": "\/az\/hprichbg\/rb\/BlackButte_EN-IN7038391888_1920x1080.jpg",
      "urlbase": "\/az\/hprichbg\/rb\/BlackButte_EN-IN7038391888",
      "copyright": "Black Butte, seen from the Mount Jefferson Wilderness, Oregon, USA (\u00a9 Marc Adamus\/Aurora Photos)",
      "copyrightlink": "http:\/\/www.bing.com\/search?q=Black+Butte&qs=n&form=hpcapt&mkt=en-in&pq=black+butte&sc=8-11&sp=-1&sk=&cvid=228ac7f125f94bbaafd4a4abd4f9a32d",
      "wp": true,
      "hsh": "94156ae1e2e1be49f9b739d2b7bff65c",
      "drk": 1,
      "top": 1,
      "bot": 1,
      "hs": [

      ],
      "msg": [
        {
          "title": "How does it feel\u2026",
          "link": "http:\/\/www.bing.com\/videos\/search?q=Climbing+Black+Butte&FORM=pgbar1&mkt=en-in#view=detail&mid=58BDB2F2B9FCB85D597558BDB2F2B9FCB85D5975",
          "text": "To climb 1961.7 m?"
        },
        {
          "title": "On top of the world",
          "link": "http:\/\/www.bing.com\/images\/search?q=Pictures+From+the+Top+of+Mount+Everest&FORM=pgbar2&mkt=en-in",
          "text": "It's mountaineer's dream view"
        }
      ]
    }
  ],
  "tooltips": {
    "loading": "Loading...",
    "previous": "Previous",
    "next": "Next",
    "walle": "This image is not available to download as wallpaper.",
    "walls": "Download this image. Use of this image is restricted to wallpaper only."
  }
}

utilisez le urldepuis leimages[]

et ajoutez-le à 'http://bing.com'

ici l'url est "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"


Il semble que Bing limite le nombre total de réponses à 8 à la fois. 8 peuvent être rassemblés avec n = 8, et les 8 précédents peuvent être rassemblés en définissant idx = 8 et n = 8. Je ne vois pas de moyen d'élargir cela.
The Fluffy Robot

Pourquoi il est erreur de donner Unexpected token :àhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Rohit Sharma

10

Microsoft a récemment publié un thème dynamique Bing pour Windows 7, qui contient un flux RSS avec des liens vers des fonds d'écran Bing .

Il existe également un script Python qui tente de charger le site Web Bing et de deviner l'URL de l'image correcte, mais d'après mon expérience, il en résulte généralement une image de résolution inférieure à celles offertes par le flux RSS.


+1 pour le lien vers le rss, je pense que c'est la vraie réponse à la question
David Conde

3
Malheureusement, le thème a été abandonné, ou comme le dit Microsoft: "Ce thème a été retiré". Le RSS est toujours là, mais il n'est plus mis à jour.
karafior


6

Une doublure PowerShell (3.0 ou plus)

irm est un alias pour Invoke-RestMethod

irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg

2
Brillant! A parfaitement fonctionné pour moi :)
LiamHarries

4

J'aime aussi les images Bing mais leur application est trop volumineuse pour télécharger des images. Après avoir analysé la connexion avec Fiddler, j'ai écrit ce code. Le 1920x1200 est livré avec le logo Bing intégré, mais les résolutions inférieures ne l'ont pas.

Vous pouvez faire en sorte que les fenêtres vous montrent des images aléatoires du dossier d'images que vous avez défini, de sorte que lorsque vous les téléchargez quotidiennement, il vous montrera plus d'images aléatoires. Si vous gardez le "imageDir", vous devez changer les permissions sur ce dossier ou il plantera, je ne me suis pas dérangé avec les erreurs de capture. Enfin, supprimez les commentaires des lignes si vous souhaitez définir votre fond d'écran sur l'image du jour ou vous pouvez créer une tâche pour exécuter le programme, par exemple une minute après la connexion.

using System;
using System.IO;
using System.Net;
//using System.Runtime.InteropServices;

namespace Bing
{
    class Program
    {
      //  [DllImport("user32.dll", CharSet = CharSet.Auto)]
      //  private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);
        private static String imgDir = @"C:\Windows\Web\Wallpaper\Bing\";

        static void Main(string[] args)
        {
            String imageFileName;
            if (!Directory.Exists(imgDir))
                Directory.CreateDirectory(imgDir);

            for (byte i = 6; i >= 0; i--)
            {
                imageFileName = imgDir + DateTime.Today.AddDays(-i).ToString("yyy-MM-dd") + ".jpg";

                if (!File.Exists(imageFileName))
                {
                    string response = null;
                    Connect(ref response, i);
                    ProcessXml(ref response);
                    using (WebClient client = new WebClient())
                        client.DownloadFile("http://www.bing.com" + response + "_1920x1200.jpg", imageFileName);
                }                
            }
            //SystemParametersInfo(20, 0, imageFileName, 0x01 | 0x02);
        }

        private static void Connect(ref string res, byte i)
        {
            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://www.bing.com/hpimagearchive.aspx?format=xml&idx=" + i + "&n=1&mbl=1&mkt=en-ww");
            webrequest.KeepAlive = false;
            webrequest.Method = "GET";
            using (HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse())
                using (StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream()))
                    res = loResponseStream.ReadToEnd();                
        }

        private static void ProcessXml(ref string xmlString)
        {
            using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new StringReader(xmlString)))
            {
                reader.ReadToFollowing("urlBase");
                xmlString = reader.ReadElementContentAsString();
            }
        }        
    }
}


2

Ce JavaScript répondra à la question «que faire avec l'API» en changeant l'image d'arrière-plan d'un div en arrière-plan de l'image bing du jour en cours.

function PullBackground() {
    var ajaxRequest = new XMLHttpRequest(), background = ''; 
    ajaxRequest.open('POST', "http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US", true);
    ajaxRequest.setRequestHeader("Connection", "close");
    ajaxRequest.send('');
    ajaxRequest.onreadystatechange = function () {
        if (ajaxRequest.readyState == 4) {
            background = ajaxRequest.responseText;
            var res = background.split("<url>"); 
            var res1 = res[1].split("</url>");
            background = res1[0];

            document.getElementById('NameOfTheDivToChange').style.backgroundImage = "url('http://bing.com" + background + "')"
            document.getElementById('NameOfTheDivToChange').style.backgroundSize = "100%";
        }
    }
}

5
Je voulais vraiment l'utiliser, mais cela ne semble pas contourner le manque de 'Access-Control-Allow-Origin' défini par Bing.
addMitt

2

Au cas où quelqu'un chercherait des implémentations possibles, j'ai écrit un petit programme de ligne de commande en C # pour télécharger, enregistrer et définir mon arrière-plan comme l'image Bing du jour. N'hésitez pas à le modifier selon vos besoins personnels. https://github.com/josueespinosa/BingBackground

using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace BingBackground
{
    class BingBackground
    {
        private static void Main(string[] args)
        {
            string urlBase = GetBackgroundUrlBase();
            Image background = DownloadBackground(urlBase + GetResolutionExtension(urlBase));
            SaveBackground(background);
            SetBackground(background, PicturePosition.Fill);
        }

        private static dynamic DownloadJson()
        {
            using (WebClient webClient = new WebClient())
            {
                Console.WriteLine("Downloading JSON...");
                string jsonString = webClient.DownloadString("https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US");
                return JsonConvert.DeserializeObject<dynamic>(jsonString);
            }
        }

        private static string GetBackgroundUrlBase()
        {
            dynamic jsonObject = DownloadJson();
            return "https://www.bing.com" + jsonObject.images[0].urlbase;
        }

        private static string GetBackgroundTitle()
        {
            dynamic jsonObject = DownloadJson();
            string copyrightText = jsonObject.images[0].copyright;
            return copyrightText.Substring(0, copyrightText.IndexOf(" ("));
        }

        private static bool WebsiteExists(string url)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Method = "HEAD";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                return response.StatusCode == HttpStatusCode.OK;
            }
            catch
            {
                return false;
            }
        }

        private static string GetResolutionExtension(string url)
        {
            Rectangle resolution = Screen.PrimaryScreen.Bounds;
            string widthByHeight = resolution.Width + "x" + resolution.Height;
            string potentialExtension = "_" + widthByHeight + ".jpg";
            if (WebsiteExists(url + potentialExtension))
            {
                Console.WriteLine("Background for " + widthByHeight + " found.");
                return potentialExtension;
            }
            else
            {
                Console.WriteLine("No background for " + widthByHeight + " was found.");
                Console.WriteLine("Using 1920x1080 instead.");
                return "_1920x1080.jpg";
            }
        }

        private static Image DownloadBackground(string url)
        {
            Console.WriteLine("Downloading background...");
            WebRequest request = WebRequest.Create(url);
            WebResponse reponse = request.GetResponse();
            Stream stream = reponse.GetResponseStream();
            return Image.FromStream(stream);
        }

        private static string GetBackgroundImagePath()
        {
            string directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Bing Backgrounds", DateTime.Now.Year.ToString());
            Directory.CreateDirectory(directory);
            return Path.Combine(directory, DateTime.Now.ToString("M-d-yyyy") + ".bmp");
        }

        private static void SaveBackground(Image background)
        {
            Console.WriteLine("Saving background...");
            background.Save(GetBackgroundImagePath(), System.Drawing.Imaging.ImageFormat.Bmp);
        }

        private enum PicturePosition
        {
            Tile,
            Center,
            Stretch,
            Fit,
            Fill
        }

        internal sealed class NativeMethods
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            internal static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
        }

        private static void SetBackground(Image background, PicturePosition style)
        {
            Console.WriteLine("Setting background...");
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(Path.Combine("Control Panel", "Desktop"), true))
            {
                switch (style)
                {
                    case PicturePosition.Tile:
                        key.SetValue("PicturePosition", "0");
                        key.SetValue("TileWallpaper", "1");
                        break;
                    case PicturePosition.Center:
                        key.SetValue("PicturePosition", "0");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Stretch:
                        key.SetValue("PicturePosition", "2");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Fit:
                        key.SetValue("PicturePosition", "6");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Fill:
                        key.SetValue("PicturePosition", "10");
                        key.SetValue("TileWallpaper", "0");
                        break;
                }
            }
            const int SetDesktopBackground = 20;
            const int UpdateIniFile = 1;
            const int SendWindowsIniChange = 2;
            NativeMethods.SystemParametersInfo(SetDesktopBackground, 0, GetBackgroundImagePath(), UpdateIniFile | SendWindowsIniChange);
        }
    }
}

2

Simple PowerShell, placez-le dans un dossier, créez une tâche quotidienne dans le planificateur de tâches Windows, le script enregistre les images dans son dossier d'exécution, puis dans les paramètres d'arrière-plan du bureau, choisissez ce dossier comme arrière-plan.

[xml]$doc = (New-Object System.Net.WebClient).DownloadString("https://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=ru-RU")
$url = $doc.images.image.url
$url = "https://www.bing.com/" + $url -replace "_1366x768","_1920x1200"

Write-Output $url

$fileName = Split-Path $url -leaf
$output = "$PSScriptRoot\$fileName"

$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Saved to: $output Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"

Fonctionne encore mieux en tant que tâche planifiée dans Windows pour télécharger automatiquement l'image Bing du jour dans un répertoire cible. Excellent.
non

2

Voici un simple script Python pour récupérer la photo Bing du jour en utilisant juste requestset json:

import requests
import json

BING_URI_BASE = "http://www.bing.com"
BING_WALLPAPER_PATH = "/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"

# open the Bing HPImageArchive URI and ask for a JSON response
resp = requests.get(BING_URI_BASE + BING_WALLPAPER_PATH)

if resp.status_code == 200:
    json_response = json.loads(resp.content)
    wallpaper_path = json_response['images'][0]['url']
    filename = wallpaper_path.split('/')[-1]
    wallpaper_uri = BING_URI_BASE + wallpaper_path

    # open the actual wallpaper uri, and write the response as an image on the filesystem
    response = requests.get(wallpaper_uri)
    if resp.status_code == 200:
        with open(filename, 'wb') as f:
            f.write(response.content)
    else:
        raise ValueError("[ERROR] non-200 response from Bing server for '{}'".format(wallpaper_uri))
else: 
    raise ValueError("[ERROR] non-200 response from Bing server for '{}'".format(BING_URI_BASE + BING_WALLPAPER_PATH))

Cela écrira un fichier tel que TurtleTears_EN-US7942276596_1920x1080.jpgdans le même répertoire où le script est exécuté. Bien sûr, peut modifier un tas de choses ici, mais fait le travail assez facilement.


2

Laissez-moi vous dire comment obtenir le papier peint quotidien bing du jour en utilisant javascript et php,

Essayez ce code js:

<script>
      fetch('https://techytricks97.000webhostapp.com/')
      .then(response => response.text())
      .then(text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';});
</script>

Ce script définit l'image quotidienne bing du jour comme arrière-plan de votre document html (vous pouvez le modifier davantage selon votre utilisation).

Ce lien - https://techytricks97.000webhostapp.com renvoie le fond d'écran Bing du jour, tous les jours.

fetch()obtient l'url de l'image bing d'aujourd'hui https://techytricks97.000webhostapp.comet la text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}définit comme arrière-plan.

Remarque: Microsoft ne permet pas d'utiliser les images de bing daily comme arrière-plan de votre site, vous pouvez l'utiliser comme fond d'écran de téléphone / bureau, ou sur d'autres choses en mentionnant le droit d'auteur.

Voici le code php qui est utilisé sur http://techytricks97.000webhostapp.com :

<?php
header('Access-Control-Allow-Origin: *');
ini_set('display_errors', 1);
$reg=file_get_contents('https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN');
$reg=json_decode($reg);
$meka=$reg->images[0]->url;
echo('http://www.bing.com'.$meka);
?>

Vous pouvez utiliser http://techytricks97.000webhostapp.comuniquement ou configurer votre propre fichier php sur votre serveur.

Une autre note: je n'ai pas utilisé uniquement javascript, car la politique de même origine du navigateur le restreint, mais la récupération de mon fichier php est autorisée car j'ai mis header('Access-Control-Allow-Origin: *');dans mon code php. J'aurais pu utiliser d'autres proxys mais ils ont un trafic élevé (mon site ne reçoit pratiquement aucun clic en une journée).

Si vous utilisez une autre langue, il vous suffit de lire ce fichier ( http://techytricks97.000webhostapp.com )



1

Jetez un œil à bing-desktop-wallpaper-changer sur Github . Le script a été écrit en python et j'espère que vous y trouverez votre réponse.

#!/usr/bin/python
#-*- coding: utf-8 -*-

import os
import urllib
import urllib2
from bs4 import BeautifulSoup

# Get BingXML file which contains the URL of the Bing Photo of the day
# idx = Number days previous the present day. 0 means current day, 1 means       yesterday, etc
# n = Number of images predious the day given by idx
# mkt denotes your location. e.g. en-US means United States. Put in your  country code
BingXML_URL = "http://www.bing.com/HPImageArchive.aspx?     format=xml&idx=0&n=1&mkt=en-US"
page = urllib2.urlopen(BingXML_URL)
BingXML = BeautifulSoup(page, "lxml")

# For extracting complete URL of the image
Images = BingXML.find_all('image')
ImageURL = "https://www.bing.com" + Images[0].url.text
ImageName = Images[0].startdate.text+".jpg"

urllib.urlretrieve(ImageURL, ImageName)

Jetez un œil au projet Github pour un code détaillé


1
Bon travail! Cela a également été développé dans un article d' omgubuntu
Wtower

@Wtower Merci beaucoup de me l'avoir fait savoir! :)
Utkarsh Gupta

1

J'ai finalement décidé d'écrire un script en Python 3 pour obtenir le plus d'images (16) de l'archive xml.

Alors maintenant, je peux archiver les images sans effort. Exécutez simplement le script Python.
J'organise les images dans des dossiers Année / Mois comme ceci: 2018> 12 décembre> 2018-12-06.jpg

Ce script va dans mon dossier Bing Wallpapers. (qui se trouve dans mon dossier Images)

import urllib.request as urllib
import json
from datetime import date
from dateutil import parser
import sys,os

months = "January","Febuary","March","April","May","June","July","August","September","October","November","December"

def downloadBingImages(start):
    try: data = urllib.urlopen("https://www.bing.com/hpimagearchive.aspx?format=js&idx=%i&n=8&mkt=en-NZ"%start).read()
    except: sys.exit()
    e = json.loads(data.decode())
    images = e["images"]

    for image in images:
        d = parser.parse(image["startdate"]) # parse("20181206")

        filename = str(d.date())+".jpg"                         #                  2018-12-06.jpg
        folder = "%i/%i %s/"%(d.year,d.month,months[d.month-1]) # 2018/12 December/
        file = folder+filename                                  # 2018/12 December/2018-12-06.jpg

        if not os.path.exists(folder): os.makedirs(folder)
        exists = os.path.isfile(file)

        url = "https://www.bing.com"+image["urlbase"]+"_1920x1200.jpg"
        print(("downloading","exists")[exists],filename,url)
        if not exists:
            try: urllib.urlretrieve(url,file)
            except: sys.exit()

    print()

# downloads the 16 latest bing images
downloadBingImages(-1)
downloadBingImages(7)

Code supplémentaire facultatif pour mettre à jour le fond d'écran: (mis sous downloadBingImages (7))

import ctypes,win32con

def getWallpaper():
    ubuf = ctypes.create_unicode_buffer(512)
    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_GETDESKWALLPAPER,len(ubuf),ubuf,0)
    return ubuf.value

def setWallpaper(path):
    changed = win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE
    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_SETDESKWALLPAPER,0,path,changed)

# update wallpaper after a week from current
wallpaper = getWallpaper()
if wallpaper.startswith(os.getcwd()): # has to be in script directory
    try: wallpaperDate = parser.parse(os.path.splitext(os.path.basename(wallpaper))[0])
    except: sys.exit() # not using an image with a parsable date

    t = date.today()
    if (t-wallpaperDate.date()).days>=7: # been a week or longer
        setWallpaper(os.path.abspath("%i/%i %s/"%(t.year,t.month,months[t.month-1])+str(t)+".jpg")) # .../2018/12 December/2018-12-14.jpg

exemple de sortie:

exists 2018-12-15.jpg https://www.bing.com/az/hprichbg/rb/YosemiteBridge_ROW11493343707_1920x1200.jpg
exists 2018-12-14.jpg https://www.bing.com/az/hprichbg/rb/CardinalBerries_ROW13321753978_1920x1200.jpg
exists 2018-12-13.jpg https://www.bing.com/az/hprichbg/rb/ReykjavikYuleLads_ROW12406174277_1920x1200.jpg
exists 2018-12-12.jpg https://www.bing.com/az/hprichbg/rb/PoinsettiaBuds_ROW14015106672_1920x1200.jpg
exists 2018-12-11.jpg https://www.bing.com/az/hprichbg/rb/KilimanjaroMawenzi_ROW12001033920_1920x1200.jpg
exists 2018-12-10.jpg https://www.bing.com/az/hprichbg/rb/ChristmasIslandCrab_ROW12174154872_1920x1200.jpg
exists 2018-12-09.jpg https://www.bing.com/az/hprichbg/rb/JohnDaySnow_ROW10922424229_1920x1200.jpg
exists 2018-12-08.jpg https://www.bing.com/az/hprichbg/rb/BanffEvergreens_ROW13248925556_1920x1200.jpg

exists 2018-12-07.jpg https://www.bing.com/az/hprichbg/rb/TaisetsuShirakawago_ROW12053480529_1920x1200.jpg
exists 2018-12-06.jpg https://www.bing.com/az/hprichbg/rb/Huuhkajat_ROW11700922065_1920x1200.jpg
exists 2018-12-05.jpg https://www.bing.com/az/hprichbg/rb/SurfersBronteBeach_ROW9358782018_1920x1200.jpg
exists 2018-12-04.jpg https://www.bing.com/az/hprichbg/rb/SphinxObservatory_ROW9691446114_1920x1200.jpg
exists 2018-12-03.jpg https://www.bing.com/az/hprichbg/rb/HussarPoint_ROW8654856850_1920x1200.jpg
exists 2018-12-02.jpg https://www.bing.com/az/hprichbg/rb/Nuuk_ROW12381573676_1920x1200.jpg
exists 2018-12-01.jpg https://www.bing.com/az/hprichbg/rb/RedAntarctica_ROW12620598839_1920x1200.jpg
exists 2018-11-30.jpg https://www.bing.com/az/hprichbg/rb/KilchurnSky_ROW9474162800_1920x1200.jpg

PS le script ci-dessus utilise &mkt=en-NZpour les images de Nouvelle-Zélande.
Vous pouvez consulter le code du marché pour les autres pays ici .

Vous pouvez également voir toutes les images archivées depuis 2009 pour différents pays ici .
(seulement en 1366x768 cependant)

Major PS ajoute le script au planificateur de tâches à exécuter lors de la connexion. (ou quotidien / hebdomadaire)

Créez des arguments de
programme / script de tâche de base : python (ou C: \ Python34 \ python.exe s'il ne figure pas dans votre chemin d'environnement)
: "chemin / vers / votre / script.py"
commencez dans: "chemin / vers / votre"

METTRE À JOUR! (Mars 2019)
L'image du 10/03/2019 a reçu une mauvaise date de début (20190309) au format xml et rss.
Utilisation du format Json à la place. (car il donne une date précise)



1

Bash one liner (nécessite bash, curl et jq), utile pour mettre dans un cronjob:

BACKGROUND_META=$(curl 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US'); curl -o $(echo $BACKGROUND_META | jq -r '.images[0].urlbase' | sed s/.*=//).jpg "https://bing.com$(echo $BACKGROUND_META| jq -r '.images[0].url')"

0

Vous pouvez envisager d'obtenir le fichier_contenu de cette URL et rechercher dans le fichier l'image. Je ne suis pas sûr que ce soit la meilleure façon, mais c'est une façon.


0

En utilisant l'URL de @Siv, voici un exemple de JavaScript qui se met à jour <div class="bgimg" id="background">

function GetImageURL(ans) {
    var suffix = ans.images[0].url 
    document.getElementById("background").style.backgroundImage = 'url("' + 
    'http://bing.com/' + suffix + '"'
}

function GetJSON() {
    var xmlhttp = new XMLHttpRequest()
    var url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"

    xmlhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            var ans = JSON.parse(this.responseText);
            GetImageURL(ans);
        }
    };
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}


window.onload = function () {
    GetJSON()
}

Le css pour cette classe est:

.bgimg {
    height: 100%;
    position: relative;
    opacity: 0.95;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

Cela ne fonctionne pas pour moi à cause de la même politique d'origine du navigateur ...
Jean

0

Vous pouvez le faire en utilisant python et wget sur une machine Linux:

import os # import the os package
os.system("wget -O index.html http://www.bing.com") # download the bing index
str1 = open('index.html', 'r').read() # extract the file path using split
str2=str1.split("g_img={url: \"")[1]
str3=str2.split(".jpg")[0]
os.system("wget -O daily_im.jpg http://www.bing.com" + str3 + ".jpg") # donwload the daily image

Il télécharge l'arrière-plan quotidien de Bing dans le répertoire local sous le nom daily_im.jpg. Vous pouvez tout mettre sur un script.py et le lancer par programme.


0

EDIT 27/09/2018: http://www.istartedsomething.com/bingimages répond 404 pendant des semaines. Cela n'existe peut-être plus. :-(

Vous pouvez utiliser les archives d'images Bing de istartedsomething.com . Il s'agit d'une archive d'images Bing non officielle. Il utilise un point de terminaison maison qui est utile pour récupérer des images:

GET /bingimages/getimage.php?id=<image_id>

idest une chaîne contenant la date de publication de l'image et le pays où elle a été publiée. iddoit respecter le format suivant:, YYYYMMDD-xxoù:

  • YYYY est l'année, écrite avec quatre chiffres.
  • MM est le mois, écrit avec deux chiffres.
  • DD est le jour, écrit avec deux chiffres.
  • xxest l'indicateur du pays. Bing Image Archive prend actuellement en charge les pays suivants:
    • au: Australie.
    • br: Brésil.
    • ca: Canada.
    • cn: Chine.
    • de: Deutschland.
    • fr: France.
    • gb: Grande Bretagne.
    • jp: Japon.
    • nz: Nouvelle-Zélande.
    • uk: Royaume-Uni.
    • us: Les États-Unis d'Amérique.

Il renvoie un objet JSON utile s'il contient des informations ou false s'il n'a rien.

Exemple 1: Récupération de l'image quotidienne Bing qui a été publiée le 24 mai 2014 en Nouvelle-Zélande

L'identifiant de l'image est 20140524-nzdû au fait que l'image demandée a été publiée le 24/05/2014 et qu'elle a été publiée en Nouvelle-Zélande, dont l'indicateur de pays est nz.

http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz renvoie le morceau suivant de JSON:

{
    "url":"\/az\/hprichbg\/rb\/LakeMagadiFlamingos_ROW9792683076_1366x768.jpg",
    "region":"nz",
    "date":"2014-05-24",
    "copyright":"Flamingos take flight, Lake Magadi, Kenya (\u00a9 Bobby Haas\/Getty Images)(Bing New Zealand)",
    "imageurl":"http:\/\/www.istartedsomething.com\/bingimages\/cache\/LakeMagadiFlamingos_ROW9792683076_1366x768.jpg",
    "hotspots":[],
    "video":[]
}

Vous pouvez utiliser le imageurlchamp ou le champ url(Bing URL path) pour obtenir votre image.

Exemple 2: Récupération de l'image du quotidien Bing publiée le 12 juillet 1998 en France

L'identifiant de l'image est 19980712-frdû au fait que l'image demandée a été publiée le 07/12/1998 et qu'elle a été publiée en France, dont l'indicateur de pays est fr.

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr revient falsecar il n'y a pas d'image quotidienne Bing pour la France au 12/07/1998 (Bing n'existait même pas à ce moment).


Liens morts, Et je n'ai rien trouvé de similaire pour mettre à jour la réponse.
sous

0

OP ne spécifie pas le système d'exploitation, donc en voici un à utiliser sous Linux. J'ai modifié le script proposé ici .

Fondamentalement, il récupère l'url de l'image du jour, télécharge l'image et l'enregistre dans un fichier fixe ~/.config/wallpaper.jpg, et utilise fehpour définir le fond d'écran. En même temps envoie une notification.

#!/bin/sh

WP_FILE=$HOME/.config/wallpaper.jpg

bing="www.bing.com"

# $xmlURL is needed to get the xml data from which
# the relative URL for the Bing pic of the day is extracted
#
# The mkt parameter determines which Bing market you would like to
# obtain your images from.
# Valid values are: en-US, zh-CN, ja-JP, en-AU, en-UK, de-DE, en-NZ, en-CA or opted out.
#
# The idx parameter determines where to start from. 0 is the current day,
# 1 the previous day, etc.
xmlURL="http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US"

# The desired Bing picture resolution to download
# Valid options: "_1024x768" "_1280x720" "_1366x768" "_1920x1200"
desiredPicRes="_1920x1080"

# The file extension for the Bing pic
picExt=".jpg"

# Extract the relative URL of the Bing pic of the day from
# the XML data retrieved from xmlURL, form the fully qualified
# URL for the pic of the day, and store it in $picURL

# Form the URL for the desired pic resolution
desiredPicURL=$bing$(curl -s $xmlURL | grep -oP "(?<=<urlBase>)(.*?)(?=</urlBase>)")$desiredPicRes$picExt

# Form the URL for the default pic resolution
defaultPicURL=$bing$(curl -s $xmlURL | grep -oP "(?<=<url>)(.*?)(?=</url>)")

# $picName contains the filename of the Bing pic of the day

# Attempt to download the desired image resolution. If it doesn't
# exist then download the default image resolution
if wget --quiet --spider "$desiredPicURL"
then

    # Download the Bing pic of the day at desired resolution
    curl -s -o "$WP_FILE" "$desiredPicURL"
else
    # Download the Bing pic of the day at default resolution
    curl -s -o "$WP_FILE" "$defaultPicURL"
fi

if [[ -f "${WP_FILE}" ]]; then
    feh --bg-scale "$WP_FILE" && \
        notify-send -i emblem-photos "Wallpaper" "Wallpaper changed" \
        -h int:suppress-sound:1 -h int:transient:1
fi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.