Чи є спосіб отримати програмне забезпечення фонового зображення Bing?
API Bing, схоже, не надає такої функціональності, можливо, є інший спосіб?
Чи є спосіб отримати програмне забезпечення фонового зображення Bing?
API Bing, схоже, не надає такої функціональності, можливо, є інший спосіб?
Відповіді:
Я думаю, що найкращий спосіб імітувати те, як вони це роблять самі, через свої дзвінки AJAX.
Вони викликають цю URL-адресу та витягують інформацію за допомогою десериалізації 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
атрибут можна змінити на інший регіон, ніж «США», але його також можна повністю відмовити, якщо ви не дбаєте про певний регіон.
Зверніть увагу, що _1366x768.jpg
суфікс, який додається до назв зображень, може змінюватися в різних роздільних здатностях (наприклад, _1920x1080.jpg
для повного HD та, можливо, інших).
Ось дамп даних станом на 28.09.2013 р. У форматі 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
працює, тобто також 1920x1080
та інші.
&mkt=en-US
частини. Це навіть незважаючи на те, що у мене для програми встановлено значення "English-United States".
jsonp
, але, здається, вони не дозволяють цього.
Я знайшов спосіб , щоб принести формат JSON в Bing Image дня
n=
Кількість зображень, які ви хочете (ви можете використовувати цілі числа ),
mkt=
ваше місцезнаходження (приклад: 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."
}
}
використовувати url
зimages[]
і додати його до 'http://bing.com'
ось URL-адреса "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 нещодавно опублікувала динамічну тему Bing для Windows 7, яка містить RSS-канал із посиланнями на шпалери Bing .
Існує також сценарій Python, який намагається завантажити веб-сайт Bing і вгадати правильну URL-адресу зображення, але, з мого досвіду, це зазвичай призводить до зображення з меншою роздільною здатністю, ніж те, що пропонується RSS-каналом.
Я запізнююсь на вечірку, але на випадок, якщо комусь потрібна реалізація PHP: я написав простий клас, який обробляє процедуру:
Один вкладиш PowerShell (3.0 або вище)
irm
є псевдонімом для Invoke-RestMethod
irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg
Мені теж подобаються зображення Bing, але їх додаток занадто роздутий для завантаження зображень. Проаналізувавши зв’язок із скрипком, я написав цей код. 1920x1200 поставляється із вбудованим логотипом Bing, але в нижчих роздільних здатностях його немає.
Ви можете дозволити вікнам показувати випадкові зображення із встановленої вами папки із зображеннями, тому, завантажуючи їх щодня, вони відображатимуть більше випадкових зображень. Якщо ви все-таки зберігаєте "imageDir", вам потрібно змінити дозволи на цю папку, інакше він вийде з ладу, я не турбувався з виявленням помилок. Нарешті, скасуйте коментарі до рядків, якщо ви хочете встановити шпалери на сьогоднішній образ або ви можете створити завдання для запуску програми, скажімо через хвилину після входу.
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();
}
}
}
}
Я побачив, що багато людей також просять про нове посилання RSS, просто змініть параметр формату в URL на "rss".
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US
Цей JavaScript відповість на питання "що робити з API", змінивши фонове зображення div на фон bing-зображення поточного дня.
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%";
}
}
}
Якщо хтось шукає можливі реалізації, я написав невелику програму командного рядка на C # для завантаження, збереження та встановлення мого тла як Bing Image of the Day. Не соромтеся змінювати його відповідно до своїх особистих потреб. 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);
}
}
}
Проста PowerShell, помістіть у папку, створіть щоденне завдання в Планувальнику завдань Windows, скрипт зберігає зображення у своїй папці запуску, а потім у налаштуваннях фона робочого столу виберіть цю папку як фон.
[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)"
Ось простий скрипт Python, щоб отримати фотографію дня Bing, використовуючи just requests
і 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))
Це запише такий файл, як TurtleTears_EN-US7942276596_1920x1080.jpg
той самий каталог, де виконується сценарій. Звичайно, тут можна налаштувати цілу купу речей, але виконувати роботу досить легко.
Дозвольте мені розповісти вам, як отримати щоденні шпалери bing за день за допомогою javascript та php,
Спробуйте цей 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>
Цей сценарій встановлює щоденне зображення дня bing як фон вашого HTML-документа (ви можете додатково змінити його відповідно до вашого використання).
Це посилання - https://techytricks97.000webhostapp.com повертає щоденні шпалери bing дня.
fetch()
отримує URL-адресу сьогоднішнього зображення bing https://techytricks97.000webhostapp.com
та text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}
встановлює його як фон.
Примітка. Корпорація Майкрософт не дозволяє використовувати зображення bing daily як тло вашого веб-сайту, ви можете використовувати його як шпалери телефону / робочого столу чи інші речі із зазначенням авторських прав.
Ось php-код, який використовується на 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);
?>
Ви можете використовувати http://techytricks97.000webhostapp.com
лише або можете встановити власний php-файл на своєму сервері.
Ще одне зауваження: я не використовував лише javascript, оскільки політика браузера з тим самим джерелом обмежує його, але отримання з мого php-файлу дозволено, як я вже сказавheader('Access-Control-Allow-Origin: *');
у своєму php-коді. Я міг використати інші проксі-сервери, але вони мають великий трафік (мій сайт навряд чи отримує будь-який клік за день).
Якщо ви використовуєте будь-яку іншу мову, вам просто потрібно прочитати цей файл ( http://techytricks97.000webhostapp.com )
У мене були проблеми з отриманням належного RSS-каналу, який я міг би використовувати з John's Background Switcher, поки не знайшов цей канал feedburner, який, здається, працює досить добре: http://feeds.feedburner.com/bingimages
Погляньте на bing-desktop-wallpaper-changer на Github . Сценарій написаний на python, і я сподіваюся, ви знайдете там свою відповідь.
#!/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)
Подивіться на проект Github для отримання детального коду
Я нарешті вирішив написати сценарій на Python 3, щоб отримати найбільшу кількість зображень (16) з архіву xml.
Тож тепер я без жодних зусиль можу архівувати зображення. Просто запустіть скрипт Python.
Я впорядковую зображення в папки Рік / Місяць так: 2018> 12 грудня> 2018-12-06.jpg
Цей сценарій міститься в моїй папці Bing Wallpapers. (що знаходиться в моїй папці "Картинки")
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)
Необов’язковий додатковий код для оновлення шпалери: (помістіть під 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
приклад виводу:
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, наведений вище сценарій використовується &mkt=en-NZ
для зображень Нової Зеландії.
Ви можете перевірити ринковий код інших країн тут .
Ви також можете переглянути всі зображення, заархівовані з 2009 року для різних країн, тут .
(правда, лише в 1366x768)
Major PS додає сценарій до Планувальника завдань для запуску під час входу. (або щодня / щотижня)
Створіть програму основного завдання
/ сценарій: python (або C: \ Python34 \ python.exe, якщо його немає у вашому шляху env)
аргументи: "path / to / your / script.py"
start in: "path / to / your"
ОНОВЛЕННЯ! (Березень 2019)
Зображення для 2019-03-10 отримало неправильну дату початку (20190309) як у форматі xml, так і у форматі rss.
Замість цього використовуйте формат Json. (оскільки вказує точну дату)
https://peapix.com/bing/feed
буде перераховано останнє зображення Bing без логотипу Bing, що підтримується peapix.com . Підтримуються такі країни / регіони: AU, CA, CN, DE, FR, JP, US, GB.
наприклад, https://peapix.com/bing/feed?country=jp для Японії та https://peapix.com/bing/feed?country=us для США.
Баш один лайнер (потрібен bash, curl і jq), корисний для введення в 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')"
Ви можете розглянути можливість отримання файлу_контенту цієї URL-адреси та шукати у файлі зображення. Не впевнений, що це найкращий спосіб, але це спосіб.
Використовуючи URL-адресу з @Siv, ось приклад 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 для цього класу:
.bgimg {
height: 100%;
position: relative;
opacity: 0.95;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Ви можете зробити це, використовуючи python і wget на машині 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
Він завантажує щоденний фон bing в локальний каталог під назвою daily_im.jpg. Ви можете розмістити все на script.py і запустити програмно.
EDIT 27.09.2018: http://www.istartedsomething.com/bingimages відповідає 404 за тижні. Можливо, його вже не існує. :-(
Ви можете скористатися архівом зображень Bing istartedsomething.com . Це неофіційний архів зображень Bing. Він використовує саморобну кінцеву точку, яка корисна для отримання зображень:
GET /bingimages/getimage.php?id=<image_id>
id
це рядок, що містить дату опублікування зображення та країну, де воно було опубліковане. id
має відповідати наступному формату: YYYYMMDD-xx
де:
YYYY
- рік, записаний чотирма цифрами.MM
- місяць, записаний двома цифрами.DD
це день, записаний двома цифрами.xx
- показник країни. Наразі Bing Image Archive підтримує такі країни:
au
: Австралія.br
: Бразилія.ca
: Канада.cn
: Китай.de
: Deutschland.fr
: Франція.gb
: Велика Британія.jp
: Японія.nz
: Нова Зеландія.uk
: Об'єднане Королівство.us
: Сполучені Штати Америки.Він повертає корисний об'єкт JSON, якщо він має якусь інформацію, або помилковий, якщо він нічого не має.
Приклад 1: Отримання щоденного зображення Bing, яке було опубліковано 24 травня 2014 року в Новій Зеландії
Ідентифікатор зображення пов’язаний з 20140524-nz
тим, що потрібне зображення було опубліковано 24.05.2014 та опубліковано в Новій Зеландії, показник країни якої nz
.
http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz повертає таку частину 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":[]
}
Ви можете використовувати imageurl
поле або поле url
(Bing URL path) для отримання зображення.
Приклад 2: Отримання щоденного зображення Bing, яке було опубліковане 12 липня 1998 р. У Франції
Ідентифікатор зображення пов’язаний з 19980712-fr
тим, що потрібне зображення було опубліковано 12.07.1998 р. Та опубліковане у Франції, показник країни якоїfr
.
http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr повертається, false
оскільки для Франції 07/12/1998 немає щоденного зображення Bing (Bing на той момент навіть не існував).
OP не вказує операційну систему, тому тут є одна для використання в Linux. Я модифікував сценарій, запропонований тут .
В основному він отримує URL-адресу зображення дня, завантажує зображення та зберігає у фіксованому файлі ~/.config/wallpaper.jpg
та використовує feh
для встановлення шпалер. Одночасно надсилає повідомлення.
#!/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