Gibt es eine Möglichkeit, Bings Foto des Tages zu bekommen?


89

Gibt es eine Möglichkeit, das Bing-Hintergrundbild programmgesteuert abzurufen?

Die API von Bing scheint keine solche Funktionalität zu bieten, vielleicht gibt es einen anderen Weg?

Antworten:


110

Ich denke, der beste Weg ist, die Art und Weise nachzuahmen, wie sie es selbst durch ihre AJAX-Anrufe tun.

Sie rufen diese URL auf und extrahieren die Informationen durch XML-Deserialisierung.

XML: http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=de-DE

JSON: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-US

RSS: http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=de-US

Das mktAttribut kann natürlich in eine andere Region als "en-US" geändert werden, kann aber auch vollständig deaktiviert werden, wenn Sie sich nicht für eine bestimmte Region interessieren.

Beachten Sie, dass das _1366x768.jpgSuffix, das den Bildnamen hinzugefügt wird, in verschiedene Auflösungen geändert werden kann (wie _1920x1080.jpgbei Full HD und möglicherweise anderen).

Hier ist ein Speicherauszug der Daten vom 28.09.2013 im XML-Format.

<?xml version="1.0" encoding="utf-8"?>
<images>
    <image>
        <startdate>20130928</startdate>
        <fullstartdate>201309280000</fullstartdate>
        <enddate>20130929</enddate>
        <url>/az/hprichbg/rb/LakeTurkana_EN-US15976511099_1366x768.jpg</url>
        <urlBase>/az/hprichbg/rb/LakeTurkana_EN-US15976511099</urlBase>
        <copyright>Lava rock pools at the southern end of Lake Turkana, in Kenya (© Nigel Pavitt/Corbis)</copyright>
        <copyrightlink>http://www.bing.com/search?q=Lake+Turkana%2C+Kenya&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
Zu Ihrer Information - Sie können es auch im JSON-Format erhalten! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

1
Übrigens: Die Auflösung ist veränderbar, alles _1920x1200funktioniert, dh auch 1920x1080und andere.
Jmiserez

1
Okay, es scheint, dass Bing Desktop bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 verwendet , dh ohne &mkt=en-USTeil. Dies ist, obwohl ich die App auf "Englisch-USA" eingestellt habe.
Jmiserez

1
@ Darksoulsong Sicher. Sie können einen Webdienst erstellen, der die Daten für Sie überträgt. Normalerweise würde man verwenden jsonp, aber es scheint nicht so, als ob sie das zulassen.
Mathias Lykkegaard Lorenzen

1
Wenn jemand nach Marktplätzen sucht ... können Sie es von microsoft.com/en-in/locale.aspx
Amar Palsapure

30

JSON-FORMAT von BING IMAGE

Ich habe einen Weg gefunden, das JSON-Format des Bing Image des Tages abzurufen

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

Hinweis

      n=Die Anzahl der gewünschten Bilder (Sie können Ganzzahlen verwenden ),
      mkt=Ihr Standort (Beispiel: en-US )


Hier sieht die JSON-Ausgabe so aus

  {
  "images": [
    {
      "startdate": "20141214",
      "fullstartdate": "201412141830",
      "enddate": "20141215",
      "url": "\/az\/hprichbg\/rb\/BlackButte_EN-IN7038391888_1920x1080.jpg",
      "urlbase": "\/az\/hprichbg\/rb\/BlackButte_EN-IN7038391888",
      "copyright": "Black Butte, seen from the Mount Jefferson Wilderness, Oregon, USA (\u00a9 Marc Adamus\/Aurora Photos)",
      "copyrightlink": "http:\/\/www.bing.com\/search?q=Black+Butte&qs=n&form=hpcapt&mkt=en-in&pq=black+butte&sc=8-11&sp=-1&sk=&cvid=228ac7f125f94bbaafd4a4abd4f9a32d",
      "wp": true,
      "hsh": "94156ae1e2e1be49f9b739d2b7bff65c",
      "drk": 1,
      "top": 1,
      "bot": 1,
      "hs": [

      ],
      "msg": [
        {
          "title": "How does it feel\u2026",
          "link": "http:\/\/www.bing.com\/videos\/search?q=Climbing+Black+Butte&FORM=pgbar1&mkt=en-in#view=detail&mid=58BDB2F2B9FCB85D597558BDB2F2B9FCB85D5975",
          "text": "To climb 1961.7 m?"
        },
        {
          "title": "On top of the world",
          "link": "http:\/\/www.bing.com\/images\/search?q=Pictures+From+the+Top+of+Mount+Everest&FORM=pgbar2&mkt=en-in",
          "text": "It's mountaineer's dream view"
        }
      ]
    }
  ],
  "tooltips": {
    "loading": "Loading...",
    "previous": "Previous",
    "next": "Next",
    "walle": "This image is not available to download as wallpaper.",
    "walls": "Download this image. Use of this image is restricted to wallpaper only."
  }
}

benutze das urlaus demimages[]

und füge es hinzu 'http://bing.com'

hier ist url "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"


Es sieht so aus, als würde Bing die Gesamtzahl der Antworten auf jeweils 8 beschränken. 8 kann mit n = 8 gesammelt werden, und die 8 vorhergehenden können durch Setzen von idx = 8 und n = 8 gesammelt werden. Ich sehe keinen Weg, dies zu erweitern.
Der flauschige Roboter

Warum es Fehler gibt 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 hat kürzlich ein Bing Dynamic Theme für Windows 7 veröffentlicht, das einen RSS-Feed mit Links zu Bing-Hintergrundbildern enthält .

Es gibt auch ein Python-Skript, das versucht, die Bing-Website zu laden und die richtige Bild-URL zu erraten, aber meiner Erfahrung nach führt es normalerweise zu einem Bild mit niedrigerer Auflösung als das vom RSS-Feed angebotene.


+1 für den Link zum RSS, ich denke, das ist die eigentliche Antwort auf die Frage
David Conde

3
Leider wurde das Thema eingestellt oder, wie Microsoft es ausdrückt: "Dieses Thema wurde eingestellt". Das RSS ist immer noch da, wird aber nicht mehr aktualisiert.
Karafior


6

Einzeiler PowerShell (3.0 oder höher)

irm ist ein Alias ​​für Invoke-RestMethod

irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg

2
Brillant! Hat perfekt für mich
funktioniert

4

Ich mag auch Bing-Bilder, aber ihre App ist zu aufgebläht, um Bilder herunterzuladen. Nachdem ich die Verbindung mit Fiddler analysiert hatte, schrieb ich diesen Code. Das 1920x1200 ist mit einem eingebetteten Bing-Logo ausgestattet, bei niedrigeren Auflösungen ist es jedoch nicht vorhanden.

In Windows werden Ihnen zufällige Bilder aus dem von Ihnen festgelegten Bildordner angezeigt. Wenn Sie sie also täglich herunterladen, werden Ihnen mehr zufällige Bilder angezeigt. Wenn Sie das "imageDir" behalten, müssen Sie die Berechtigungen für diesen Ordner ändern, da es sonst abstürzt. Ich habe mich nicht darum gekümmert, Fehler abzufangen. Deaktivieren Sie zum Schluss die Kommentare, wenn Sie Ihr Hintergrundbild auf das heutige Bild einstellen möchten, oder erstellen Sie eine Aufgabe zum Ausführen des Programms, z. B. eine Minute nach der Anmeldung.

using System;
using System.IO;
using System.Net;
//using System.Runtime.InteropServices;

namespace Bing
{
    class Program
    {
      //  [DllImport("user32.dll", CharSet = CharSet.Auto)]
      //  private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);
        private static String imgDir = @"C:\Windows\Web\Wallpaper\Bing\";

        static void Main(string[] args)
        {
            String imageFileName;
            if (!Directory.Exists(imgDir))
                Directory.CreateDirectory(imgDir);

            for (byte i = 6; i >= 0; i--)
            {
                imageFileName = imgDir + DateTime.Today.AddDays(-i).ToString("yyy-MM-dd") + ".jpg";

                if (!File.Exists(imageFileName))
                {
                    string response = null;
                    Connect(ref response, i);
                    ProcessXml(ref response);
                    using (WebClient client = new WebClient())
                        client.DownloadFile("http://www.bing.com" + response + "_1920x1200.jpg", imageFileName);
                }                
            }
            //SystemParametersInfo(20, 0, imageFileName, 0x01 | 0x02);
        }

        private static void Connect(ref string res, byte i)
        {
            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://www.bing.com/hpimagearchive.aspx?format=xml&idx=" + i + "&n=1&mbl=1&mkt=en-ww");
            webrequest.KeepAlive = false;
            webrequest.Method = "GET";
            using (HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse())
                using (StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream()))
                    res = loResponseStream.ReadToEnd();                
        }

        private static void ProcessXml(ref string xmlString)
        {
            using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new StringReader(xmlString)))
            {
                reader.ReadToFollowing("urlBase");
                xmlString = reader.ReadElementContentAsString();
            }
        }        
    }
}


2

Dieses JavaScript beantwortet die Frage, was mit der API zu tun ist, indem das Hintergrundbild eines Div in den Hintergrund des Bing-Bilds des aktuellen Tages geändert wird.

function PullBackground() {
    var ajaxRequest = new XMLHttpRequest(), background = ''; 
    ajaxRequest.open('POST', "http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US", true);
    ajaxRequest.setRequestHeader("Connection", "close");
    ajaxRequest.send('');
    ajaxRequest.onreadystatechange = function () {
        if (ajaxRequest.readyState == 4) {
            background = ajaxRequest.responseText;
            var res = background.split("<url>"); 
            var res1 = res[1].split("</url>");
            background = res1[0];

            document.getElementById('NameOfTheDivToChange').style.backgroundImage = "url('http://bing.com" + background + "')"
            document.getElementById('NameOfTheDivToChange').style.backgroundSize = "100%";
        }
    }
}

5
Ich wollte das wirklich nutzen, aber es scheint nicht um das Fehlen von 'Access-Control-Allow-Origin' herumzukommen, das von Bing festgelegt wurde.
AddMitt

2

Für den Fall, dass jemand nach möglichen Implementierungen sucht, habe ich ein kleines Befehlszeilenprogramm in C # geschrieben, um meinen Hintergrund als Bing-Image des Tages herunterzuladen, zu speichern und festzulegen. Fühlen Sie sich frei, es an Ihre persönlichen Bedürfnisse anzupassen. https://github.com/josueespinosa/BingBackground

using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace BingBackground
{
    class BingBackground
    {
        private static void Main(string[] args)
        {
            string urlBase = GetBackgroundUrlBase();
            Image background = DownloadBackground(urlBase + GetResolutionExtension(urlBase));
            SaveBackground(background);
            SetBackground(background, PicturePosition.Fill);
        }

        private static dynamic DownloadJson()
        {
            using (WebClient webClient = new WebClient())
            {
                Console.WriteLine("Downloading JSON...");
                string jsonString = webClient.DownloadString("https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US");
                return JsonConvert.DeserializeObject<dynamic>(jsonString);
            }
        }

        private static string GetBackgroundUrlBase()
        {
            dynamic jsonObject = DownloadJson();
            return "https://www.bing.com" + jsonObject.images[0].urlbase;
        }

        private static string GetBackgroundTitle()
        {
            dynamic jsonObject = DownloadJson();
            string copyrightText = jsonObject.images[0].copyright;
            return copyrightText.Substring(0, copyrightText.IndexOf(" ("));
        }

        private static bool WebsiteExists(string url)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Method = "HEAD";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                return response.StatusCode == HttpStatusCode.OK;
            }
            catch
            {
                return false;
            }
        }

        private static string GetResolutionExtension(string url)
        {
            Rectangle resolution = Screen.PrimaryScreen.Bounds;
            string widthByHeight = resolution.Width + "x" + resolution.Height;
            string potentialExtension = "_" + widthByHeight + ".jpg";
            if (WebsiteExists(url + potentialExtension))
            {
                Console.WriteLine("Background for " + widthByHeight + " found.");
                return potentialExtension;
            }
            else
            {
                Console.WriteLine("No background for " + widthByHeight + " was found.");
                Console.WriteLine("Using 1920x1080 instead.");
                return "_1920x1080.jpg";
            }
        }

        private static Image DownloadBackground(string url)
        {
            Console.WriteLine("Downloading background...");
            WebRequest request = WebRequest.Create(url);
            WebResponse reponse = request.GetResponse();
            Stream stream = reponse.GetResponseStream();
            return Image.FromStream(stream);
        }

        private static string GetBackgroundImagePath()
        {
            string directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Bing Backgrounds", DateTime.Now.Year.ToString());
            Directory.CreateDirectory(directory);
            return Path.Combine(directory, DateTime.Now.ToString("M-d-yyyy") + ".bmp");
        }

        private static void SaveBackground(Image background)
        {
            Console.WriteLine("Saving background...");
            background.Save(GetBackgroundImagePath(), System.Drawing.Imaging.ImageFormat.Bmp);
        }

        private enum PicturePosition
        {
            Tile,
            Center,
            Stretch,
            Fit,
            Fill
        }

        internal sealed class NativeMethods
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            internal static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
        }

        private static void SetBackground(Image background, PicturePosition style)
        {
            Console.WriteLine("Setting background...");
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(Path.Combine("Control Panel", "Desktop"), true))
            {
                switch (style)
                {
                    case PicturePosition.Tile:
                        key.SetValue("PicturePosition", "0");
                        key.SetValue("TileWallpaper", "1");
                        break;
                    case PicturePosition.Center:
                        key.SetValue("PicturePosition", "0");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Stretch:
                        key.SetValue("PicturePosition", "2");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Fit:
                        key.SetValue("PicturePosition", "6");
                        key.SetValue("TileWallpaper", "0");
                        break;
                    case PicturePosition.Fill:
                        key.SetValue("PicturePosition", "10");
                        key.SetValue("TileWallpaper", "0");
                        break;
                }
            }
            const int SetDesktopBackground = 20;
            const int UpdateIniFile = 1;
            const int SendWindowsIniChange = 2;
            NativeMethods.SystemParametersInfo(SetDesktopBackground, 0, GetBackgroundImagePath(), UpdateIniFile | SendWindowsIniChange);
        }
    }
}

2

Einfache PowerShell, in einen Ordner legen, eine tägliche Aufgabe in Windows Task Scheduler erstellen, das Skript Bilder in seinem Ausführungsordner speichern und dann in Ihren Desktop-Hintergrundeinstellungen diesen Ordner als Hintergrund auswählen.

[xml]$doc = (New-Object System.Net.WebClient).DownloadString("https://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=ru-RU")
$url = $doc.images.image.url
$url = "https://www.bing.com/" + $url -replace "_1366x768","_1920x1200"

Write-Output $url

$fileName = Split-Path $url -leaf
$output = "$PSScriptRoot\$fileName"

$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Saved to: $output Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"

Funktioniert noch besser als geplante Aufgabe in Windows, um das Bing-Image des Tages automatisch in ein Zielverzeichnis herunterzuladen. Ausgezeichnet.
Nichtsein

2

Hier ist ein einfaches Python-Skript zum Abrufen des Bing-Fotos des Tages mit just requestsund json:

import requests
import json

BING_URI_BASE = "http://www.bing.com"
BING_WALLPAPER_PATH = "/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"

# open the Bing HPImageArchive URI and ask for a JSON response
resp = requests.get(BING_URI_BASE + BING_WALLPAPER_PATH)

if resp.status_code == 200:
    json_response = json.loads(resp.content)
    wallpaper_path = json_response['images'][0]['url']
    filename = wallpaper_path.split('/')[-1]
    wallpaper_uri = BING_URI_BASE + wallpaper_path

    # open the actual wallpaper uri, and write the response as an image on the filesystem
    response = requests.get(wallpaper_uri)
    if resp.status_code == 200:
        with open(filename, 'wb') as f:
            f.write(response.content)
    else:
        raise ValueError("[ERROR] non-200 response from Bing server for '{}'".format(wallpaper_uri))
else: 
    raise ValueError("[ERROR] non-200 response from Bing server for '{}'".format(BING_URI_BASE + BING_WALLPAPER_PATH))

Dadurch wird eine Datei wie TurtleTears_EN-US7942276596_1920x1080.jpgin dasselbe Verzeichnis geschrieben, in dem das Skript ausgeführt wird. Natürlich kann man hier eine ganze Reihe von Dingen optimieren, aber die Arbeit ist ziemlich einfach zu erledigen.


2

Lassen Sie mich Ihnen sagen, wie Sie mit Javascript und PHP das tägliche Hintergrundbild des Tages erhalten.

Versuchen Sie diesen js-Code:

<script>
      fetch('https://techytricks97.000webhostapp.com/')
      .then(response => response.text())
      .then(text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';});
</script>

Dieses Skript legt das tägliche Bild des Tages als Hintergrund für Ihr HTML-Dokument fest (Sie können es je nach Verwendung weiter ändern).

Dieser Link - https://techytricks97.000webhostapp.com - gibt jeden Tag das Bing-Hintergrundbild des Tages zurück.

fetch()Ruft die URL des heutigen Bing-Bildes ab https://techytricks97.000webhostapp.comund text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}legt sie als Hintergrund fest.

Hinweis: Microsoft erlaubt nicht, die Bilder von Bing Daily als Hintergrund für Ihre Website zu verwenden. Sie können sie als Hintergrundbild für Telefone / Desktops oder für andere Zwecke verwenden, bei denen das Urheberrecht erwähnt wird.

Hier ist der PHP-Code, der auf http://techytricks97.000webhostapp.com verwendet wird :

<?php
header('Access-Control-Allow-Origin: *');
ini_set('display_errors', 1);
$reg=file_get_contents('https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-IN');
$reg=json_decode($reg);
$meka=$reg->images[0]->url;
echo('http://www.bing.com'.$meka);
?>

Sie können http://techytricks97.000webhostapp.comnur Ihre eigene PHP-Datei auf Ihrem Server verwenden oder einrichten.

Noch ein Hinweis: Ich habe nicht nur Javascript verwendet, da die Richtlinie für den gleichen Ursprung des Browsers dies einschränkt, aber das Abrufen aus meiner PHP-Datei ist zulässig, wie ich angegeben habeheader('Access-Control-Allow-Origin: *'); meinen PHP-Code eingegeben habe. Ich hätte andere Proxys verwenden können, aber sie haben viel Verkehr (meine Website bekommt an einem Tag kaum einen Klick).

Wenn Sie eine andere Sprache verwenden, müssen Sie nur diese Datei lesen ( http://techytricks97.000webhostapp.com ).



1

Schauen Sie sich bing-desktop-wallpaper-changer auf Github an . Das Skript wurde in Python geschrieben und ich hoffe, Sie finden dort Ihre Antwort.

#!/usr/bin/python
#-*- coding: utf-8 -*-

import os
import urllib
import urllib2
from bs4 import BeautifulSoup

# Get BingXML file which contains the URL of the Bing Photo of the day
# idx = Number days previous the present day. 0 means current day, 1 means       yesterday, etc
# n = Number of images predious the day given by idx
# mkt denotes your location. e.g. en-US means United States. Put in your  country code
BingXML_URL = "http://www.bing.com/HPImageArchive.aspx?     format=xml&idx=0&n=1&mkt=en-US"
page = urllib2.urlopen(BingXML_URL)
BingXML = BeautifulSoup(page, "lxml")

# For extracting complete URL of the image
Images = BingXML.find_all('image')
ImageURL = "https://www.bing.com" + Images[0].url.text
ImageName = Images[0].startdate.text+".jpg"

urllib.urlretrieve(ImageURL, ImageName)

Schauen Sie sich das Github-Projekt an, um detaillierten Code zu erhalten


1
Gut gemacht! Dies wurde auch in einem Omgubuntu-Artikel beschrieben: omgubuntu.co.uk/2016/08/set-bing-wallpaper-linux-automatically
Wtower

@Wtower Vielen Dank, dass Sie mich informiert haben! :)
Utkarsh Gupta

1

Ich habe mich gerade entschlossen, ein Skript in Python 3 zu schreiben, um die meisten Bilder (16) aus dem XML-Archiv zu erhalten.

Jetzt kann ich die Bilder mühelos archivieren. Führen Sie einfach das Python-Skript aus.
Ich organisiere die Bilder in Jahr / Monat-Ordnern wie folgt: 2018> 12. Dezember> 2018-12-06.jpg

Dieses Skript befindet sich in meinem Ordner Bing Wallpapers. (das ist in meinem Bilderordner)

import urllib.request as urllib
import json
from datetime import date
from dateutil import parser
import sys,os

months = "January","Febuary","March","April","May","June","July","August","September","October","November","December"

def downloadBingImages(start):
    try: data = urllib.urlopen("https://www.bing.com/hpimagearchive.aspx?format=js&idx=%i&n=8&mkt=en-NZ"%start).read()
    except: sys.exit()
    e = json.loads(data.decode())
    images = e["images"]

    for image in images:
        d = parser.parse(image["startdate"]) # parse("20181206")

        filename = str(d.date())+".jpg"                         #                  2018-12-06.jpg
        folder = "%i/%i %s/"%(d.year,d.month,months[d.month-1]) # 2018/12 December/
        file = folder+filename                                  # 2018/12 December/2018-12-06.jpg

        if not os.path.exists(folder): os.makedirs(folder)
        exists = os.path.isfile(file)

        url = "https://www.bing.com"+image["urlbase"]+"_1920x1200.jpg"
        print(("downloading","exists")[exists],filename,url)
        if not exists:
            try: urllib.urlretrieve(url,file)
            except: sys.exit()

    print()

# downloads the 16 latest bing images
downloadBingImages(-1)
downloadBingImages(7)

Optionaler zusätzlicher Code zum Aktualisieren des Hintergrundbilds: (unter downloadBingImages (7))

import ctypes,win32con

def getWallpaper():
    ubuf = ctypes.create_unicode_buffer(512)
    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_GETDESKWALLPAPER,len(ubuf),ubuf,0)
    return ubuf.value

def setWallpaper(path):
    changed = win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE
    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_SETDESKWALLPAPER,0,path,changed)

# update wallpaper after a week from current
wallpaper = getWallpaper()
if wallpaper.startswith(os.getcwd()): # has to be in script directory
    try: wallpaperDate = parser.parse(os.path.splitext(os.path.basename(wallpaper))[0])
    except: sys.exit() # not using an image with a parsable date

    t = date.today()
    if (t-wallpaperDate.date()).days>=7: # been a week or longer
        setWallpaper(os.path.abspath("%i/%i %s/"%(t.year,t.month,months[t.month-1])+str(t)+".jpg")) # .../2018/12 December/2018-12-14.jpg

Beispielausgabe:

exists 2018-12-15.jpg https://www.bing.com/az/hprichbg/rb/YosemiteBridge_ROW11493343707_1920x1200.jpg
exists 2018-12-14.jpg https://www.bing.com/az/hprichbg/rb/CardinalBerries_ROW13321753978_1920x1200.jpg
exists 2018-12-13.jpg https://www.bing.com/az/hprichbg/rb/ReykjavikYuleLads_ROW12406174277_1920x1200.jpg
exists 2018-12-12.jpg https://www.bing.com/az/hprichbg/rb/PoinsettiaBuds_ROW14015106672_1920x1200.jpg
exists 2018-12-11.jpg https://www.bing.com/az/hprichbg/rb/KilimanjaroMawenzi_ROW12001033920_1920x1200.jpg
exists 2018-12-10.jpg https://www.bing.com/az/hprichbg/rb/ChristmasIslandCrab_ROW12174154872_1920x1200.jpg
exists 2018-12-09.jpg https://www.bing.com/az/hprichbg/rb/JohnDaySnow_ROW10922424229_1920x1200.jpg
exists 2018-12-08.jpg https://www.bing.com/az/hprichbg/rb/BanffEvergreens_ROW13248925556_1920x1200.jpg

exists 2018-12-07.jpg https://www.bing.com/az/hprichbg/rb/TaisetsuShirakawago_ROW12053480529_1920x1200.jpg
exists 2018-12-06.jpg https://www.bing.com/az/hprichbg/rb/Huuhkajat_ROW11700922065_1920x1200.jpg
exists 2018-12-05.jpg https://www.bing.com/az/hprichbg/rb/SurfersBronteBeach_ROW9358782018_1920x1200.jpg
exists 2018-12-04.jpg https://www.bing.com/az/hprichbg/rb/SphinxObservatory_ROW9691446114_1920x1200.jpg
exists 2018-12-03.jpg https://www.bing.com/az/hprichbg/rb/HussarPoint_ROW8654856850_1920x1200.jpg
exists 2018-12-02.jpg https://www.bing.com/az/hprichbg/rb/Nuuk_ROW12381573676_1920x1200.jpg
exists 2018-12-01.jpg https://www.bing.com/az/hprichbg/rb/RedAntarctica_ROW12620598839_1920x1200.jpg
exists 2018-11-30.jpg https://www.bing.com/az/hprichbg/rb/KilchurnSky_ROW9474162800_1920x1200.jpg

PS: Das obige Skript wird &mkt=en-NZfür die neuseeländischen Bilder verwendet.
Den Marktcode für andere Länder können Sie hier einsehen .

Hier können Sie auch alle seit 2009 archivierten Bilder für verschiedene Länder sehen .
(allerdings nur in 1366x768)

Major PS fügt das Skript zum Taskplaner hinzu, um es beim Anmelden auszuführen. (oder täglich / wöchentlich)

Erstellen Sie ein grundlegendes Aufgabenprogramm
/ Skript: python (oder C: \ Python34 \ python.exe, wenn es nicht in Ihrem env-Pfad enthalten ist)
Argumente: "path / to / your / script.py"
Start in: "path / to / your"

AKTUALISIEREN! (März 2019)
Das Bild für den 10.03.2019 wurde sowohl im XML- als auch im RSS-Format mit einem falschen Startdatum (20190309) versehen.
Verwenden Sie stattdessen das Json-Format. (da es genaues Datum gibt)



1

Bash One Liner (benötigt Bash, Curl und JQ), nützlich für einen Cronjob:

BACKGROUND_META=$(curl 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US'); curl -o $(echo $BACKGROUND_META | jq -r '.images[0].urlbase' | sed s/.*=//).jpg "https://bing.com$(echo $BACKGROUND_META| jq -r '.images[0].url')"

0

Sie können den Dateiinhalt dieser URL abrufen und die Datei nach dem Bild durchsuchen. Ich bin mir nicht sicher, ob das der beste Weg ist, aber es ist ein Weg.


0

Unter Verwendung der URL von @Siv finden Sie hier ein Beispiel für JavaScript, das aktualisiert wird <div class="bgimg" id="background">

function GetImageURL(ans) {
    var suffix = ans.images[0].url 
    document.getElementById("background").style.backgroundImage = 'url("' + 
    'http://bing.com/' + suffix + '"'
}

function GetJSON() {
    var xmlhttp = new XMLHttpRequest()
    var url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"

    xmlhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            var ans = JSON.parse(this.responseText);
            GetImageURL(ans);
        }
    };
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}


window.onload = function () {
    GetJSON()
}

Das CSS für diese Klasse lautet:

.bgimg {
    height: 100%;
    position: relative;
    opacity: 0.95;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

Dies funktioniert bei mir aufgrund der gleichen Ursprungsrichtlinie des Browsers nicht ...
John

0

Sie können dies mit Python und Wget auf einem Linux-Computer tun:

import os # import the os package
os.system("wget -O index.html http://www.bing.com") # download the bing index
str1 = open('index.html', 'r').read() # extract the file path using split
str2=str1.split("g_img={url: \"")[1]
str3=str2.split(".jpg")[0]
os.system("wget -O daily_im.jpg http://www.bing.com" + str3 + ".jpg") # donwload the daily image

Es lädt den täglichen Bing-Hintergrund im lokalen Verzeichnis unter dem Namen daily_im.jpg herunter. Sie können alles in eine script.py einfügen und programmgesteuert starten.


0

EDIT 27.09.2008: http://www.istartedsomething.com/bingimages antwortet wochenlang auf 404. Es kann nicht mehr existieren. :-(

Sie können das Bing Image Archive von istartedsomething.com verwenden . Es ist ein inoffizielles Bing Image Archive. Es wird ein hausgemachter Endpunkt verwendet, der zum Abrufen von Bildern hilfreich ist:

GET /bingimages/getimage.php?id=<image_id>

idist eine Zeichenfolge, die das Datum der Veröffentlichung des Bildes und das Land enthält, in dem es veröffentlicht wurde. idmuss dem folgenden Format entsprechen : YYYYMMDD-xx, wobei:

  • YYYY ist das Jahr, vierstellig geschrieben.
  • MM ist der Monat, zweistellig geschrieben.
  • DD ist der Tag, zweistellig geschrieben.
  • xxist der Länderindikator. Bing Image Archive unterstützt derzeit die folgenden Länder:
    • au: Australien.
    • br: Brasilien.
    • ca: Kanada.
    • cn: China.
    • de: Deutschland.
    • fr: Frankreich.
    • gb: Großbritannien.
    • jp: Japan.
    • nz: Neuseeland.
    • uk: Großbritannien.
    • us: Vereinigte Staaten von Amerika.

Es gibt ein nützliches JSON-Objekt zurück, wenn es Informationen enthält, oder false, wenn es nichts enthält.

Beispiel 1: Wiederholen des täglichen Bing-Bildes, das am 24. Mai 2014 in Neuseeland veröffentlicht wurde

Die Bild-ID ist darauf zurückzuführen, 20140524-nzdass das angeforderte Bild am 24.05.2014 veröffentlicht wurde und in Neuseeland veröffentlicht wurde, dessen Länderindikator lautet nz.

http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz gibt das folgende Stück JSON zurück:

{
    "url":"\/az\/hprichbg\/rb\/LakeMagadiFlamingos_ROW9792683076_1366x768.jpg",
    "region":"nz",
    "date":"2014-05-24",
    "copyright":"Flamingos take flight, Lake Magadi, Kenya (\u00a9 Bobby Haas\/Getty Images)(Bing New Zealand)",
    "imageurl":"http:\/\/www.istartedsomething.com\/bingimages\/cache\/LakeMagadiFlamingos_ROW9792683076_1366x768.jpg",
    "hotspots":[],
    "video":[]
}

Sie können das imageurlFeld oder das Feld url(Bing-URL-Pfad) verwenden, um Ihr Bild abzurufen.

Beispiel 2: Wiederholen des täglichen Bing-Bildes, das am 12. Juli 1998 in Frankreich veröffentlicht wurde

Die Bild-ID ist darauf zurückzuführen, 19980712-frdass das angeforderte Bild am 12.07.1998 veröffentlicht wurde und in Frankreich veröffentlicht wurde, dessen Länderindikator lautetfr .

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr kehrt zurück, falseda es am 12.07.1998 kein Bing Daily Image für Frankreich gibt (Bing existierte zu diesem Zeitpunkt noch nicht einmal).


Links tot, und ich habe nichts Ähnliches gefunden, um die Antwort zu aktualisieren.
Unterentwickler

0

OP gibt das Betriebssystem nicht an, daher hier eines für die Verwendung unter Linux. Ich habe das hier angebotene Skript geändert .

Grundsätzlich wird die URL des Bilds des Tages abgerufen, das Bild heruntergeladen und in einer festen Datei gespeichert ~/.config/wallpaper.jpgund fehzum Festlegen des Hintergrundbilds verwendet. Gleichzeitig sendet eine Benachrichtigung.

#!/bin/sh

WP_FILE=$HOME/.config/wallpaper.jpg

bing="www.bing.com"

# $xmlURL is needed to get the xml data from which
# the relative URL for the Bing pic of the day is extracted
#
# The mkt parameter determines which Bing market you would like to
# obtain your images from.
# Valid values are: en-US, zh-CN, ja-JP, en-AU, en-UK, de-DE, en-NZ, en-CA or opted out.
#
# The idx parameter determines where to start from. 0 is the current day,
# 1 the previous day, etc.
xmlURL="http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US"

# The desired Bing picture resolution to download
# Valid options: "_1024x768" "_1280x720" "_1366x768" "_1920x1200"
desiredPicRes="_1920x1080"

# The file extension for the Bing pic
picExt=".jpg"

# Extract the relative URL of the Bing pic of the day from
# the XML data retrieved from xmlURL, form the fully qualified
# URL for the pic of the day, and store it in $picURL

# Form the URL for the desired pic resolution
desiredPicURL=$bing$(curl -s $xmlURL | grep -oP "(?<=<urlBase>)(.*?)(?=</urlBase>)")$desiredPicRes$picExt

# Form the URL for the default pic resolution
defaultPicURL=$bing$(curl -s $xmlURL | grep -oP "(?<=<url>)(.*?)(?=</url>)")

# $picName contains the filename of the Bing pic of the day

# Attempt to download the desired image resolution. If it doesn't
# exist then download the default image resolution
if wget --quiet --spider "$desiredPicURL"
then

    # Download the Bing pic of the day at desired resolution
    curl -s -o "$WP_FILE" "$desiredPicURL"
else
    # Download the Bing pic of the day at default resolution
    curl -s -o "$WP_FILE" "$defaultPicURL"
fi

if [[ -f "${WP_FILE}" ]]; then
    feh --bg-scale "$WP_FILE" && \
        notify-send -i emblem-photos "Wallpaper" "Wallpaper changed" \
        -h int:suppress-sound:1 -h int:transient:1
fi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.