images - bing tradutor
¿Hay alguna forma de obtener la foto del día de Bing? (18)
¿Hay alguna forma de que pueda obtener la imagen de fondo de Bing mediante programación?
La API de Bing no parece proporcionar esa funcionalidad, ¿tal vez hay otra manera?
JSON FORMAT of BING IMAGE
Encontré una forma de recuperar el formato JSON de la imagen de Bing del día
Nota
n=
El número de imágenes que desea (puede usar números enteros ),
mkt=
Su ubicación (ejemplo: en-US )
{
"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."
}
}
usa la url
de las images[]
y añádelo a ''http://bing.com''
aquí url es "url": "//az//hprichbg//rb//DayGecko_EN-US8730336235_1366x768.jpg"
Aquí hay una secuencia de comandos de Python simple para buscar la foto de Bing del día con solo requests
y 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))
Esto escribirá un archivo como TurtleTears_EN-US7942276596_1920x1080.jpg
en el mismo directorio donde se ejecuta el script. Por supuesto, puede modificar un montón de cosas aquí, pero hace el trabajo con bastante facilidad.
Creo que la mejor manera es imitar la forma en que lo hacen ellos mismos a través de sus llamadas AJAX.
Llaman a esta URL y extraen la información a través de la deserialización 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
El atributo mkt
obviamente se puede cambiar a una región diferente a''en-US '', pero también se puede excluir por completo si no se preocupa por una región específica.
Tenga en cuenta que el sufijo _1366x768.jpg
que se agrega a los nombres de las imágenes parece ser modificable en diferentes resoluciones (como _1920x1080.jpg
para HD completo y posiblemente otros).
Aquí hay un volcado de datos al 28/09/2013, en formato 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&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&cp=2.794725~37.335197&lvl=7&dir=0&sty=b&q=Lake%20Turkana%2C%20Kenya&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&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&FORM=hphot3#view=detail&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&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>
Déjame decirte cómo empacar el fondo de pantalla diario del día con javascript y php,
Pruebe este código 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>
Este script establece una imagen diaria del día como fondo de su documento html (puede modificarlo según su uso).
Este enlace- https://techytricks97.000webhostapp.com devuelve el fondo de pantalla de bing del día, todos los días.
fetch()
obtiene la url de la imagen del bing de hoy de https://techytricks97.000webhostapp.com
y text=>{document.body.style.background="url(''"+text+"'')";document.body.style.backgroundSize=''cover'';}
establece como fondo.
Nota: Microsoft no permite utilizar las imágenes de bing daily como fondo de su sitio, puede usarlo como fondo de pantalla de teléfono / escritorio, o en otras cosas mencionando derechos de autor.
Aquí está el código php que se utiliza en 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);
?>
Puede usar http://techytricks97.000webhostapp.com
solamente o puede configurar su propio archivo php en su servidor.
Otra nota: no usé javascript solamente, porque la misma política de origen del navegador lo restringe, pero la búsqueda desde mi archivo php está permitida ya que he puesto el header(''Access-Control-Allow-Origin: *'');
en mi código php. Pude haber usado otros proxies pero tienen mucho tráfico (mi sitio casi no recibe ningún clic en un día).
Si está utilizando cualquier otro idioma, solo tiene que leer este archivo ( http://techytricks97.000webhostapp.com )
Echa un vistazo a bing-desktop-wallpaper-changer en Github . El guión ha sido escrito en python y espero que encuentres tu respuesta allí.
#!/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)
Eche un vistazo al proyecto Github para obtener un código detallado
En caso de que alguien esté buscando posibles implementaciones, escribí un pequeño programa de línea de comandos en C # para descargar, guardar y establecer mi fondo como la Imagen de Bing del día. Siéntete libre de modificarlo para tus necesidades personales. 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);
}
}
}
Estaba teniendo problemas para obtener una fuente RSS adecuada que podría usar con el Conmutador de fondo de John hasta que encontré este feed feed de feed que parece funcionar bastante bien: http://feeds.feedburner.com/bingimages
Este JavaScript responderá al ''qué hacer con la API'' al cambiar la imagen de fondo de un div al fondo de la imagen bing del día actual.
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%";
}
}
}
Llego tarde a la fiesta, pero en caso de que alguien necesite una implementación de PHP: he escrito una clase simple que maneja el procedimiento:
Microsoft ha publicado recientemente Bing Dynamic Theme para Windows 7, que contiene una fuente RSS con enlaces a fondos de pantalla de Bing .
También hay una secuencia de comandos de Python que intenta cargar el sitio web de Bing y adivinar la URL correcta de la imagen, pero según mi experiencia, por lo general, da como resultado una imagen de menor resolución que las que ofrece la fuente RSS.
Puede considerar obtener el archivo_contenido de esa url y buscar el archivo para la imagen. No estoy seguro de que sea la mejor manera, pero es una forma.
Puede usar el Bing Image Archive de istartedsomething.com . Es un archivo de imagen de Bing no oficial. Utiliza un punto final hecho en casa que es útil para recuperar imágenes:
GET /bingimages/getimage.php?id=<image_id>
id
es una cadena que contiene la fecha en que se publicó la imagen y el país donde se publicó. id
debe cumplir con el siguiente formato: YYYYMMDD-xx
, donde:
-
YYYY
es el año, escrito con cuatro dígitos. -
MM
es el mes, escrito con dos dígitos. -
DD
es el día, escrito con dos dígitos. -
xx
es el indicador de país. Bing Image Archive actualmente es compatible con los siguientes países:-
au
: Australia. -
br
: Brasil. -
ca
: Canadá. -
cn
: China. -
de
: Deutschland. -
fr
: Francia. -
gb
: Gran Bretaña. -
jp
: Japón. -
nz
: Nueva Zelanda. -
uk
: Reino Unido. -
us
: Estados Unidos de América.
-
Devuelve un objeto JSON útil si tiene alguna información o falso si no tiene nada.
Ejemplo 1: Recuperación de la imagen diaria de Bing publicada el 24 de mayo de 2014 en Nueva Zelanda
El ID de imagen es 20140524-nz
porque la imagen solicitada se publicó el 24/05/2014 y se publicó en Nueva Zelanda, cuyo indicador de país es nz
.
http://www.istartedsomething.com/bingimages/getimage.php?id=20140524-nz devuelve la siguiente pieza de 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":[]
}
Puede usar el campo imageurl
o el campo url
(ruta URL Bing) para obtener su imagen.
Ejemplo 2: Recuperación de la imagen diaria de Bing publicada el 12 de julio de 1998 en Francia
El ID de la imagen es 19980712-fr
porque la imagen solicitada se publicó el 12/07/1998 y se publicó en Francia, cuyo indicador de país es fr
.
http://www.istartedsomething.com/bingimages/getimage.php?id=19980712-fr devuelve false
porque no hay Bing Daily Image para Francia el 12/07/1998 (Bing ni siquiera existía en este momento).
Puedes hacerlo usando python y wget en una máquina 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
Descarga el fondo del bing diario en el directorio local bajo el nombre daily_im.jpg. Puede poner todo en un script.py y ejecutarlo programáticamente.
Simple PowerShell, coloque en una carpeta, cree una tarea diaria en el Programador de tareas de Windows, la secuencia de comandos guarda las imágenes en su carpeta de ejecución, luego en su Configuración de fondo de escritorio elija esa carpeta como fondo.
[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)"
También me gustan las imágenes de Bing, pero su aplicación está demasiado hinchada para descargar imágenes. Después de analizar la conexión con el violinista, escribí este código. El 1920x1200 viene con el logotipo de Bing incrustado, pero las resoluciones más bajas no lo tienen.
Puede hacer que Windows le muestre imágenes aleatorias de la carpeta de imágenes que configuró, de modo que al descargarlas a diario, le mostrará más imágenes aleatorias. Si conserva el "imageDir", necesita cambiar los permisos en esa carpeta o se bloqueará, no me molesté en detectar errores. Por último, desactive las líneas si desea configurar su fondo de pantalla a la imagen de hoy o puede crear una tarea para ejecutar el programa, digamos un minuto después del inicio de sesión.
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();
}
}
}
}
Un trazador de líneas PowerShell (3.0 o superior)
irm
es un alias para Invoke-RestMethod
irm "bing.com$((irm "bing.com/HPImageArchive.aspx?format=js&mkt=en-IN&n=1").images[0].url)" -OutFile bing.jpg
Usando la URL de @Siv, aquí hay un ejemplo de JavaScript que actualiza <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()
}
El CSS para esta clase es:
.bgimg {
height: 100%;
position: relative;
opacity: 0.95;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Vi que muchas personas también están pidiendo el nuevo enlace RSS, simplemente cambie el parámetro de formato en la URL a "rss".
RSS : http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US