Czy jest jakiś sposób, aby uzyskać programowy obraz tła usługi Bing?
Wygląda na to, że API Bing nie zapewnia takiej funkcjonalności, może jest inny sposób?
Czy jest jakiś sposób, aby uzyskać programowy obraz tła usługi Bing?
Wygląda na to, że API Bing nie zapewnia takiej funkcjonalności, może jest inny sposób?
Odpowiedzi:
Myślę, że najlepszym sposobem jest naśladowanie sposobu, w jaki robią to sami za pomocą połączeń AJAX.
Wywołują ten adres URL i wyodrębniają informacje za pomocą deserializacji 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
mkt
Atrybut może być oczywiście zmieniona na innym regionie niż'En-US', ale może być również zrezygnowali z całkowicie, jeśli nie dbają o określonym regionie.
Zwróć uwagę, że _1366x768.jpg
sufiks dodawany do nazw obrazów wydaje się być modyfikowalny w różnych rozdzielczościach (jak _1920x1080.jpg
dla Full HD i prawdopodobnie innych).
Oto zrzut danych z dnia 28.09.2013 w formacie 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
działa, czyli też 1920x1080
i inne.
&mkt=en-US
części. Dzieje się tak, mimo że mam ustawioną aplikację na „English-United States”.
jsonp
, ale wydaje się, że nie pozwalają na to.
Znalazłem sposób, aby pobrać w formacie JSON z Bing obrazu dnia
n=
Liczba żądanych obrazów (możesz użyć liczb całkowitych ),
mkt=
Twoja lokalizacja (przykład: en-PL )
{
"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."
}
}
użyj url
zimages[]
i dodaj do 'http://bing.com'
tutaj jest adres URL "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"
Unexpected token :
whttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Firma Microsoft niedawno opublikowała dynamiczny motyw Bing dla systemu Windows 7, który zawiera kanał RSS z łączami do tapet Bing .
Istnieje również skrypt w języku Python, który próbuje załadować witrynę Bing i odgadnąć prawidłowy adres URL obrazu, ale z mojego doświadczenia wynika, że zwykle powoduje to obraz o niższej rozdzielczości niż te oferowane przez kanał RSS.
Spóźniłem się na imprezę, ale na wypadek, gdyby ktoś potrzebował implementacji PHP: napisałem prostą klasę, która obsługuje procedurę:
One liner PowerShell (3.0 lub nowszy)
irm
jest aliasem dla Invoke-RestMethod
irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg
Lubię też obrazy Bing, ale ich aplikacja jest zbyt nadęta, aby pobierać obrazy. Po przeanalizowaniu połączenia ze skrzypkiem napisałem ten kod. 1920x1200 ma osadzone logo Bing, ale nie ma go w niższych rozdzielczościach.
Możesz ustawić okna, aby wyświetlały losowe obrazy z ustawionego folderu obrazów, więc jeśli będziesz je codziennie pobierać, pokaże Ci więcej losowych obrazów. Jeśli zachowasz "imageDir", musisz zmienić uprawnienia do tego folderu, bo inaczej się zawiesi, nie zawracałem sobie głowy wyłapywaniem błędów. Na koniec usuń komentarz w wierszach, jeśli chcesz ustawić tapetę na dzisiejszy obraz lub możesz utworzyć zadanie uruchamiania programu, powiedzmy minutę po zalogowaniu.
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();
}
}
}
}
Widziałem, że wiele osób również pyta o nowy link RSS, po prostu zmień parametr formatu w adresie URL na „rss”.
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US
Ten JavaScript odpowie na pytanie „co zrobić z interfejsem API”, zmieniając obraz tła elementu div na tło obrazu Bing z bieżącego dnia.
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%";
}
}
}
Na wypadek, gdyby ktoś szukał możliwych implementacji, napisałem mały program wiersza poleceń w C #, aby pobrać, zapisać i ustawić moje tło jako obraz dnia Bing. Zapraszam do modyfikacji go do własnych potrzeb. 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);
}
}
}
Prosty PowerShell, umieść w folderze, utwórz codzienne zadanie w Harmonogramie zadań systemu Windows, skrypt zapisuje obrazy w swoim folderze uruchamiania, a następnie w ustawieniach tła pulpitu wybierz ten folder jako tło.
[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)"
Oto prosty skrypt w Pythonie do pobierania zdjęcia dnia z usługi Bing przy użyciu tylko requests
i 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))
Spowoduje to zapisanie pliku, takiego jak, TurtleTears_EN-US7942276596_1920x1080.jpg
w tym samym katalogu, w którym wykonywany jest skrypt. Oczywiście można tutaj zmienić całą masę rzeczy, ale wykonuje zadanie dość łatwo.
Pozwól, że powiem ci, jak uzyskać codzienną tapetę Bing dnia za pomocą JavaScript i PHP,
Wypróbuj ten kod 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>
Ten skrypt ustawia codzienny obraz dnia jako tło twojego dokumentu HTML (możesz go dalej modyfikować zgodnie ze swoim użyciem).
Ten link - https://techytricks97.000webhostapp.com codziennie zwraca tapetę Bing dnia.
fetch()
pobiera adres URL dzisiejszego obrazu Bing https://techytricks97.000webhostapp.com
i text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}
ustawia go jako tło.
Uwaga: Microsoft nie zezwala na używanie obrazów Bing Daily jako tła Twojej witryny, możesz używać ich jako tapety telefonu / pulpitu lub do innych rzeczy, wspominając o prawach autorskich.
Oto kod php, który jest używany na 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);
?>
Możesz używać http://techytricks97.000webhostapp.com
tylko lub możesz skonfigurować własny plik php na serwerze.
Kolejna uwaga: nie użyłem tylko javascript, ponieważ polityka tego samego pochodzenia przeglądarki ogranicza to, ale pobieranie z mojego pliku php jest dozwolone, ponieważ umieściłem header('Access-Control-Allow-Origin: *');
w swoim kodzie php. Mógłbym użyć innych serwerów proxy, ale mają duży ruch (moja witryna prawie nie otrzymuje kliknięć w ciągu dnia).
Jeśli używasz innego języka, wystarczy przeczytać ten plik ( http://techytricks97.000webhostapp.com )
Miałem problem z uzyskaniem odpowiedniego kanału RSS, którego mógłbym używać z przełącznikiem w tle Johna, dopóki nie znalazłem tego kanału, który wydaje się działać całkiem dobrze: http://feeds.feedburner.com/bingimages
Zajrzyj na bing-desktop-wallpaper-changer na Github . Skrypt został napisany w języku Python i mam nadzieję, że znajdziesz tam odpowiedź.
#!/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)
Zajrzyj do projektu Github, aby uzyskać szczegółowy kod
W końcu zdecydowałem się napisać skrypt w Pythonie 3, aby uzyskać jak najwięcej obrazów (16) z archiwum xml.
Teraz mogę bez wysiłku archiwizować obrazy. Po prostu uruchom skrypt Pythona.
Porządkuję obrazy w folderach roku / miesiąca w następujący sposób: 2018> 12 grudnia> 2018-12-06.jpg
Ten skrypt znajduje się w moim folderze Tapety Bing. (który znajduje się w moim folderze Zdjęcia)
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)
Opcjonalny dodatkowy kod do aktualizacji tapety: (umieść pod 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
przykładowe dane wyjściowe:
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 Powyższy skrypt używa &mkt=en-NZ
do obrazów Nowej Zelandii.
Możesz sprawdzić kod rynku dla innych krajów tutaj .
Możesz również zobaczyć wszystkie obrazy archiwizowane od 2009 roku dla różnych krajów tutaj .
(choć tylko w 1366x768)
Major PS dodaje skrypt do Harmonogramu zadań, aby był uruchamiany podczas logowania. (lub codziennie / co tydzień)
Utwórz podstawowy
program zadań / skrypt: python (lub C: \ Python34 \ python.exe, jeśli nie ma go w ścieżce env)
argumenty: "ścieżka / do / twój / skrypt.py"
zacznij w: "ścieżka / do / twój"
AKTUALIZACJA! (Marzec 2019)
Obraz z 2019-03-10 otrzymał nieprawidłową datę początkową (20190309) zarówno w formacie xml, jak i rss.
Zamiast tego używam formatu Json. (ponieważ podaje dokładną datę)
https://peapix.com/bing/feed
wyświetli najnowszy obraz Bing bez logo Bing, utrzymywany przez peapix.com . Obsługiwany w następującym kraju / regionie: AU, CA, CN, DE, FR, JP, US, GB.
na przykład https://peapix.com/bing/feed?country=jp dla Japonii i https://peapix.com/bing/feed?country=us dla Stanów Zjednoczonych.
Bash one liner (wymaga bash, curl i jq), przydatne do wprowadzenia 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')"
Możesz rozważyć pobranie file_content z tego adresu URL i przeszukać plik w poszukiwaniu obrazu. Nie jestem pewien, czy to najlepszy sposób, ale tak jest.
Korzystając z adresu URL z @Siv, oto przykład aktualizowanego kodu JavaScript <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()
}
CSS dla tej klasy to:
.bgimg {
height: 100%;
position: relative;
opacity: 0.95;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Możesz to zrobić za pomocą Pythona i wget na komputerze z systemem 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
Pobiera codzienne tło bing w katalogu lokalnym pod nazwą daily_im.jpg. Możesz umieścić wszystko w pliku script.py i uruchomić go programowo.
EDYCJA 27.09.2018: http://www.istartedsomething.com/bingimages odpowiada 404 przez tygodnie. Może już nie istnieć. :-(
Możesz skorzystać z archiwum obrazów Bing istartedsomething.com . To nieoficjalne archiwum obrazów Bing. Używa domowego punktu końcowego, który jest pomocny przy pobieraniu obrazów:
GET /bingimages/getimage.php?id=<image_id>
id
to ciąg zawierający datę publikacji obrazu i kraj, w którym został opublikowany. id
musi być zgodny z następującym formatem:, YYYYMMDD-xx
gdzie:
YYYY
to rok zapisany czterema cyframi.MM
to miesiąc zapisany dwoma cyframi.DD
to dzień zapisany dwoma cyframi.xx
jest wskaźnikiem kraju. Archiwum obrazów Bing obsługuje obecnie następujące kraje:
au
: Australia.br
: Brazylia.ca
: Kanada.cn
: Chiny.de
: Deutschland.fr
: Francja.gb
: Wielka Brytania.jp
: Japonia.nz
: Nowa Zelandia.uk
: Zjednoczone Królestwo.us
: Stany Zjednoczone Ameryki.Zwraca przydatny obiekt JSON, jeśli zawiera jakieś informacje, lub fałsz, jeśli nie ma nic.
Przykład 1: Pobieranie codziennego obrazu Bing opublikowanego 24 maja 2014 roku w Nowej Zelandii
Identyfikator obrazu wynika z 20140524-nz
tego, że żądany obraz został opublikowany 24.05.2014 i został opublikowany w Nowej Zelandii, której wskaźnikiem kraju jest nz
.
http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz zwraca następujący fragment 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":[]
}
Możesz użyć imageurl
pola lub pola url
(ścieżka adresu URL Bing), aby pobrać obraz.
Przykład 2: Pobieranie codziennego obrazu Bing opublikowanego 12 lipca 1998 r. We Francji
Identyfikator obrazu wynika z 19980712-fr
tego, że żądane zdjęcie zostało opublikowane 07/12/1998 i zostało opublikowane we Francji, której wskaźnikiem kraju jest fr
.
http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr powraca, false
ponieważ nie ma Bing Daily Image dla Francji w dniu 12.07.1998 r. (Bing jeszcze nie istniał).
OP nie określa systemu operacyjnego, więc tutaj jest jeden do użytku w systemie Linux. Zmodyfikowałem z oferowanego tutaj skryptu .
Zasadniczo pobiera adres URL obrazu dnia, pobiera obraz i zapisuje w stałym pliku ~/.config/wallpaper.jpg
, a następnie używa feh
do ustawienia tapety. Jednocześnie wysyła powiadomienie.
#!/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