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?
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:
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' mkt
attribut 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.jpg
suffixe ajouté aux noms d'image semble être modifiable dans différentes résolutions (comme _1920x1080.jpg
pour 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&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&cp=2.794725~37.335197&lvl=7&dir=0&sty=b&q=Lake%20Turkana%2C%20Kenya&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&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&FORM=hphot3#view=detail&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&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>
_1920x1200
fonctionne, c'est-à-dire aussi 1920x1080
et d'autres.
&mkt=en-US
partie. C'est même si l'application est définie sur "Anglais-États-Unis".
jsonp
, mais il ne semble pas qu'ils le permettent.
J'ai trouvé un moyen de récupérer le format JSON de l' image Bing du jour
n=
Le nombre d'images que vous voulez (vous pouvez utiliser des nombres entiers ),
mkt=
votre emplacement (exemple: en-US )
{
"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 url
depuis leimages[]
et ajoutez-le à 'http://bing.com'
ici l'url est "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"
Unexpected token :
àhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
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.
Je suis en retard à la fête, mais au cas où quelqu'un aurait besoin d'une implémentation PHP: j'ai écrit une classe simple qui gère la procédure:
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
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();
}
}
}
}
J'ai vu que beaucoup de gens demandent aussi le nouveau lien RSS, il suffit de changer le paramètre de format dans l'URL en "rss".
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US
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%";
}
}
}
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);
}
}
}
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)"
Voici un simple script Python pour récupérer la photo Bing du jour en utilisant juste requests
et 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.jpg
dans 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.
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.com
et 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.com
uniquement 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 )
J'avais du mal à obtenir un flux RSS approprié que je pourrais utiliser avec le sélecteur d'arrière-plan de John jusqu'à ce que je trouve ce flux feedburner qui semble très bien fonctionner: http://feeds.feedburner.com/bingimages
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é
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-NZ
pour 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)
https://peapix.com/bing/feed
listera la dernière image Bing sans logo Bing, maintenue par peapix.com . Prise en charge du pays / région suivant: AU, CA, CN, DE, FR, JP, US, GB.
par exemple, https://peapix.com/bing/feed?country=jp pour le Japon et https://peapix.com/bing/feed?country=us pour les États-Unis.
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')"
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.
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;
}
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.
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>
id
est une chaîne contenant la date de publication de l'image et le pays où elle a été publiée. id
doit respecter le format suivant:, YYYYMMDD-xx
où:
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.xx
est 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-nz
dû 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 imageurl
champ 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-fr
dû 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 false
car il n'y a pas d'image quotidienne Bing pour la France au 12/07/1998 (Bing n'existait même pas à ce moment).
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 feh
pour 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