C'è un modo per ottenere la foto del giorno di Bing?


89

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:


111

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' mktattributo 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.jpgsuffisso che viene aggiunto ai nomi delle immagini sembra essere modificabile in diverse risoluzioni (come _1920x1080.jpgper 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&amp;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&amp;cp=2.794725~37.335197&amp;lvl=7&amp;dir=0&amp;sty=b&amp;q=Lake%20Turkana%2C%20Kenya&amp;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&amp;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&amp;FORM=hphot3#view=detail&amp;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&amp;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>

11
Cordiali saluti, puoi ottenerlo anche in formato JSON! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

1
BTW: La risoluzione è modificabile, qualsiasi cosa _1920x1200funzioni, cioè anche 1920x1080e altre.
jmiserez

1
Ok, quindi sembra che Bing Desktop utilizzi bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 , cioè senza &mkt=en-USparti. Anche se l'app è impostata su "Inglese-Stati Uniti".
jmiserez

1
@darksoulsong Sure. Potresti creare un servizio web che trasmetta i dati per te. Normalmente, si userebbe jsonp, ma non sembra che lo permettano.
Mathias Lykkegaard Lorenzen

1
Se qualcuno cerca posti di mercato ... puoi estrarlo da microsoft.com/en-in/locale.aspx
Amar Palsapure

30

FORMATO JSON di BING IMAGE

Ho trovato un modo per andare a prendere il formato JSON del Bing Immagine del giorno

http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

Nota

      n=Il numero di immagini che desideri (puoi usare numeri interi ), La
      mkt=tua posizione (esempio: en-US )


Ecco l'aspetto dell'output JSON

  {
  "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 urldaimages[]

e aggiungilo a 'http://bing.com'

qui l'url è "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"


Sembra che Bing limiti il ​​numero totale di risposte a 8 alla volta. 8 può essere raccolto con n = 8 e gli 8 precedenti possono essere raccolti impostando idx = 8 en = 8. Non vedo un modo per espandere questo.
The Fluffy Robot

Perché sta dando errore Unexpected token :inhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Rohit Sharma

10

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.


+1 per il link al rss, penso che sia la risposta effettiva alla domanda
David Conde

3
Purtroppo il tema è stato interrotto, o come dice Microsoft: "Questo tema è stato ritirato". L'RSS è ancora presente, ma non viene più aggiornato.
karafior


6

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

2
Brillante! Ha funzionato perfettamente per me :)
LiamHarries

4

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();
            }
        }        
    }
}


2

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%";
        }
    }
}

5
Volevo davvero usarlo, ma non sembra aggirare la mancanza di "Access-Control-Allow-Origin" impostato da Bing.
addMitt

2

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);
        }
    }
}

2

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)"

Funziona ancora meglio come attività pianificata in Windows per scaricare automaticamente l'immagine Bing del giorno in una directory di destinazione. Eccellente.
nonbeing

2

Ecco un semplice script Python per recuperare la foto Bing del giorno usando solo requestse 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.jpgnella stessa directory in cui viene eseguito lo script. Certo, può modificare un sacco di cose qui, ma ottiene il lavoro ragionevolmente facilmente.


2

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.come 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.comsolo 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 )



1

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


1
Ottimo lavoro! Questo è stato anche spiegato in un articolo di omgubuntu
Wtower

@Wtower Grazie mille per avermelo fatto sapere! :)
Utkarsh Gupta

1

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-NZper 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)



1

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')"

0

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.


0

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;
}

Questo non funziona per me a causa della stessa politica di origine del browser ...
John

0

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.


0

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. iddeve essere conforme al seguente formato:, YYYYMMDD-xxdove:

  • 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-nzperché 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 imageurlcampo 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-frperché 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 falseperché non esiste un'immagine Bing Daily per la Francia il 07/12/1998 (Bing non esisteva nemmeno in questo momento).


Collegamenti morti, e non ho trovato nulla di simile per aggiornare la risposta.
subdeveloper

0

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.jpge utilizza fehper 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.