มีวิธีรับรูปภาพประจำวันของ Bing หรือไม่?


90

มีวิธีใดบ้างที่ฉันจะได้รับภาพพื้นหลัง Bing โดยทางโปรแกรม?

API ของ Bing ดูเหมือนจะไม่มีฟังก์ชั่นดังกล่าวอาจมีวิธีอื่น?

คำตอบ:


114

ฉันคิดว่าวิธีที่ดีที่สุดคือเลียนแบบวิธีที่พวกเขาทำผ่านการโทร AJAX

พวกเขาเรียก URL นี้และดึงข้อมูลผ่านการดีซีเรียลไลเซชัน XML

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

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

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

mktแอตทริบิวต์สามารถเห็นได้ชัดว่าจะมีการเปลี่ยนแปลงไปยังพื้นที่ที่แตกต่างกันกว่า'en-US' แต่ยังสามารถเลือกที่จะไม่ได้ถ้าคุณไม่สนใจเกี่ยวกับภูมิภาคที่เฉพาะเจาะจง

โปรดทราบว่า_1366x768.jpgคำต่อท้ายที่เพิ่มในชื่อภาพนั้นสามารถแก้ไขได้ในความละเอียดที่แตกต่างกัน (เช่น_1920x1080.jpgFull HD และอื่น ๆ )

นี่คือการถ่ายโอนข้อมูล ณ วันที่ 28/9/2556 ในรูปแบบ 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>

13
FYI - คุณสามารถดาวน์โหลดได้ในรูปแบบ JSON เช่นกัน! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

2
BTW: ความละเอียดสามารถเปลี่ยนแปลงได้ทุกอย่างขึ้นอยู่กับการ_1920x1200ทำงานเช่น1920x1080และอื่น ๆ
jmiserez

1
โอเคดูเหมือนว่า Bing Desktop จะใช้bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1นั่นคือไม่มี&mkt=en-USส่วนใดส่วนหนึ่ง แม้ว่าฉันจะตั้งแอปเป็น "อังกฤษ - สหรัฐอเมริกา"
jmiserez

1
@darksoulsong ชัวร์. คุณสามารถสร้างบริการบนเว็บที่มอบฉันทะข้อมูลให้คุณได้ โดยปกติคนหนึ่งจะใช้jsonpแต่ดูเหมือนว่าพวกเขาจะไม่อนุญาต
Mathias Lykkegaard Lorenzen

1
หากใครที่กำลังมองหาตลาดสถานที่ ... สามารถดึงข้อมูลได้จากmicrosoft.com/en-in/locale.aspx
Amar Palsapure

33

รูปแบบ JSON ของ BING IMAGE

ฉันพบวิธีดึงรูปแบบ JSONของBing Image of the day

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

บันทึก

      n=ไม่มีภาพที่คุณต้องการ (คุณสามารถใช้จำนวนเต็ม )
      mkt=ตำแหน่งของคุณ (ตัวอย่าง: en-US )


นี่คือผลลัพธ์ 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."
  }
}

ใช้urlจากไฟล์images[]

และเพิ่มลงใน 'http://bing.com'

url ที่นี่คือ "url": "\/az\/hprichbg\/rb\/DayGecko_EN-US8730336235_1366x768.jpg"


ดูเหมือน Bing จะ จำกัด จำนวนการตอบกลับทั้งหมดไว้ที่ครั้งละ 8 ครั้ง 8 สามารถรวบรวมด้วย n = 8 และ 8 ก่อนหน้านั้นสามารถรวบรวมได้โดยการตั้งค่า idx = 8 และ n = 8 ฉันไม่เห็นวิธีที่จะขยายสิ่งนี้
The Fluffy Robot

ทำไมมันให้เกิดข้อผิดพลาดUnexpected token :ในhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Rohit Sharma

10

ไมโครซอฟท์ได้รับการตีพิมพ์เมื่อเร็ว ๆ นี้ธีม Bing แบบไดนามิกสำหรับ Windows 7 ซึ่งมีฟีด RSS มีการเชื่อมโยงไปยังวอลล์เปเปอร์

นอกจากนี้ยังมีสคริปต์ Pythonซึ่งพยายามโหลดเว็บไซต์ Bing และเดา URL รูปภาพที่ถูกต้อง แต่จากประสบการณ์ของฉันมักจะส่งผลให้ภาพมีความละเอียดต่ำกว่าที่เสนอโดยฟีด RSS


+1 สำหรับลิงก์ไปยัง rss ฉันคิดว่านั่นเป็นคำตอบที่แท้จริงสำหรับคำถาม
David Conde

3
น่าเสียดายที่ธีมดังกล่าวถูกยกเลิกไปแล้วหรือตามที่ Microsoft ระบุว่า: "ธีมนี้ถูกยกเลิกแล้ว" RSS ยังอยู่ แต่จะไม่ได้รับการอัปเดตอีกต่อไป
karafior


6

PowerShell หนึ่งซับ (3.0 หรือสูงกว่า)

irm เป็นนามแฝงสำหรับ Invoke-RestMethod

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

2
ยอดเยี่ยม! ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน :)
LiamHarries

4

ฉันชอบภาพ Bing เหมือนกัน แต่แอปของพวกเขาป่องเกินไปสำหรับจุดประสงค์ในการดาวน์โหลดภาพ หลังจากวิเคราะห์การเชื่อมต่อกับนักเล่นซอฉันเขียนโค้ดนี้ 1920x1200 มาพร้อมกับโลโก้ Bing ที่ฝังอยู่ แต่ไม่มีความละเอียดที่ต่ำกว่า

คุณสามารถให้หน้าต่างแสดงรูปภาพแบบสุ่มจากโฟลเดอร์รูปภาพที่คุณตั้งไว้ดังนั้นเมื่อคุณดาวน์โหลดทุกวันมันจะแสดงรูปภาพแบบสุ่มเพิ่มเติม หากคุณเก็บ "imageDir" ไว้คุณต้องเปลี่ยนสิทธิ์ในโฟลเดอร์นั้นไม่เช่นนั้นมันจะพังฉันไม่ได้กังวลกับการจับข้อผิดพลาด สุดท้ายให้ยกเลิกการแสดงความคิดเห็นในบรรทัดหากคุณต้องการตั้งค่าวอลเปเปอร์ของคุณเป็นรูปภาพของวันนี้หรือคุณสามารถสร้างงานเพื่อเรียกใช้โปรแกรมพูดหนึ่งนาทีหลังจากเข้าสู่ระบบ

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

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

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

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

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

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

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


2

JavaScript นี้จะตอบ 'ว่าจะทำอย่างไรกับ api' โดยการเปลี่ยนภาพพื้นหลังของ div เป็นพื้นหลังของภาพ bing ของวันปัจจุบัน

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

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

5
ฉันต้องการใช้สิ่งนี้จริงๆ แต่ดูเหมือนจะไม่ได้รับการแก้ไขโดย Bing ไม่ได้ตั้งค่า 'Access-Control-Allow-Origin'
addMitt

2

ในกรณีที่ใครก็ตามกำลังมองหาการใช้งานที่เป็นไปได้ฉันได้เขียนโปรแกรมบรรทัดคำสั่งขนาดเล็กใน C # เพื่อดาวน์โหลดบันทึกและตั้งค่าพื้นหลังของฉันเป็น Bing Image of the Day อย่าลังเลที่จะปรับเปลี่ยนตามความต้องการส่วนบุคคลของคุณ https://github.com/josueespinosa/BingBackground

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

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

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

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

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

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

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

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

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

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

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

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

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

2

มีลักษณะที่Bing เดสก์ทอปวอลล์เปเปอร์ที่เปลี่ยนบนGithub สคริปต์ถูกเขียนด้วย python และฉันหวังว่าคุณจะพบคำตอบที่นั่น

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

import os
import urllib
import urllib2
from bs4 import BeautifulSoup

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

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

urllib.urlretrieve(ImageURL, ImageName)

ดูโครงการ Github สำหรับรหัสโดยละเอียด


1
เยี่ยมมาก! สิ่งนี้ยังมีอนาคตในบทความomgubuntu
Wtower

@Wtower ขอบคุณมากที่แจ้งให้เราทราบ! :)
Utkarsh Gupta

2

Simple PowerShell วางลงในโฟลเดอร์สร้างงานประจำวันใน Windows Task Scheduler สคริปต์จะบันทึกภาพที่โฟลเดอร์ที่เรียกใช้จากนั้นในการตั้งค่าพื้นหลังเดสก์ท็อปของคุณให้เลือกโฟลเดอร์นั้นเป็นพื้นหลัง

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

ทำงานได้ดียิ่งขึ้นเมื่อเป็นงานตามกำหนดเวลาใน Windows เพื่อดาวน์โหลดภาพ Bing ของวันไปยังไดเร็กทอรีเป้าหมายโดยอัตโนมัติ ยอดเยี่ยม.
nonbeing

2

นี่คือสคริปต์ Python ง่ายๆในการดึงภาพ Bing ของวันโดยใช้เพียงrequestsและjson:

import requests
import json

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

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

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

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

สิ่งนี้จะเขียนไฟล์เช่นTurtleTears_EN-US7942276596_1920x1080.jpgไปยังไดเร็กทอรีเดียวกันกับที่เรียกใช้สคริปต์ แน่นอนว่าสามารถปรับแต่งสิ่งต่างๆได้มากมายที่นี่ แต่ทำให้งานเสร็จได้ง่ายพอสมควร



1

ให้ฉันบอกวิธีรับวอลล์เปเปอร์ bing ทุกวันโดยใช้ javascript และ php

ลองใช้รหัส js นี้:

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

สคริปต์นี้ตั้งค่ารูปภาพประจำวันของ bing เป็นพื้นหลังของเอกสาร html ของคุณ (คุณสามารถแก้ไขเพิ่มเติมได้ตามการใช้งานของคุณ)

ลิงค์นี้ - https://techytricks97.000webhostapp.comส่งคืนวอลล์เปเปอร์ bing ของวันทุกวัน

fetch()รับ url ของภาพ bing ของวันนี้https://techytricks97.000webhostapp.comและtext=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}ตั้งเป็นพื้นหลัง

หมายเหตุ: Microsoft ไม่อนุญาตให้ใช้รูปภาพของ bing daily เป็นพื้นหลังของไซต์คุณสามารถใช้เป็นภาพพื้นหลังโทรศัพท์ / เดสก์ท็อปหรือสิ่งอื่น ๆ ที่มีการกล่าวถึงลิขสิทธิ์

นี่คือรหัส php ที่ใช้ในhttp://techytricks97.000webhostapp.com :

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

คุณสามารถใช้http://techytricks97.000webhostapp.comเพียงอย่างเดียวหรือสามารถตั้งค่าไฟล์ php ของคุณเองบนเซิร์ฟเวอร์ของคุณ

หมายเหตุอื่น:ฉันไม่ได้ใช้ javascript เท่านั้นเนื่องจากนโยบายต้นกำเนิดเดียวกันของเบราว์เซอร์ จำกัด แต่การดึงข้อมูลจากไฟล์ php ของฉันได้รับอนุญาตตามที่ฉันใส่header('Access-Control-Allow-Origin: *');รหัส php ไว้ ฉันสามารถใช้พร็อกซีอื่นได้ แต่มีการเข้าชมสูง (ไซต์ของฉันแทบจะไม่ได้รับคลิกเลยในหนึ่งวัน)

หากคุณใช้ภาษาอื่นคุณต้องอ่านไฟล์นี้ ( http://techytricks97.000webhostapp.com )


1

ในที่สุดฉันก็ตัดสินใจเขียนสคริปต์ใน Python 3 เพื่อให้ได้ภาพมากที่สุด (16) จากไฟล์เก็บถาวร xml

ตอนนี้ฉันสามารถเก็บภาพได้โดยไม่ต้องใช้ความพยายาม เพียงแค่เรียกใช้สคริปต์ Python
ฉันจัดภาพเป็นโฟลเดอร์ปี / เดือนดังนี้: 2018> 12 ธันวาคม> 2018-12-06.jpg

สคริปต์นี้จะอยู่ในโฟลเดอร์ Bing Wallpapers ของฉัน (ซึ่งอยู่ในโฟลเดอร์รูปภาพของฉัน)

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

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

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

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

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

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

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

    print()

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

รหัสพิเศษเพิ่มเติมเพื่ออัปเดตวอลเปเปอร์: (วางไว้ใต้ downloadBingImages (7))

import ctypes,win32con

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

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

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

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

ตัวอย่างผลลัพธ์:

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

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

ปล. สคริปต์ด้านบนใช้&mkt=en-NZสำหรับภาพนิวซีแลนด์
คุณสามารถตรวจสอบรหัสตลาดสำหรับประเทศอื่น ๆที่นี่

คุณยังสามารถดูภาพทั้งหมดที่เก็บไว้ตั้งแต่ปี 2009 สำหรับประเทศต่างๆ ที่นี่
(เฉพาะใน 1366x768 แม้ว่า)

Major PS เพิ่มสคริปต์ไปยัง Task Scheduler เพื่อให้ทำงานเมื่อเข้าสู่ระบบ (หรือรายวัน / รายสัปดาห์)

สร้าง Basic Task
Program / script: python (หรือ C: \ Python34 \ python.exe หากไม่ได้อยู่ในเส้นทาง env ของคุณ)
อาร์กิวเมนต์: "path / to / your / script.py"
start in: "path / to / your"

อัพเดท! (มีนาคม 2019)
รูปภาพสำหรับวันที่ 2019-03-10 ได้รับวันที่เริ่มต้นผิด (20190309) ทั้งในรูปแบบ xml และ rss
ใช้รูปแบบ Json แทน (เนื่องจากให้วันที่ที่ถูกต้อง)


1

https://peapix.com/bing/feedจะแสดงรายการรูปภาพ Bing ล่าสุดที่ไม่มีโลโก้ Bing ดูแลโดยpeapix.com peapix.comรองรับประเทศ / ภูมิภาคต่อไปนี้: AU, CA, CN, DE, FR, JP, US, GB

ตัวอย่างเช่นhttps://peapix.com/bing/feed?country=jpสำหรับญี่ปุ่นและhttps://peapix.com/bing/feed?country=usสำหรับสหรัฐอเมริกา


1

Bash one liner (ต้องการ bash, curl และ jq) มีประโยชน์สำหรับการใส่ cronjob:

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

0

คุณอาจพิจารณารับ file_content ของ url นั้นและค้นหาไฟล์สำหรับรูปภาพ ไม่แน่ใจว่าเป็นวิธีที่ดีที่สุด แต่เป็นวิธี


0

ใช้ URL จาก @Siv นี่คือตัวอย่างของ JavaScript ที่อัปเดต <div class="bgimg" id="background">

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

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

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


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

css สำหรับคลาสนี้คือ:

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

สิ่งนี้ใช้ไม่ได้สำหรับฉันเนื่องจากนโยบายต้นกำเนิดเดียวกันของเบราว์เซอร์ ...
John

0

คุณสามารถทำได้โดยใช้ python และ wget บนเครื่อง linux:

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

ดาวน์โหลดพื้นหลัง bing รายวันในไดเร็กทอรีท้องถิ่นภายใต้ชื่อ daily_im.jpg คุณสามารถใส่ทุกอย่างลงใน script.py และเปิดใช้งานโดยใช้โปรแกรม


0

แก้ไข 27/09/2018: http://www.istartedsomething.com/bingimagesตอบกลับ 404 สัปดาห์ มันอาจไม่มีอยู่อีกต่อไป :-(

คุณสามารถใช้istartedsomething.com ของ Bing ภาพเอกสารเก่า มันเป็น Bing Image Archive ที่ไม่เป็นทางการ ใช้ปลายทางแบบโฮมเมดซึ่งมีประโยชน์ในการดึงภาพ:

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

idคือสตริงที่มีวันที่เผยแพร่ภาพและประเทศที่เผยแพร่ idต้องเป็นไปตามรูปแบบต่อไปนี้: YYYYMMDD-xxโดยที่:

  • YYYY คือปีที่เขียนด้วยตัวเลขสี่หลัก
  • MM คือเดือนที่เขียนด้วยตัวเลขสองหลัก
  • DD คือวันที่เขียนด้วยตัวเลขสองหลัก
  • xxเป็นตัวบ่งชี้ประเทศ Bing Image Archiveปัจจุบันรองรับประเทศต่อไปนี้:
    • au: ออสเตรเลีย.
    • br: บราซิล.
    • ca: แคนาดา.
    • cn: จีน
    • de: Deutschland.
    • fr: ฝรั่งเศส.
    • gb: บริเตนใหญ่
    • jp: ญี่ปุ่น.
    • nz: นิวซีแลนด์.
    • uk: ประเทศอังกฤษ.
    • us: สหรัฐอเมริกา.

ส่งคืนออบเจ็กต์ JSON ที่มีประโยชน์หากมีข้อมูลบางอย่างหรือเป็นเท็จหากไม่มีอะไรเลย

ตัวอย่างที่ 1: เรียกคืนรูปภาพ Bing ประจำวันซึ่งเผยแพร่เมื่อวันที่ 24 พฤษภาคม 2014 ในนิวซีแลนด์

รหัสภาพ20140524-nzเพราะภาพที่เรียกร้องได้รับการตีพิมพ์เมื่อ 2014/05/24 nzและมันถูกตีพิมพ์ในนิวซีแลนด์ซึ่งเป็นตัวบ่งชี้ประเทศ

http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nzส่งคืน JSON ต่อไปนี้:

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

คุณสามารถใช้imageurlฟิลด์หรือฟิลด์url(เส้นทาง Bing URL) เพื่อรับรูปภาพของคุณ

ตัวอย่างที่ 2: เรียกคืนภาพ Bing ประจำวันซึ่งเผยแพร่เมื่อวันที่ 12 กรกฎาคม 1998 ในฝรั่งเศส

รหัสภาพเป็น19980712-frเพราะภาพที่ต้องการเผยแพร่เมื่อวันที่ 12 ธันวาคม พ.ศ. 2541 และได้รับการเผยแพร่ในฝรั่งเศสซึ่งมีตัวบ่งชี้ประเทศfrและมันถูกตีพิมพ์ในประเทศฝรั่งเศสซึ่งเป็นตัวบ่งชี้ประเทศ

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-frส่งคืนfalseเนื่องจากไม่มี Bing Daily Image สำหรับฝรั่งเศสในวันที่ 07/12/1998 (ขณะนี้ยังไม่มี Bing)


ลิงค์ตายและฉันไม่พบสิ่งที่คล้ายกับการอัปเดตคำตอบ
พัฒนาย่อย

0

OP ไม่ได้ระบุระบบปฏิบัติการดังนั้นนี่คือหนึ่งสำหรับการใช้งานใน Linux ฉันแก้ไขจากสคริปต์ที่นำเสนอที่นี่ที่นี่

โดยทั่วไปจะดึง url ของรูปภาพประจำวันดาวน์โหลดรูปภาพและบันทึกลงในไฟล์คงที่~/.config/wallpaper.jpgและใช้fehเพื่อตั้งค่าวอลเปเปอร์ ในขณะเดียวกันก็ส่งการแจ้งเตือน

#!/bin/sh

WP_FILE=$HOME/.config/wallpaper.jpg

bing="www.bing.com"

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

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

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

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

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

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

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

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

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

if [[ -f "${WP_FILE}" ]]; then
    feh --bg-scale "$WP_FILE" && \
        notify-send -i emblem-photos "Wallpaper" "Wallpaper changed" \
        -h int:suppress-sound:1 -h int:transient:1
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.