Gibt es eine Möglichkeit, das Bing-Hintergrundbild programmgesteuert abzurufen?
Die API von Bing scheint keine solche Funktionalität zu bieten, vielleicht gibt es einen anderen Weg?
Gibt es eine Möglichkeit, das Bing-Hintergrundbild programmgesteuert abzurufen?
Die API von Bing scheint keine solche Funktionalität zu bieten, vielleicht gibt es einen anderen Weg?
Antworten:
Ich denke, der beste Weg ist, die Art und Weise nachzuahmen, wie sie es selbst durch ihre AJAX-Anrufe tun.
Sie rufen diese URL auf und extrahieren die Informationen durch XML-Deserialisierung.
XML: http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=de-DE
JSON: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-US
RSS: http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=de-US
Das mkt
Attribut kann natürlich in eine andere Region als "en-US" geändert werden, kann aber auch vollständig deaktiviert werden, wenn Sie sich nicht für eine bestimmte Region interessieren.
Beachten Sie, dass das _1366x768.jpg
Suffix, das den Bildnamen hinzugefügt wird, in verschiedene Auflösungen geändert werden kann (wie _1920x1080.jpg
bei Full HD und möglicherweise anderen).
Hier ist ein Speicherauszug der Daten vom 28.09.2013 im XML-Format.
<?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
funktioniert, dh auch 1920x1080
und andere.
&mkt=en-US
Teil. Dies ist, obwohl ich die App auf "Englisch-USA" eingestellt habe.
jsonp
, aber es scheint nicht so, als ob sie das zulassen.
Ich habe einen Weg gefunden, das JSON-Format des Bing Image des Tages abzurufen
n=
Die Anzahl der gewünschten Bilder (Sie können Ganzzahlen verwenden ),
mkt=
Ihr Standort (Beispiel: 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."
}
}
benutze das url
aus demimages[]
und füge es hinzu 'http://bing.com'
hier ist 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 hat kürzlich ein Bing Dynamic Theme für Windows 7 veröffentlicht, das einen RSS-Feed mit Links zu Bing-Hintergrundbildern enthält .
Es gibt auch ein Python-Skript, das versucht, die Bing-Website zu laden und die richtige Bild-URL zu erraten, aber meiner Erfahrung nach führt es normalerweise zu einem Bild mit niedrigerer Auflösung als das vom RSS-Feed angebotene.
Ich bin zu spät zur Party, aber falls jemand eine PHP-Implementierung benötigt: Ich habe eine einfache Klasse geschrieben, die die Prozedur behandelt:
Einzeiler PowerShell (3.0 oder höher)
irm
ist ein Alias für Invoke-RestMethod
irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg
Ich mag auch Bing-Bilder, aber ihre App ist zu aufgebläht, um Bilder herunterzuladen. Nachdem ich die Verbindung mit Fiddler analysiert hatte, schrieb ich diesen Code. Das 1920x1200 ist mit einem eingebetteten Bing-Logo ausgestattet, bei niedrigeren Auflösungen ist es jedoch nicht vorhanden.
In Windows werden Ihnen zufällige Bilder aus dem von Ihnen festgelegten Bildordner angezeigt. Wenn Sie sie also täglich herunterladen, werden Ihnen mehr zufällige Bilder angezeigt. Wenn Sie das "imageDir" behalten, müssen Sie die Berechtigungen für diesen Ordner ändern, da es sonst abstürzt. Ich habe mich nicht darum gekümmert, Fehler abzufangen. Deaktivieren Sie zum Schluss die Kommentare, wenn Sie Ihr Hintergrundbild auf das heutige Bild einstellen möchten, oder erstellen Sie eine Aufgabe zum Ausführen des Programms, z. B. eine Minute nach der Anmeldung.
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();
}
}
}
}
Ich habe gesehen, dass viele Leute auch nach dem neuen RSS-Link fragen. Ändern Sie einfach den Formatparameter in der URL in "rss".
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=de-US
Dieses JavaScript beantwortet die Frage, was mit der API zu tun ist, indem das Hintergrundbild eines Div in den Hintergrund des Bing-Bilds des aktuellen Tages geändert wird.
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%";
}
}
}
Für den Fall, dass jemand nach möglichen Implementierungen sucht, habe ich ein kleines Befehlszeilenprogramm in C # geschrieben, um meinen Hintergrund als Bing-Image des Tages herunterzuladen, zu speichern und festzulegen. Fühlen Sie sich frei, es an Ihre persönlichen Bedürfnisse anzupassen. 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);
}
}
}
Einfache PowerShell, in einen Ordner legen, eine tägliche Aufgabe in Windows Task Scheduler erstellen, das Skript Bilder in seinem Ausführungsordner speichern und dann in Ihren Desktop-Hintergrundeinstellungen diesen Ordner als Hintergrund auswählen.
[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)"
Hier ist ein einfaches Python-Skript zum Abrufen des Bing-Fotos des Tages mit just requests
und 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))
Dadurch wird eine Datei wie TurtleTears_EN-US7942276596_1920x1080.jpg
in dasselbe Verzeichnis geschrieben, in dem das Skript ausgeführt wird. Natürlich kann man hier eine ganze Reihe von Dingen optimieren, aber die Arbeit ist ziemlich einfach zu erledigen.
Lassen Sie mich Ihnen sagen, wie Sie mit Javascript und PHP das tägliche Hintergrundbild des Tages erhalten.
Versuchen Sie diesen js-Code:
<script>
fetch('https://techytricks97.000webhostapp.com/')
.then(response => response.text())
.then(text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';});
</script>
Dieses Skript legt das tägliche Bild des Tages als Hintergrund für Ihr HTML-Dokument fest (Sie können es je nach Verwendung weiter ändern).
Dieser Link - https://techytricks97.000webhostapp.com - gibt jeden Tag das Bing-Hintergrundbild des Tages zurück.
fetch()
Ruft die URL des heutigen Bing-Bildes ab https://techytricks97.000webhostapp.com
und text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}
legt sie als Hintergrund fest.
Hinweis: Microsoft erlaubt nicht, die Bilder von Bing Daily als Hintergrund für Ihre Website zu verwenden. Sie können sie als Hintergrundbild für Telefone / Desktops oder für andere Zwecke verwenden, bei denen das Urheberrecht erwähnt wird.
Hier ist der PHP-Code, der auf http://techytricks97.000webhostapp.com verwendet wird :
<?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);
?>
Sie können http://techytricks97.000webhostapp.com
nur Ihre eigene PHP-Datei auf Ihrem Server verwenden oder einrichten.
Noch ein Hinweis: Ich habe nicht nur Javascript verwendet, da die Richtlinie für den gleichen Ursprung des Browsers dies einschränkt, aber das Abrufen aus meiner PHP-Datei ist zulässig, wie ich angegeben habeheader('Access-Control-Allow-Origin: *');
meinen PHP-Code eingegeben habe. Ich hätte andere Proxys verwenden können, aber sie haben viel Verkehr (meine Website bekommt an einem Tag kaum einen Klick).
Wenn Sie eine andere Sprache verwenden, müssen Sie nur diese Datei lesen ( http://techytricks97.000webhostapp.com ).
Ich hatte Probleme, einen richtigen RSS-Feed zu erhalten, den ich mit Johns Background Switcher verwenden konnte, bis ich diesen Feedburner-Feed fand, der recht gut zu funktionieren scheint: http://feeds.feedburner.com/bingimages
Schauen Sie sich bing-desktop-wallpaper-changer auf Github an . Das Skript wurde in Python geschrieben und ich hoffe, Sie finden dort Ihre Antwort.
#!/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)
Schauen Sie sich das Github-Projekt an, um detaillierten Code zu erhalten
Ich habe mich gerade entschlossen, ein Skript in Python 3 zu schreiben, um die meisten Bilder (16) aus dem XML-Archiv zu erhalten.
Jetzt kann ich die Bilder mühelos archivieren. Führen Sie einfach das Python-Skript aus.
Ich organisiere die Bilder in Jahr / Monat-Ordnern wie folgt: 2018> 12. Dezember> 2018-12-06.jpg
Dieses Skript befindet sich in meinem Ordner Bing Wallpapers. (das ist in meinem Bilderordner)
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)
Optionaler zusätzlicher Code zum Aktualisieren des Hintergrundbilds: (unter 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
Beispielausgabe:
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: Das obige Skript wird &mkt=en-NZ
für die neuseeländischen Bilder verwendet.
Den Marktcode für andere Länder können Sie hier einsehen .
Hier können Sie auch alle seit 2009 archivierten Bilder für verschiedene Länder sehen .
(allerdings nur in 1366x768)
Major PS fügt das Skript zum Taskplaner hinzu, um es beim Anmelden auszuführen. (oder täglich / wöchentlich)
Erstellen Sie ein grundlegendes Aufgabenprogramm
/ Skript: python (oder C: \ Python34 \ python.exe, wenn es nicht in Ihrem env-Pfad enthalten ist)
Argumente: "path / to / your / script.py"
Start in: "path / to / your"
AKTUALISIEREN! (März 2019)
Das Bild für den 10.03.2019 wurde sowohl im XML- als auch im RSS-Format mit einem falschen Startdatum (20190309) versehen.
Verwenden Sie stattdessen das Json-Format. (da es genaues Datum gibt)
https://peapix.com/bing/feed
listet das neueste Bing-Bild ohne Bing-Logo auf, das von peapix.com gepflegt wird . Unterstützt folgendes Land / Region: AU, CA, CN, DE, FR, JP, US, GB.
Beispiel: https://peapix.com/bing/feed?country=jp für Japan und https://peapix.com/bing/feed?country=us für die USA.
Bash One Liner (benötigt Bash, Curl und JQ), nützlich für einen 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')"
Sie können den Dateiinhalt dieser URL abrufen und die Datei nach dem Bild durchsuchen. Ich bin mir nicht sicher, ob das der beste Weg ist, aber es ist ein Weg.
Unter Verwendung der URL von @Siv finden Sie hier ein Beispiel für JavaScript, das aktualisiert wird <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()
}
Das CSS für diese Klasse lautet:
.bgimg {
height: 100%;
position: relative;
opacity: 0.95;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Sie können dies mit Python und Wget auf einem Linux-Computer tun:
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
Es lädt den täglichen Bing-Hintergrund im lokalen Verzeichnis unter dem Namen daily_im.jpg herunter. Sie können alles in eine script.py einfügen und programmgesteuert starten.
EDIT 27.09.2008: http://www.istartedsomething.com/bingimages antwortet wochenlang auf 404. Es kann nicht mehr existieren. :-(
Sie können das Bing Image Archive von istartedsomething.com verwenden . Es ist ein inoffizielles Bing Image Archive. Es wird ein hausgemachter Endpunkt verwendet, der zum Abrufen von Bildern hilfreich ist:
GET /bingimages/getimage.php?id=<image_id>
id
ist eine Zeichenfolge, die das Datum der Veröffentlichung des Bildes und das Land enthält, in dem es veröffentlicht wurde. id
muss dem folgenden Format entsprechen : YYYYMMDD-xx
, wobei:
YYYY
ist das Jahr, vierstellig geschrieben.MM
ist der Monat, zweistellig geschrieben.DD
ist der Tag, zweistellig geschrieben.xx
ist der Länderindikator. Bing Image Archive unterstützt derzeit die folgenden Länder:
au
: Australien.br
: Brasilien.ca
: Kanada.cn
: China.de
: Deutschland.fr
: Frankreich.gb
: Großbritannien.jp
: Japan.nz
: Neuseeland.uk
: Großbritannien.us
: Vereinigte Staaten von Amerika.Es gibt ein nützliches JSON-Objekt zurück, wenn es Informationen enthält, oder false, wenn es nichts enthält.
Beispiel 1: Wiederholen des täglichen Bing-Bildes, das am 24. Mai 2014 in Neuseeland veröffentlicht wurde
Die Bild-ID ist darauf zurückzuführen, 20140524-nz
dass das angeforderte Bild am 24.05.2014 veröffentlicht wurde und in Neuseeland veröffentlicht wurde, dessen Länderindikator lautet nz
.
http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz gibt das folgende Stück JSON zurück:
{
"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":[]
}
Sie können das imageurl
Feld oder das Feld url
(Bing-URL-Pfad) verwenden, um Ihr Bild abzurufen.
Beispiel 2: Wiederholen des täglichen Bing-Bildes, das am 12. Juli 1998 in Frankreich veröffentlicht wurde
Die Bild-ID ist darauf zurückzuführen, 19980712-fr
dass das angeforderte Bild am 12.07.1998 veröffentlicht wurde und in Frankreich veröffentlicht wurde, dessen Länderindikator lautetfr
.
http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr kehrt zurück, false
da es am 12.07.1998 kein Bing Daily Image für Frankreich gibt (Bing existierte zu diesem Zeitpunkt noch nicht einmal).
OP gibt das Betriebssystem nicht an, daher hier eines für die Verwendung unter Linux. Ich habe das hier angebotene Skript geändert .
Grundsätzlich wird die URL des Bilds des Tages abgerufen, das Bild heruntergeladen und in einer festen Datei gespeichert ~/.config/wallpaper.jpg
und feh
zum Festlegen des Hintergrundbilds verwendet. Gleichzeitig sendet eine Benachrichtigung.
#!/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