### [获取Bing每日壁纸用作首屏大图](https://pmself.com/article/1810) **Published:** 2022-12-14T09:45:56 **Author:** eganvi **Excerpt:** Bing 搜索每天都会更换一张精美的图片作为壁纸,除了特殊时候不太好看外(比如春节那几天),没多大问题。移动端… Bing 搜索每天都会更换一张精美的图片作为壁纸,除了特殊时候不太好看外(比如春节那几天),没多大问题。移动端还有上每日故事,与图片现配。现在我的博客首屏图片就是 Bing 每日壁纸,有没有感觉 B 格满满^\_^。本文将介绍如何把 Bing 每日壁纸和故事扒到自己博客。 ## 获取 API 接口 首先我们进入[Bing 首页](http://bing.com/),会发现自动转到中国版。不过这没关系,中国版更符合国情,速度也比国际版快一些。 通过抓包,可以发现`http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1`这里可以获取到无水印的图片。 那每日故事呢?通过模拟 UA,访问移动版。同样发现了 API 接口`http://cn.bing.com/cnhp/coverstory/`。不过这里的图片是有水印的。 接口已经得到了,接下来就是写代码了。因为我既想使用无水印的图片,也想获取每日故事,所以我把两个接口结合起来使用。 ## 代码 ``` 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 ``` str_replace('1920x1080','1366x768',$re['images'][0]['url']), 'date' => date('j',strtotime($re['images'][0]['enddate'])), 'title' => $re2['title'], 'd' => $re2['para1'] ); } ``` ### HTML ```

``` ### 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); } ``` **Tags:** Bing每日壁纸 **Categories:** 插件&API ---