Adakah cara untuk mendapatkan foto Bing hari ini?


89

Adakah cara agar saya bisa mendapatkan gambar latar Bing secara terprogram?

API Bing tampaknya tidak menyediakan fungsionalitas seperti itu, mungkin ada cara lain?

Jawaban:


111

Saya pikir cara terbaik adalah meniru cara mereka melakukannya sendiri melalui panggilan AJAX mereka.

Mereka menyebut URL ini dan mengekstrak informasi melalui deserialisasi 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

The mktatribut jelas dapat diubah ke daerah yang berbeda dari'en-US', tetapi juga dapat memilih keluar dari sepenuhnya jika Anda tidak peduli tentang wilayah tertentu.

Perhatikan bahwa _1366x768.jpgsufiks yang ditambahkan ke nama gambar tampaknya dapat diubah menjadi resolusi yang berbeda (seperti _1920x1080.jpguntuk full HD dan mungkin lainnya).

Berikut adalah dump data pada 9/28/2013, dalam format 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
FYI - Anda juga bisa mendapatkannya dalam format JSON! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

2
BTW: Resolusi dapat diubah, apa pun hingga _1920x1200berfungsi, misalnya, 1920x1080dan lainnya.
jmiserez

1
Oke, tampaknya Bing Desktop menggunakan bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 , yaitu tanpa &mkt=en-USbagian. Ini meskipun aplikasi saya disetel ke "Inggris-Amerika Serikat".
jmiserez

1
@tokopedia. Anda dapat membuat layanan web yang memproksikan data untuk Anda. Biasanya, seseorang akan menggunakan jsonp, tetapi sepertinya mereka tidak mengizinkannya.
Mathias Lykkegaard Lorenzen

1
Jika ada yang mencari tempat pasar ... Anda dapat mengekstraknya dari microsoft.com/en-in/locale.aspx
Amar Palsapure

31

FORMAT JSON dari BING IMAGE

Saya menemukan cara untuk mengambil format JSON dari Gambar Bing hari ini

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

Catatan

      n=No gambar yang Anda inginkan (Anda dapat menggunakan Integers ),
      mkt=Lokasi Anda (contoh: en-US )


Berikut ini tampilan keluaran 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."
  }
}

gunakan urldariimages[]

dan tambahkan ke 'http://bing.com'

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


Sepertinya Bing membatasi jumlah tanggapan menjadi 8 sekaligus. 8 dapat dikumpulkan dengan n = 8, dan 8 yang sebelumnya dapat dikumpulkan dengan menetapkan idx = 8 dan n = 8. Saya tidak melihat cara untuk mengembangkan ini.
Robot Berbulu

Mengapa hal itu memberikan kesalahan Unexpected token :dihttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Rohit Sharma

10

Microsoft baru-baru ini menerbitkan Bing Dynamic Theme untuk Windows 7, yang berisi RSS Feed dengan tautan ke wallpaper Bing .

Ada juga skrip Python yang mencoba memuat situs web Bing dan menebak URL gambar yang benar, tetapi dari pengalaman saya, biasanya menghasilkan gambar dengan resolusi lebih rendah daripada yang ditawarkan oleh umpan RSS.


+1 untuk tautan ke rss, saya pikir itu adalah jawaban sebenarnya untuk pertanyaan itu
David Conde

3
Sayangnya tema tersebut telah dihentikan, atau seperti yang dikatakan Microsoft: "Tema ini telah dihentikan". RSS masih ada, tapi tidak diperbarui lagi.
karafior


6

One liner PowerShell (3.0 atau lebih tinggi)

irm adalah alias untuk Invoke-RestMethod

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

2
Cemerlang! Bekerja dengan sempurna untuk saya :)
LiamHarries

4

Saya juga suka gambar Bing tetapi aplikasinya terlalu membengkak untuk tujuan mengunduh gambar. Setelah menganalisis koneksi dengan fiddler, saya menulis kode ini. 1920x1200 dilengkapi dengan logo Bing yang disematkan tetapi resolusi yang lebih rendah tidak memilikinya.

Anda dapat memiliki jendela yang menampilkan gambar acak dari folder gambar yang Anda atur, sehingga saat Anda mengunduhnya setiap hari, itu akan menampilkan lebih banyak gambar acak. Jika Anda menyimpan "imageDir", Anda perlu mengubah izin pada folder itu atau akan macet, saya tidak repot-repot menangkap kesalahan. Terakhir, hapus komentar pada baris jika Anda ingin menyetel wallpaper ke gambar hari ini atau Anda dapat membuat tugas untuk menjalankan program, katakan satu menit setelah logon.

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

JavaScript ini akan menjawab 'apa yang harus dilakukan dengan api' dengan mengubah gambar latar belakang div menjadi latar belakang gambar bing hari ini.

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
Saya benar-benar ingin menggunakan ini tetapi tampaknya tidak mengatasi kurangnya 'Access-Control-Allow-Origin' yang ditetapkan oleh Bing.
addMitt

2

Jika ada yang mencari kemungkinan implementasi, saya menulis program baris perintah kecil di C # untuk mengunduh, menyimpan, dan menetapkan latar belakang saya sebagai Gambar Bing Hari Ini. Jangan ragu untuk memodifikasinya sesuai kebutuhan pribadi Anda. 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

Simple PowerShell, tempatkan ke dalam folder, buat tugas harian di Penjadwal Tugas Windows, skrip menyimpan gambar di folder yang dijalankan, lalu di pengaturan Latar Belakang Desktop pilih folder itu sebagai latar belakang.

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

Berfungsi lebih baik sebagai tugas terjadwal di Windows untuk secara otomatis mengunduh gambar Bing hari ini ke direktori target. Luar biasa.
ketidakberadaan

2

Berikut ini skrip Python sederhana untuk mengambil foto Bing hari itu dengan hanya requestsdan 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))

Ini akan menulis file seperti TurtleTears_EN-US7942276596_1920x1080.jpgke direktori yang sama tempat skrip dijalankan. Tentu saja, dapat mengubah banyak hal di sini, tetapi menyelesaikan pekerjaan dengan cukup mudah.


2

Izinkan saya memberi tahu Anda cara mendapatkan wallpaper harian bing hari ini menggunakan javascript dan php,

Coba kode js ini:

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

Script ini menetapkan bing gambar harian hari itu sebagai latar belakang dokumen html Anda (Anda selanjutnya dapat memodifikasinya sesuai penggunaan Anda).

Tautan ini- https://techytricks97.000webhostapp.com mengembalikan wallpaper bing hari ini, setiap hari.

fetch()mendapatkan url gambar bing hari ini dari https://techytricks97.000webhostapp.comdan text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}menyetelnya sebagai latar belakang.

catatan: Microsoft tidak mengizinkan untuk menggunakan gambar bing daily sebagai latar belakang situs Anda, Anda dapat menggunakannya sebagai wallpaper ponsel / desktop, atau hal lain dengan menyebutkan hak cipta.

Berikut adalah kode php yang digunakan di 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);
?>

Anda http://techytricks97.000webhostapp.comhanya dapat menggunakan atau mengatur file php Anda sendiri di server Anda.

Catatan lain: Saya tidak hanya menggunakan javascript, karena browser sama-asal-kebijakan membatasinya, tetapi mengambil dari file php saya diperbolehkan seperti yang telah saya masukkanheader('Access-Control-Allow-Origin: *'); kode php saya. Saya bisa saja menggunakan proxy lain tetapi mereka memiliki lalu lintas tinggi (situs saya hampir tidak mendapat klik dalam sehari).

Jika Anda menggunakan bahasa lain, Anda hanya perlu membaca file ini ( http://techytricks97.000webhostapp.com )



1

Lihat bing-desktop-wallpaper-changer di Github . Skripnya telah ditulis dalam python dan saya harap Anda menemukan jawaban Anda di sana.

#!/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)

Lihat proyek Github untuk kode rinci


1
Kerja bagus! Ini juga telah terjadi dalam artikel omgubuntu
Wtower

@Wtower Terima kasih banyak telah memberi tahu saya! :)
Utkarsh Gupta

1

Saya akhirnya memutuskan untuk menulis skrip dengan Python 3 untuk mendapatkan gambar paling banyak (16) dari arsip xml.

Jadi sekarang saya bisa mengarsipkan gambar dengan mudah. Jalankan saja skrip Python.
Saya mengatur gambar ke dalam folder Tahun / Bulan seperti ini: 2018> 12 Desember> 2018-12-06.jpg

Skrip ini masuk ke folder Bing Wallpapers saya. (yang ada di folder Foto saya)

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)

Kode tambahan opsional untuk memperbarui wallpaper: (letakkan di bawah 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

contoh keluaran:

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 skrip di atas digunakan &mkt=en-NZuntuk gambar Selandia Baru.
Anda dapat melihat kode pasar untuk negara lain di sini .

Anda juga dapat melihat semua gambar yang diarsipkan sejak 2009 untuk berbagai negara di sini .
(hanya dalam 1366x768)

Mayor PS menambahkan skrip ke Penjadwal Tugas untuk dijalankan saat masuk. (atau harian / mingguan)

Buat
Program Tugas Dasar / skrip: python (atau C: \ Python34 \ python.exe jika tidak ada di jalur env Anda)
argumen: "path / to / your / script.py"
start in: "path / to / your"

MEMPERBARUI! (Maret 2019)
Gambar untuk 2019-03-10 diberi tanggal mulai yang salah (20190309) dalam format xml dan rss.
Menggunakan format Json sebagai gantinya. (karena memberikan tanggal yang akurat)



1

Bash one liner (membutuhkan bash, curl dan jq), berguna untuk melakukan 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

Anda dapat mempertimbangkan untuk mendapatkan file_content dari url tersebut dan mencari file untuk gambar tersebut. Tidak yakin itu cara terbaik, tapi itulah jalannya.


0

Menggunakan URL dari @Siv, berikut adalah contoh JavaScript yang diperbarui <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 untuk kelas ini adalah:

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

Ini tidak berfungsi untuk saya karena kebijakan asal browser yang sama ...
John

0

Anda dapat melakukannya menggunakan python dan wget di mesin 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

Ini mengunduh latar belakang bing harian di direktori lokal dengan nama daily_im.jpg. Anda dapat meletakkan semuanya di script.py dan meluncurkannya secara terprogram.


0

EDIT 27/09/2018: http://www.istartedsomething.com/bingimages menanggapi 404 selama berminggu-minggu. Mungkin sudah tidak ada lagi. :-(

Anda dapat menggunakan Arsip Gambar Bing istartedsomething.com . Ini adalah Arsip Gambar Bing tidak resmi. Ini menggunakan titik akhir buatan sendiri yang berguna untuk mengambil gambar:

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

idadalah string yang berisi tanggal gambar itu diterbitkan dan negara tempat gambar itu diterbitkan. idharus memenuhi format berikut:, YYYYMMDD-xxdimana:

  • YYYY adalah tahun, ditulis dengan empat digit.
  • MM adalah bulan yang ditulis dengan dua digit.
  • DD adalah hari, ditulis dengan dua digit.
  • xxadalah indikator negara. Arsip Gambar Bing saat ini mendukung negara-negara berikut:
    • au: Australia.
    • br: Brazil.
    • ca: Kanada.
    • cn: China.
    • de: Jerman.
    • fr: Prancis.
    • gb: Inggris Raya.
    • jp: Jepang.
    • nz: Selandia Baru.
    • uk: Britania Raya.
    • us: Amerika Serikat.

Ini mengembalikan objek JSON yang berguna jika memiliki beberapa informasi atau salah jika tidak mendapatkan apa pun.

Contoh 1: Mengambil gambar harian Bing yang diterbitkan pada tanggal 24 Mei 2014 di Selandia Baru

ID gambar adalah 20140524-nzkarena gambar yang diminta diterbitkan pada 5/24/2014 dan diterbitkan di Selandia Baru, yang indikator negaranya adalah nz.

http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz mengembalikan bagian JSON berikut:

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

Anda dapat menggunakan imageurlbidang atau bidang url(Bing URL path) untuk mendapatkan gambar Anda.

Contoh 2: Mengambil gambar harian Bing yang diterbitkan pada 12 Juli 1998 di Prancis

ID gambar 19980712-frkarena gambar yang diminta diterbitkan pada 07/12/1998 dan diterbitkan di Prancis, yang indikator negaranya adalah fr.

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr kembali falsekarena tidak ada Bing Daily Image untuk Prancis pada 07/12/1998 (Bing bahkan tidak ada saat ini).


Link mati, Dan saya tidak menemukan sesuatu yang mirip untuk memperbarui jawabannya.
subdeveloper

0

OP tidak menentukan sistem operasi, jadi ini satu untuk digunakan di Linux. Saya memodifikasi dari skrip yang ditawarkan di sini .

Pada dasarnya ini mengambil url gambar hari ini, mengunduh gambar dan menyimpan ke file tetap ~/.config/wallpaper.jpg, dan menggunakan fehuntuk mengatur wallpaper. Sekaligus mengirimkan notifikasi.

#!/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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.