Bing'in günün fotoğrafını çekmenin bir yolu var mı?


90

Bing arka plan görüntüsünü programlı olarak alabilmemin bir yolu var mı?

Bing'in API'si böyle bir işlevsellik sağlamıyor gibi görünüyor, belki başka bir yolu var?

Yanıtlar:


114

Bence en iyi yol, AJAX çağrıları aracılığıyla bunu kendi başlarına yapma yöntemlerini taklit etmek.

Bu URL'yi çağırırlar ve bilgileri XML serisini kaldırma yoluyla çıkarırlar.

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

mktNitelik besbelli'En-US' farklı bir bölgeye değiştirilebilir, aynı zamanda belirli bir bölgedeki umurumda değil tamamen eğer kapsamından çıkarılmış olabilir.

O Not _1366x768.jpggörüntü adlarına eklenen eki farklı çözünürlüklerde içine (gibi değiştirilebilir gibi görünen _1920x1080.jpgtam HD ve muhtemelen diğerleri için).

İşte 28.09.2013 tarihli verilerin XML biçiminde bir dökümü.

<?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
Bilginize - JSON formatında da alabilirsiniz! bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
JustMaier

2
BTW: Çözünürlük değişebilir, _1920x1200işe yarayacak her şey , yani 1920x1080ve diğerleri.
jmiserez

1
Tamam, öyle görünüyor ki Bing Desktop, bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 , yani &mkt=en-USparçası olmadan kullanıyor . Bu, uygulamayı "English-United States" olarak ayarlamama rağmen.
jmiserez

1
@darksoulsong Elbette. Verileri sizin için temsil eden bir web hizmeti oluşturabilirsiniz. Normalde kullanırdı jsonpama buna izin veriyorlarmış gibi görünmüyor.
Mathias Lykkegaard Lorenzen

1
Pazar yerleri arayan biri varsa ... onu microsoft.com/en-in/locale.aspx
Amar Palsapure

33

BING IMAGE JSON FORMATI

Ben almak için bir yol bulmuş JSON formatını ait Bing Image günün

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

Not

      n=İstediğiniz görüntü sayısı ( Tamsayıları kullanabilirsiniz ),
      mkt=Konumunuz (örnek: en-US )


JSON çıktısı şöyle görünüyor:

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

ve ekle 'http://bing.com'

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


Görünüşe göre Bing, bir seferde toplam yanıt sayısını 8 ile sınırlıyor. 8 n = 8 ile toplanabilir ve ondan önceki 8 tane idx = 8 ve n = 8 ayarlanarak toplanabilir. Bunu genişletmenin bir yolunu görmüyorum.
Kabarık Robot

Neden hatayı veriyor Unexpected token :içindehttps://www.bing.com/HPImageArchive.aspx?format=js&idx=8&n=8&mkt=en-US&callback=jQuery111100034959779751375653_1518009655771&_=1518009655772
Rohit Sharma

10

Microsoft kısa süre önce Windows 7 için Bing duvar kağıtlarına bağlantılar içeren bir RSS Akışı içeren bir Bing Dinamik Teması yayınladı .

Ayrıca , Bing web sitesini yüklemeye ve doğru resim URL'sini tahmin etmeye çalışan bir Python betiği var, ancak deneyimlerime göre, genellikle RSS beslemesinin sunduğundan daha düşük çözünürlüklü bir resimle sonuçlanıyor.


RSS bağlantısı için +1, sanırım sorunun gerçek cevabı bu
David Conde

3
Ne yazık ki tema durduruldu veya Microsoft'un dediği gibi: "Bu tema kullanımdan kaldırıldı". RSS hala orada, ancak artık güncellenmiyor.
karafior


6

Tek satırlık PowerShell (3.0 veya üstü)

irm için bir takma addır Invoke-RestMethod

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

2
Parlak! Benim için mükemmel çalıştı :)
LiamHarries

4

Bing resimlerini de severim ancak uygulamaları resim indirmek için fazla şişirilmiş. Kemancı ile bağlantıyı analiz ettikten sonra bu kodu yazdım. 1920x1200, Bing logosu gömülü olarak gelir, ancak daha düşük çözünürlüklerde bulunmaz.

Pencerelerin ayarladığınız resim klasöründen rastgele resimler göstermesini sağlayabilirsiniz, böylece bunları günlük olarak indirirken size daha fazla rastgele resim gösterecektir. "İmageDir" i tutarsanız, o klasördeki izinleri değiştirmeniz gerekir, aksi takdirde çökecektir, yakalama hataları ile uğraşmadım. Son olarak, duvar kağıdınızı bugünün görüntüsüne ayarlamak istiyorsanız satırların açıklamasını kaldırın veya programı çalıştırmak için bir görev oluşturabilirsiniz, örneğin oturum açtıktan bir dakika sonra.

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

Bu JavaScript, bir div'in arkaplan resmini o günün bing resminin arkaplanına çevirerek 'api ile ne yapılacağını' yanıtlayacaktır.

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
Bunu gerçekten kullanmak istedim, ancak Bing tarafından ayarlanan 'Erişim-Kontrol-İzin Ver-Menşei'nin eksikliğinden kurtulamıyor gibi görünüyor.
addMitt

2

Herhangi birinin olası uygulamaları araması durumunda, indirmek, kaydetmek ve arka planımı Günün Bing Resmi olarak ayarlamak için C #'da küçük bir komut satırı programı yazdım. Kişisel ihtiyaçlarınıza göre değiştirmekten çekinmeyin. 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

Göz at bing-masaüstü-duvar-değiştirici üzerindeki Github . Komut dosyası python ile yazılmıştır ve umarım cevabınızı orada bulursunuz.

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

Ayrıntılı kod için Github projesine bir göz atın


1
İyi iş! Bu aynı zamanda bir omgubuntu makalesinde de ortaya çıktı: omgubuntu.co.uk/2016/08/set-bing-wallpaper-linux-automatically
Wtower

@Wtower Bana bildirdiğiniz için çok teşekkürler! :)
Utkarsh Gupta

2

Basit PowerShell, bir klasöre yerleştirin, Windows Görev Zamanlayıcı'da günlük bir görev oluşturun, komut dosyası görüntüleri çalıştırma klasörüne kaydeder, ardından Masaüstü Arka Planı ayarlarınızda bu klasörü arka plan olarak seçin.

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

Günün Bing görüntüsünü otomatik olarak bir hedef dizine indirmek için Windows'ta zamanlanmış bir görev olarak daha da iyi çalışır. Mükemmel.
2018 saat

2

İşte sadece requestsve kullanarak günün Bing fotoğrafını getirmek için basit bir Python betiği 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))

Bu TurtleTears_EN-US7942276596_1920x1080.jpg, komut dosyasının yürütüldüğü dizine benzer bir dosya yazacaktır . Tabii ki, burada bir sürü şeyi değiştirebilir, ancak işi makul ölçüde kolayca halleder.



1

Size javascript ve php kullanarak günün günlük duvar kağıdını nasıl alacağınızı söyleyeyim,

Bu js kodunu deneyin:

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

Bu komut dosyası, günün günlük görüntüsünü html belgenizin arka planı olarak ayarlar (kullanımınıza göre daha fazla değiştirebilirsiniz).

Bu bağlantı- https://techytricks97.000webhostapp.com , her gün günün bing duvar kağıdını döndürür.

fetch()bugünün bing resmin url alır https://techytricks97.000webhostapp.comve text=>{document.body.style.background="url('"+text+"')";document.body.style.backgroundSize='cover';}arka plan olarak ayarlar.

Not: Microsoft, bing günlük resimlerini sitenizin arka planı olarak kullanmanıza izin vermez, bunu telefon / masaüstü duvar kağıdı olarak veya telif hakkından bahsederek başka şeylerde kullanabilirsiniz.

İşte http : //techytricks97.000webhostapp.com'da kullanılan php kodu :

<?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.comSunucunuzda yalnızca kullanabilir veya kendi php dosyanızı kurabilirsiniz.

Başka bir not: Sadece javascript kullanmadım, çünkü tarayıcının aynı kaynak politikası onu kısıtlıyor, ancak benim belirttiğim gibi php dosyamdan alınmasına izin veriliyorheader('Access-Control-Allow-Origin: *'); php kodumu . Başka bir proxy kullanabilirdim ancak trafiği yüksek (sitem bir günde neredeyse hiç tıklama almıyor).

Başka bir dil kullanıyorsanız, bu dosyayı okumanız yeterlidir ( http://techytricks97.000webhostapp.com )


1

Sonunda xml arşivinden en fazla görüntüyü (16) elde etmek için Python 3'te bir komut dosyası yazmaya karar verdim.

Artık görüntüleri hiç çaba harcamadan arşivleyebiliyorum. Python komut dosyasını çalıştırın.
Görüntüleri Yıl / Ay klasörlerinde şu şekilde organize ediyorum: 2018> 12 Aralık> 2018-12-06.jpg

Bu komut dosyası, Bing Duvar Kağıtları klasörüme gider. (Resimler klasörümde bulunan)

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)

Duvar kağıdını güncellemek için isteğe bağlı ekstra kod: (downloadBingImages (7) altına yerleştirin)

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

örnek çıktı:

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

Not: Yukarıdaki komut dosyası &mkt=en-NZYeni Zelanda resimleri için kullanılıyor.
Diğer ülkeler için pazar kodunu kontrol edebilirsiniz burada .

2009'dan beri farklı ülkeler için arşivlenen tüm görselleri burada da görebilirsiniz .
(yalnızca 1366x768'de)

Major PS, oturum açarken çalıştırılması için komut dosyasını Görev Zamanlayıcı'ya ekler. (veya günlük / haftalık)

Temel Görev
Programı / komut dosyası oluşturun: python (veya env yolunuzda değilse C: \ Python34 \ python.exe)
bağımsız değişkenler: "yol / yol / sizin / script.py"
başlangıç: "yol / için / sizin"

GÜNCELLEME! (Mart 2019)
2019-03-10 görüntüsüne hem xml hem de rss biçiminde yanlış başlangıç ​​tarihi (20190309) verildi.
Bunun yerine Json formatını kullanma. (doğru tarih verdiği için)



1

Tek satırlık Bash (bash, curl ve jq gerekir), cronjob yerleştirmek için yararlıdır:

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

Bu url'nin file_content'ini almayı düşünebilir ve görüntü için dosyada arama yapabilirsiniz. Bunun en iyi yol olduğundan emin değilim, ama bu bir yol.


0

@Siv'deki URL'yi kullanarak, güncellenen bir JavaScript örneğini burada bulabilirsiniz. <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()
}

Bu sınıfın css'si:

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

Tarayıcının aynı kaynak politikası nedeniyle bu benim için çalışmıyor ...
John

0

Bunu bir linux makinesinde python ve wget kullanarak yapabilirsiniz:

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

Yerel dizindeki günlük bing arka planını daily_im.jpg adı altında indirir. Her şeyi bir script.py'ye koyabilir ve programlı olarak başlatabilirsiniz.


0

09/27/2018 DÜZENLEME: http://www.istartedsomething.com/bingimages haftalarca yanıtlıyor. Artık mevcut olmayabilir. :-(

Sen kullanabilirsiniz istartedsomething.com Bing Görüntü Arşivi . Resmi olmayan bir Bing Görüntü Arşividir. Görüntüleri almak için yararlı olan ev yapımı bir uç nokta kullanır:

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

idgörselin yayınlandığı tarihi ve yayınlandığı ülkeyi içeren bir dizedir. idşu biçime uymak zorundadır:, YYYYMMDD-xxburada:

  • YYYY dört basamaklı yazılan yıldır.
  • MM iki basamaklı yazılan aydır.
  • DD iki basamaklı yazılan gündür.
  • xxülke göstergesidir. Bing Image Archive şu anda aşağıdaki ülkeleri desteklemektedir:
    • au: Avustralya.
    • br: Brezilya.
    • ca: Kanada.
    • cn: Çin.
    • de: Deutschland.
    • fr: Fransa.
    • gb: Büyük Britanya.
    • jp: Japonya.
    • nz: Yeni Zelanda.
    • uk: Birleşik Krallık.
    • us: Amerika Birleşik Devletleri.

Bazı bilgilere sahipse yararlı bir JSON nesnesi veya hiçbir şey yoksa yanlış döndürür.

Örnek 1: 24 Mayıs 2014'te Yeni Zelanda'da yayınlanan Bing günlük görüntüsünü geri çekme

20140524-nzGörsel kimliği, talep edilen görselin 24.05.2014 tarihinde yayınlanmış olması ve ülke göstergesi olan Yeni Zelanda'da yayınlanmış olmasıdır nz.

http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz , aşağıdaki JSON parçasını döndürür:

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

Sen kullanabilirsiniz imageurlalanı veya urlgörüntünüzü almak için (Bing URL yolu) alanını.

Örnek 2: 12 Temmuz 1998'de Fransa'da yayınlanan Bing günlük görüntüsünü geri çekme

Görüntü kimliği 19980712-frGörsel istenen görselin 07/12/1998 tarihinde yayınlanmış olması ve ülke göstergesi olan Fransa'da yayınlanmış olmasıdır fr.

http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-frfalse , 07/12/1998 tarihinde Fransa için Bing Günlük Görüntü olmadığı için geri döner (Bing şu anda bile mevcut değildi).


Bağlantılar öldü ve cevabı güncellemek için benzer bir şey bulamadım.
alt geliştirici

0

OP, işletim sistemini belirtmez, bu yüzden burada Linux'ta kullanım için bir tane var. Burada sunulan senaryoyu değiştirdim .

Temel olarak günün görüntüsünün url'sini alır, görüntüyü indirir ve sabit bir dosyaya kaydeder ~/.config/wallpaper.jpgve fehduvar kağıdını ayarlamak için kullanır . Aynı zamanda bir bildirim gönderir.

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.