Bing의 오늘 사진을 얻을 수있는 방법이 있습니까?


89

프로그래밍 방식으로 Bing 배경 이미지를 가져올 수있는 방법이 있습니까?

Bing의 API가 이러한 기능을 제공하지 않는 것 같습니다. 다른 방법이 있습니까?

답변:


111

가장 좋은 방법은 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.jpg풀 HD 등의 다른 해상도로 수정할 수있는 것으로 보입니다 .

다음은 2013 년 9 월 28 일 현재 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
참고로-JSON 형식으로도 얻을 수 있습니다! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier 2013

2
BTW : 해상도는 아무것도까지, 변경 가능 _1920x1200즉 또한 작품 1920x1080등.
jmiserez

1
좋아, 그래서 빙 데스크톱을 사용하는 것 bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 아니오, 즉 &mkt=en-US부분. 앱을 "영어-미국"으로 설정 한 경우에도 마찬가지입니다.
jmiserez

1
@darksoulsong 물론입니다. 데이터를 프록시하는 웹 서비스를 만들 수 있습니다. 일반적으로을 사용 jsonp하지만 허용하는 것처럼 보이지 않습니다.
Mathias Lykkegaard Lorenzen 2014 년

1
시장을 찾는 사람이 있다면 microsoft.com/en-in/locale.aspx
Amar Palsapure

31

BING 이미지의 JSON 형식

오늘 의 Bing 이미지JSON 형식 을 가져 오는 방법을 찾았 습니다.

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

노트

      n=원하는 이미지 수 (u can use Integers ),
      mkt=Your location (예 : 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로 설정하여 수집 할 수 있습니다. 나는 이것을 확장하는 방법을 보지 못합니다.
무성한 로봇

왜 오류를주고 Unexpected token :https://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
로힛 샤르마

10

Microsoft는 최근 Bing 월페이퍼 링크있는 RSS 피드가 포함 Windows 7 용 Bing 동적 테마 를 게시했습니다 .

Bing 웹 사이트를로드하고 올바른 이미지 URL을 추측 하는 Python 스크립트 도 있지만 내 경험상 일반적으로 RSS 피드에서 제공하는 이미지보다 해상도가 더 낮습니다.


rss에 대한 링크에 +1, 나는 그것이 질문에 대한 실제 답이라고 생각합니다
David Conde

3
안타깝게도 테마가 중단되었거나 Microsoft에서 "이 테마는 사용 중지되었습니다"라고 표현했습니다. RSS는 아직 있지만 더 이상 업데이트되지 않습니다.
karafior


6

One Liner 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"을 유지하는 경우 해당 폴더에 대한 권한을 변경해야합니다. 그렇지 않으면 충돌이 발생합니다. 오류를 잡는 데 신경 쓰지 않았습니다. 마지막으로, 배경 화면을 오늘의 이미지로 설정하려면 줄의 주석 처리를 제거하거나 로그온 한 후 1 분 후에 프로그램을 실행하는 작업을 만들 수 있습니다.

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는 div의 배경 이미지를 오늘의 bing 이미지의 배경으로 변경하여 'api로 수행 할 작업'에 응답합니다.

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 2015

2

누구나 가능한 구현을 찾고 있다면 C #으로 작은 명령 줄 프로그램을 작성하여 내 배경을 오늘의 Bing 이미지로 다운로드, 저장 및 설정했습니다. 개인적인 필요에 따라 자유롭게 수정하십시오. 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

간단한 PowerShell을 폴더에 넣고 Windows 작업 스케줄러에서 일일 작업을 만들고 스크립트가 실행 폴더에 이미지를 저장 한 다음 바탕 화면 배경 설정에서 해당 폴더를 배경으로 선택합니다.

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

Write-Output $url

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

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

Windows에서 예약 된 작업으로 더 잘 작동하여 오늘의 Bing 이미지를 대상 디렉터리에 자동으로 다운로드합니다. 우수한.
nonbeing

2

다음은 requestsand를 사용하여 오늘의 Bing 사진을 가져 오는 간단한 Python 스크립트입니다 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스크립트가 실행되는 동일한 디렉토리에 같은 파일이 작성됩니다 . 물론 여기에서 모든 것을 조정할 수 있지만 작업을 합리적으로 쉽게 수행 할 수 있습니다.


2

자바 스크립트와 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는 , 매일 하루의 빙 벽지를 반환합니다.

fetch()에서 오늘날의 빙 이미지의 URL을 가져옵니다 https://techytricks97.000webhostapp.comtext=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}배경으로 설정합니다.

참고 : Microsoft는 bing daily의 이미지를 사이트의 배경으로 사용하는 것을 허용하지 않으며, 전화 / 바탕 화면 배경 무늬로 사용하거나 저작권을 언급하는 다른 것들에 사용할 수 있습니다.

다음은 http://techytricks97.000webhostapp.com에서 사용되는 PHP 코드입니다 .

<?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 파일 만 사용 하거나 설정할 수 있습니다.

또 다른 참고 사항 : 브라우저의 동일 출처 정책이이를 제한하기 때문에 자바 스크립트 만 사용하지는 않았지만 header('Access-Control-Allow-Origin: *');내 PHP 코드를 입력 한대로 내 PHP 파일에서 가져 오는 것은 허용됩니다 . 다른 프록시를 사용할 수 있었지만 트래픽이 높습니다 (내 사이트에서 하루에 거의 클릭이 발생하지 않음).

다른 언어를 사용하는 경우이 파일 ( http://techytricks97.000webhostapp.com ) 을 읽으면됩니다.



1

Github 에서 bing-desktop-wallpaper-changer 를 살펴보세요 . 스크립트는 파이썬으로 작성되었으며 거기에서 답을 찾으시기 바랍니다.

#!/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 기사에서 미래에 나왔습니다 : omgubuntu.co.uk/2016/08/set-bing-wallpaper-linux-automatically
Wtower

@Wtower 알려 주셔서 감사합니다! :)
Utkarsh Gupta

1

마침내 xml 아카이브에서 가장 많은 이미지 (16)를 얻기 위해 Python 3에서 스크립트를 작성하기로 결정했습니다.

이제 아무런 노력없이 이미지를 보관할 수 있습니다. Python 스크립트를 실행하기 만하면됩니다.
이미지를 다음과 같이 년 / 월 폴더로 정리합니다 : 2018> 12 December> 2018-12-06.jpg

이 스크립트는 내 Bing 배경 화면 폴더에 있습니다. (내 그림 폴더에 있음)

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에서만)

주요 PS는 로그온 할 때 실행할 스크립트를 작업 스케줄러에 추가합니다. (또는 매일 / 주간)

기본 작업
프로그램 / 스크립트 생성 : python (또는 환경 경로에없는 경우 C : \ Python34 \ python.exe)
인수 : "path / to / your / script.py"
시작 위치 : "path / to / your"

최신 정보! (2019 년 3 월)
2019-03-10 이미지에 xml 및 rss 형식 모두에서 잘못된 시작일 (20190309)이 지정되었습니다.
대신 Json 형식을 사용합니다. (정확한 날짜를 제공하기 때문에)



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

해당 URL의 file_content를 가져오고 파일에서 이미지를 검색하는 것을 고려할 수 있습니다. 그것이 최선의 방법인지는 모르겠지만 그것은 방법입니다.


0

@Siv의 URL을 사용하여 다음은 업데이트하는 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

Linux 시스템에서 python 및 wget을 사용하여 수행 할 수 있습니다.

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

daily_im.jpg라는 이름으로 로컬 디렉토리에 데일리 빙 배경을 다운로드합니다. 모든 것을 script.py에 넣고 프로그래밍 방식으로 시작할 수 있습니다.


0

2018 년 9 월 27 일 수정 : http://www.istartedsomething.com/bingimages 는 몇 주 동안 404에 응답합니다. 더 이상 존재하지 않을 수 있습니다. :-(

istartedsomething.com의 Bing Image Archive를 사용할 수 있습니다 . 비공식 Bing 이미지 아카이브입니다. 이미지 검색에 도움이되는 수제 엔드 포인트를 사용합니다.

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

id이미지가 게시 된 날짜와 게시 된 국가가 포함 된 문자열입니다. id다음 형식을 준수해야합니다. YYYYMMDD-xx, 여기서 :

  • YYYY 4 자리로 작성된 연도입니다.
  • MM 두 자리로 작성된 월입니다.
  • DD 두 자리 숫자로 작성된 요일입니다.
  • xx국가 표시기입니다. Bing Image Archive는 현재 다음 국가를 지원합니다.
    • au: 호주.
    • br: 브라질.
    • ca: 캐나다.
    • cn: 중국.
    • de: 독일.
    • fr: 프랑스.
    • gb: 영국.
    • jp: 일본.
    • nz: 뉴질랜드.
    • uk: 영국.
    • us: 미국.

정보가 있으면 유용한 JSON 객체를 반환하고, 아무것도 얻지 못하면 false를 반환합니다.

예 1 : 2014 년 5 월 24 일 뉴질랜드에서 게시 된 Bing 일일 이미지 검색

이미지 ID는 20140524-nz요청 된 이미지가 2014 년 5 월 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이미지를 얻을 수 (빙 URL 경로) 필드를.

예 2 : 1998 년 7 월 12 일 프랑스에서 게시 된 Bing 일일 이미지 검색

이미지 ID는 19980712-fr요청 된 이미지가 1998 년 7 월 12 일에 게시되었고 국가 표시기가 다음과 같은 프랑스에서 게시 되었기 때문입니다.fr .

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-frfalse1998 년 7 월 12 일에 프랑스에 대한 Bing 데일리 이미지가 없기 때문에 반환 됩니다 (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.