获取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. 用js实现倒计时功能

    源码如下: 原理很简单,看注释吧 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  2. POJ1031 Fence

    题目来源:http://poj.org/problem?id=1031 题目大意: 有一个光源位于(0,0)处,一个多边形的围墙.围墙是“全黑”的,不透光也不反射光.距光源r处的光强度为I0=k/r, ...

  3. js 中的 for 循环。。。

    for (var i in data){ data[i] } 和for (var i=0;i< data.length; i++){ data[i] } 第一种可能会有bug...

  4. n个点的基环树数量

    某裴姓蒟蒻上午提了一个小问题(rt)..然后他升华了..升华之前感受到了神犇的力量... 方法一: g[n][k]表示n个点,k条边的无向图(不一定连通) f[n][k]表示表示n个点,k条边的无向连 ...

  5. spring boot test MockBean

    使用spring boot , MockBean @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) p ...

  6. strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr

    1.strcpy #include<stdio.h> #include<assert.h> char *mystrcpy(char *dest, const char *src ...

  7. 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!

    在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,ya ...

  8. Windows安全认证是如何进行的?[NTLM篇]

    <上篇>中我们介绍Kerberos认证的整个流程.在允许的环境下,Kerberos是首选的认证方式.在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager ...

  9. Ashx增删改查_动软

    1.首先展示列表 ashx 讲究的是个替换 这些就是属于ashx麻烦的地方 public void ProcessRequest(HttpContext context) { context.Resp ...

  10. iQuery stop()

    jQuery stop() 方法 jQuery stop() 方法用于停止动画或效果,在它们完成之前. stop() 方法适用于所有 jQuery 效果函数,包括滑动.淡入淡出和自定义动画. 语法 $ ...