获取Bing每日壁纸用作首屏大图

Bing 搜索每天都会更换一张精美的图片作为壁纸,除了特殊时候不太好看外(比如春节那几天),没多大问题。移动端还有上每日故事,与图片现配。现在我的博客首屏图片就是Bing每日壁纸,有没有感觉B格满满^_^。本文将介绍如何把Bing每日壁纸和故事扒到自己博客。

获取API接口

首先我们进入Bing首页,会发现自动转到中国版。不过这没关系,中国版更符合国情,速度也比国际版快一些。

通过抓包,可以发现http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1这里可以获取到无水印的图片。

那每日故事呢?通过模拟UA,访问移动版。同样发现了API接口http://cn.bing.com/cnhp/coverstory/。不过这里的图片是有水印的。

接口已经得到了,接下来就是写代码了。因为我既想使用无水印的图片,也想获取每日故事,所以我把两个接口结合起来使用。

代码

<?php/**  * 获取Bing每日壁纸和故事  * @author giuem  */function bingImgFetch(){    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');    curl_setopt($ch, CURLOPT_HTTPHEADER, array(        'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'    ));    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    $re = curl_exec($ch);    curl_close($ch);    $re = json_decode($re,1);//电脑版返回内容    $re2 = json_decode(file_get_contents('http://cn.bing.com/cnhp/coverstory/'),1);//移动版返回内容    return array(    	/* 更改图片尺寸,减小体积 */        'url' => str_replace('1920x1080','1366x768',$re['images'][0]['url']),        /* 结束日期 */        'date' => date('j',strtotime($re['images'][0]['enddate'])),        /* 故事标题 */        'title' => $re2['title'],        /* 内容 */        'd' => $re2['para1']    );}?>

使用示例

如果是wordpress,可以把上面的代码丢进function.php,然后该怎么用就怎么用。

$bingimg= bingImgFetch();echo $bingimg['url'];//输出图片地址echo $bingimg['title'];echo $bingimg['d'];

我的使用方法

因为我用的是静态博客,不能在后端完成这些操作,所以只能通过js获取。同时把代码放在国内访问较快的SAE中,使用Memcache缓存内容。而且我在获取后还把数据储存在localStorage中,这样可以减少请求次数。

为什么要缓存?因为不缓存的话,别人每访问一次你都要获取一次,IP可能会被被Bing ban了。

当然,你也可以缓存到数据库中,这些你都可以结合实际情况修改代码。

PHP in SAE

<?phpheader('Access-Control-Allow-Origin: *');$mmc=memcache_init();if($mmc==false){    /* 如果memcache启动失败,直接获取 */    $bingimg = json_encode(bingImgFetch());}else {    $bingimg = memcache_get($mmc,'bing_url');    $date = memcache_get($mmc,'bing_url_date');    /* 判断日期进行更新 */    if(date('j') != $date || !$bingimg || !$date){        $bingimg = json_encode(bingImgFetch());        /* 写入 */        memcache_set($mmc,"bing_url",$bingimg);        memcache_set($mmc,"bing_url_date",date('j'));    }}echo $bingimg;function bingImgFetch(){    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');    curl_setopt($ch, CURLOPT_HTTPHEADER, array(        'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'    ));    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    $re = curl_exec($ch);    curl_close($ch);    $re = json_decode($re,1);    $re2 = json_decode(file_get_contents('http://cn.bing.com/cnhp/coverstory/'),1);    return array(        'url' => str_replace('1920x1080','1366x768',$re['images'][0]['url']),        'date' => date('j',strtotime($re['images'][0]['enddate'])),        'title' => $re2['title'],        'd' => $re2['para1']    );}

HTML

<section id="hero">  <div class="hero-warp">    <p id="hero-title"></p>    <p id="hero-d"></p>  </div></section>

CSS

html,body {    height: 100%;}#hero {    position: relative;    height: 100%;    background-color: rgba(0,0,0,0.6);    background-position: center center;    background-repeat: no-repeat;    background-size: cover;    background-attachment: fixed;    width: 100%;    text-align: center;    color: #fff;    display: table;}.hero-warp {    display: table-cell;    vertical-align: middle;    text-align: center;}#hero-title {    font-size: 28px;    margin-bottom: 8px;}#hero-d {    width: 80%;    margin: 0 auto;}

JS

如果你使用jQuery,可以把这里的ajax换成$.ajax()实现。

(function() {    //bing pic load    var $data = {        title: localStorage.getItem('bing_title') ? localStorage.getItem('bing_title') : '',        d: localStorage.getItem('bing_d') ? localStorage.getItem('bing_d') : '',        url: localStorage.getItem('bing_url') ? localStorage.getItem('bing_url') : '',        date: localStorage.getItem('bing_date') ? localStorage.getItem('bing_date') : ''    };    if (new Date().getDate() != $data.date || $data.title == '' || $data.d == '' || $data.url == '') {        ajax('GET', '//giuem.sinaapp.com/bing/', function($data) {            localStorage.setItem('bing_title', $data.title);            localStorage.setItem('bing_d', $data.d);            localStorage.setItem('bing_url', $data.url);            localStorage.setItem('bing_date', new Date().getDate());            setHero($data);        });    } else {        setHero($data);    }})();function setHero($data) {    var $hero = document.getElementById('hero');    if (!$hero) {return ;}    if ($data) {        $hero.style.cssText += 'background-image:url(' + $data.url + ')';        document.getElementById('hero-title').innerHTML = $data.title;        document.getElementById('hero-d').innerHTML = $data.d;    }}function ajax(type, url, opts, callback) {    var xhr = new XMLHttpRequest();    if (typeof opts === 'function') {        callback = opts;        opts = null;    }    xhr.open(type, url);    var fd = new FormData();    if (type === 'POST' && opts) {        for (var key in opts) {            fd.append(key, JSON.stringify(opts[key]));        }    }    xhr.onload = function() {        callback(JSON.parse(xhr.response));    };    xhr.send(opts ? fd : null);}

获取Bing每日壁纸用作首屏大图的更多相关文章

  1. 如何获取 bing 每日壁纸(超高清版)

    目录 需求描述 实现方式 简单粗暴 如何下载 如何更高清 排坑指南 初级 优点 给有好奇心的孩子 进阶 接口 自动保存 网站集成 爬虫 需求描述 必应作为一个在壁纸圈做搜索引擎最优秀的站点,其每日壁纸 ...

  2. 【开源小软件 】Bing每日壁纸 让桌面壁纸保持更新

    发布一个开源小软件,Bing每日壁纸. 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 欢迎大家下载使用,点star!有问题请留言或者提issue. 开源地 ...

  3. 【开源小软件 】Bing每日壁纸 V1.2.1

    Bing每日壁纸发布V1.2版本,下载地址Release V1.2.1 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 本次新增国际化支持,以及桌面widg ...

  4. 上班从换一张桌面壁纸开始——开源小工具Bing每日壁纸

    发布一个自用的开源小软件,Bing每日壁纸,使用c# winform开发.该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 功能特性 自动获取Bing最新图片 ...

  5. DzzOffice添加动态壁纸例子-Bing每日壁纸

    Bing每日壁纸介绍:bing网站每天会更新一张不同的精选图片. 此压缩包内的程序,可以自动同步更新cn.bing.com网站每天更新的图片,作为dzzoffice的壁纸使用.实现自动每天更换不同的云 ...

  6. 获取Bing每日图片API接口

    bing图片每日更新,对于这一点感觉挺不错的,如果能够把bing每日图片作为博客背景是不是很不错呢?首先我们进入Bing首页,会发现自动转到中国版.不过这没关系,中国版更符合国情,速度也比国际版快一些 ...

  7. Bing每日壁纸API

    懒人直接出图 https://www.shadow-forum.com/api/bing/bing.php API API地址: https://bing.biturl.top 调用方式: HTTP ...

  8. 获取bing每日图片

    http://global.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US 其中idx表示倒数第几张图片 ...

  9. Shell脚本 curl获取必应每日壁纸(Mac OS)

    Mac上Safari不能下载壁纸,遇到好看的很想用作壁纸.写了一小段脚本用来拉取网页图片. curl: -sS 参数用来取消下载状态显示 grep 首先把含有图片网址的行提取了出来,针对这一行再做se ...

随机推荐

  1. spring data之JDBCTemplate学习笔记

    一.spring 数据访问哲学 1.为避免持久化的逻辑分散在程序的各个组件中,数据访问的功能应到放到一个或多个专注于此的组件中,一般称之为数据访问对象(data access object,DAO). ...

  2. ELK系列(5) - Logstash怎么分割字符串并添加新的字段到Elasticsearch

    问题 有时候我们想要在Logstash里对收集到的日志等信息进行分割,并且将分割后的字符作为新的字符来index到Elasticsearch里.假定需求如下: Logstash收集到的日志字段mess ...

  3. win10系统添加照片查看器(win7版)

    很多人不习惯win10的照片查看器,还是比较怀念win7版本的照片查看器,通过以下两种方法可以在win10图片上点击右键时,"打开方式"中重现"Windows照片查看器& ...

  4. (转)rename命令详解

    rename命令详解: 原文:http://www.cnblogs.com/amosli/p/3491649.html 对文件重命名是常用的操作之一,一般对单个文件的重命名用mv命令,如: amosl ...

  5. datagrid 里面的formatter方法

    A.{field:'station_staus',title:'工位状态',width:250,align:'center',formatter: function(value,row,index){ ...

  6. PHP面试题基础问题

    1.对于大流量的网站,您采用什么样的方法来解决访问量问题? 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问. 第三,禁止外部的盗链. 第四,控制大文件的下载. 第五,使用不同主机分流 ...

  7. spring mvc 注解扫描问题 ,扫描不到controller, use-default-filters="false"

    今天搭了个spring mvc项目,怎么也扫描不到controller,最后发现问题在use-default-filters="false"上面,乱copy出的问题 (默认值是tr ...

  8. GridView相同内容合并单元格

    using System;using System.Data;using System.Configuration;using System.Collections;using System.Web; ...

  9. es6声明对象以及作用域与es5对比

    es6声明变量: let x=1;//声明一个变量 const y=2;//声明一个只读常量,声明时必须赋值,之后值不可修改 es5声明变量: var z=3;//声明一个变量 区别: let不存在变 ...

  10. vue-resource的使用

    之前使用axios post请求不能向后台发送数据,然后使用了vue-resource这个插件 import  Vue from 'vue' import VueResource from 'vue- ...