C'è un modo per ottenere l'immagine di sfondo di Bing a livello di codice?
L'API di Bing non sembra fornire tale funzionalità, forse c'è un altro modo?
C'è un modo per ottenere l'immagine di sfondo di Bing a livello di codice?
L'API di Bing non sembra fornire tale funzionalità, forse c'è un altro modo?
Risposte:
Penso che il modo migliore sia imitare il modo in cui lo fanno da soli attraverso le loro chiamate AJAX.
Chiamano questo URL ed estraggono le informazioni tramite la deserializzazione 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
attributo può ovviamente essere modificato in una regione diversa da "en-US", ma può anche essere escluso completamente se non ti interessa una regione specifica.
Si noti che il _1366x768.jpg
suffisso che viene aggiunto ai nomi delle immagini sembra essere modificabile in diverse risoluzioni (come _1920x1080.jpg
per il full HD e possibilmente altri).
Ecco un dump dei dati del 28/09/2013, in formato 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
funzioni, cioè anche 1920x1080
e altre.
&mkt=en-US
parti. Anche se l'app è impostata su "Inglese-Stati Uniti".
jsonp
, ma non sembra che lo permettano.
Ho trovato un modo per andare a prendere il formato JSON del Bing Immagine del giorno
n=
Il numero di immagini che desideri (puoi usare numeri interi ), La
mkt=
tua posizione (esempio: 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."
}
}
utilizzare il url
daimages[]
e aggiungilo a 'http://bing.com'
qui l'url è "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"
Unexpected token :
inhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Microsoft ha recentemente pubblicato un tema dinamico Bing per Windows 7, che contiene un feed RSS con collegamenti agli sfondi di Bing .
C'è anche uno script Python che cerca di caricare il sito Web di Bing e indovinare l'URL dell'immagine corretto, ma dalla mia esperienza, di solito si traduce in un'immagine a risoluzione inferiore rispetto a quelle offerte dal feed RSS.
Sono in ritardo alla festa, ma nel caso qualcuno abbia bisogno di un'implementazione PHP: ho scritto una semplice classe che gestisce la procedura:
One liner PowerShell (3.0 o versione successiva)
irm
è un alias per Invoke-RestMethod
irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg
Mi piacciono anche le immagini di Bing, ma la loro app è troppo gonfia per scaricare le immagini. Dopo aver analizzato la connessione con Fiddler, ho scritto questo codice. Il 1920x1200 viene fornito con il logo Bing incorporato ma le risoluzioni inferiori non lo hanno.
Puoi fare in modo che le finestre ti mostrino immagini casuali dalla cartella delle immagini che hai impostato, quindi mentre le scarichi ogni giorno, ti mostrerà più immagini casuali. Se mantieni "imageDir", devi cambiare i permessi su quella cartella o andrà in crash, non mi sono preoccupato di rilevare gli errori. Infine, annulla il commento delle righe se desideri impostare lo sfondo sull'immagine odierna oppure puoi creare un'attività per eseguire il programma, ad esempio un minuto dopo l'accesso.
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();
}
}
}
}
Ho visto che molte persone chiedono anche il nuovo link RSS, basta cambiare il parametro di formato nell'URL in "rss".
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US
Questo JavaScript risponderà a "cosa fare con l'API" cambiando l'immagine di sfondo di un div con lo sfondo dell'immagine bing del giorno corrente.
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%";
}
}
}
Nel caso qualcuno stia cercando possibili implementazioni, ho scritto un piccolo programma a riga di comando in C # per scaricare, salvare e impostare il mio sfondo come Bing Image of the Day. Sentiti libero di modificarlo in base alle tue esigenze personali. 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);
}
}
}
Semplice PowerShell, inseriscilo in una cartella, crea un'attività quotidiana nell'Utilità di pianificazione di Windows, lo script salva le immagini nella cartella di esecuzione, quindi nelle impostazioni dello sfondo del desktop scegli quella cartella come sfondo.
[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)"
Ecco un semplice script Python per recuperare la foto Bing del giorno usando solo requests
e 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))
Questo scriverà un file come TurtleTears_EN-US7942276596_1920x1080.jpg
nella stessa directory in cui viene eseguito lo script. Certo, può modificare un sacco di cose qui, ma ottiene il lavoro ragionevolmente facilmente.
Lascia che ti dica come ottenere lo sfondo quotidiano di bing del giorno usando javascript e php,
Prova questo codice 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>
Questo script imposta l'immagine giornaliera bing del giorno come sfondo del tuo documento html (puoi modificarla ulteriormente secondo il tuo utilizzo).
Questo link- https://techytricks97.000webhostapp.com restituisce lo sfondo di Bing del giorno, tutti i giorni.
fetch()
ottiene l'URL dell'immagine Bing di oggi da https://techytricks97.000webhostapp.com
e lo text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}
imposta come sfondo.
Nota: Microsoft non consente di utilizzare le immagini di bing daily come sfondo del tuo sito, puoi usarlo come sfondo del telefono / desktop o su altre cose con menzione del copyright.
Ecco il codice php che viene utilizzato su 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);
?>
Puoi usare http://techytricks97.000webhostapp.com
solo o puoi impostare il tuo file php sul tuo server.
Un'altra nota: non ho usato solo javascript, perché la politica della stessa origine del browser lo limita, ma il recupero dal mio file php è consentito poiché ho inserito il header('Access-Control-Allow-Origin: *');
mio codice php. Avrei potuto usare altri proxy ma hanno un traffico elevato (il mio sito non riceve quasi alcun clic in un giorno).
Se stai usando qualsiasi altra lingua, devi solo leggere questo file ( http://techytricks97.000webhostapp.com )
Ho avuto problemi a ottenere un feed RSS adeguato da poter utilizzare con John's Background Switcher fino a quando non ho trovato questo feed feedburner che sembra funzionare abbastanza bene: http://feeds.feedburner.com/bingimages
Dai un'occhiata a bing-desktop-wallpaper-changer su Github . Lo script è stato scritto in Python e spero che tu trovi la tua risposta lì.
#!/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)
Dai un'occhiata al progetto Github per il codice dettagliato
Alla fine ho deciso di scrivere uno script in Python 3 per ottenere il maggior numero di immagini (16) dall'archivio xml.
Quindi ora posso archiviare le immagini senza alcuno sforzo. Basta eseguire lo script Python.
Organizzo le immagini in cartelle Anno / Mese come questa: 2018> 12 dicembre> 2018-12-06.jpg
Questo script va nella mia cartella Sfondi di Bing. (che è nella mia cartella Immagini)
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)
Codice extra opzionale per aggiornare lo sfondo: (messo sotto 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
output di esempio:
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 lo script sopra è utilizzato &mkt=en-NZ
per le immagini della Nuova Zelanda.
Puoi controllare il codice di mercato per altri paesi qui .
Puoi anche vedere tutte le immagini archiviate dal 2009 per diversi paesi qui .
(solo in 1366x768 però)
Il principale PS aggiunge lo script all'Utilità di pianificazione da eseguire durante l'accesso. (o giornaliero / settimanale)
Crea
programma attività di base / script: python (o C: \ Python34 \ python.exe se non è nel tuo percorso env)
argomenti: "percorso / a / tuo / script.py"
inizia in: "percorso / a / tuo"
AGGIORNARE! (Marzo 2019)
All'immagine per 2019-03-10 è stata data una data di inizio errata (20190309) sia in formato xml che rss.
Utilizzando invece il formato Json. (poiché fornisce una data precisa)
https://peapix.com/bing/feed
elencherà l'ultima immagine Bing senza il logo Bing, gestita da peapix.com . Supportato il seguente paese / regione: AU, CA, CN, DE, FR, JP, US, GB.
ad esempio, https://peapix.com/bing/feed?country=jp per il Giappone e https://peapix.com/bing/feed?country=us per gli Stati Uniti.
Bash one liner (necessita di bash, curl e jq), utile per inserire 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')"
Potresti prendere in considerazione l'idea di ottenere il file_content di quell'URL e cercare l'immagine nel file. Non sono sicuro che sia il modo migliore, ma è un modo.
Utilizzando l'URL di @Siv, ecco un esempio di JavaScript che si aggiorna <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()
}
Il CSS per questa classe è:
.bgimg {
height: 100%;
position: relative;
opacity: 0.95;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Puoi farlo usando python e wget su una macchina 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
Scarica lo sfondo giornaliero di bing nella directory locale con il nome daily_im.jpg. Puoi mettere tutto su script.py e avviarlo a livello di programmazione.
EDIT 27/09/2018: http://www.istartedsomething.com/bingimages risponde 404 per settimane. Potrebbe non esistere più. :-(
È possibile utilizzare l'archivio immagini Bing di istartedsomething.com . È un archivio di immagini Bing non ufficiale. Utilizza un endpoint fatto in casa che è utile per recuperare le immagini:
GET /bingimages/getimage.php?id=<image_id>
id
è una stringa contenente la data in cui l'immagine è stata pubblicata e il paese in cui è stata pubblicata. id
deve essere conforme al seguente formato:, YYYYMMDD-xx
dove:
YYYY
è l'anno, scritto con quattro cifre.MM
è il mese, scritto con due cifre.DD
è il giorno, scritto con due cifre.xx
è l'indicatore del paese. Bing Image Archive attualmente supporta i seguenti paesi:
au
: Australia.br
: Brasile.ca
: Canada.cn
: Cina.de
: Deutschland.fr
: Francia.gb
: Gran Bretagna.jp
: Giappone.nz
: Nuova Zelanda.uk
: Regno Unito.us
: Stati Uniti d'America.Restituisce un oggetto JSON utile se ha alcune informazioni o false se non ha nulla.
Esempio 1: recupero dell'immagine quotidiana di Bing pubblicata il 24 maggio 2014 in Nuova Zelanda
L'ID immagine è 20140524-nz
perché l'immagine richiesta è stata pubblicata il 24/05/2014 ed è stata pubblicata in Nuova Zelanda, il cui indicatore del paese è nz
.
http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz restituisce il seguente pezzo di 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":[]
}
Puoi utilizzare il imageurl
campo o il campo url
(Percorso URL Bing) per ottenere la tua immagine.
Esempio 2: recupero dell'immagine quotidiana di Bing pubblicata il 12 luglio 1998 in Francia
L'ID immagine è 19980712-fr
perché l'immagine richiesta è stata pubblicata il 07/12/1998 ed è stata pubblicata in Francia, il cui indicatore del paese è fr
.
http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr ritorna false
perché non esiste un'immagine Bing Daily per la Francia il 07/12/1998 (Bing non esisteva nemmeno in questo momento).
OP non specifica il sistema operativo, quindi eccone uno per l'utilizzo in Linux. Ho modificato dallo script offerto qui .
Fondamentalmente recupera l'URL dell'immagine del giorno, scarica l'immagine e la salva in un file fisso ~/.config/wallpaper.jpg
e utilizza feh
per impostare lo sfondo. Allo stesso tempo invia una notifica.
#!/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