必应首页,封面的图片很好看,并且每天都更新,怎么Bing的图片展示在自己的首页呢?Let’s go!
打开必应首页,F12打开,在页面加载完毕后,ajax会去响应的接口获取当日的图片以及图片的描述信息。
复制这个接口连接:
http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
接口地址中有三个主要参数,format、idx、n,format是输出格式,默认是xml,js就是json,idx,是返回距离今天之前的日期,0就是今天,1就是昨天,依次类推,n,不过n过大就不行了,是获取几张图片,1就只有今天的1张,2是今天加昨天的,依次类推。
现在我们通过nodejs的http模块去访问这个接口,然后将图片输出在自己的页面上,正好也可以当作一个小练习。
bingimg.js:
var HTTP = require('http');
var URL = require('url');
HTTP.createServer(onRequest).listen(80);
console.log('server start on port 80!');
function getBingImg(format,idx,n,success,error){
var url = 'http://cn.bing.com/HPImageArchive.aspx?format=' + format + '&idx=' + idx + '&n=' + n;
var buffer = [];
HTTP.get(url,function(back){
back.on('data',function(data){//on 看起来好像很熟悉的样子,jquery中,
//$dom.on('click',function(){});,这里很好地解释了node是基于事件驱动的(个人理解,不晓得错没得,望大神指点一二。)
//node把数据分成一小块一小块,当在数据接收完成之前都会出发data这个事件,函数返回的是数据
buffer.push(data);//这儿用数组装起来。
}).on('end',function(){//当数据接收完毕之后触发
success(buffer.toString());
}).on('error', function(e) {//出错后触发
error();
});
});
}
function onRequest(req,res){
var callback = getParameter(req.url,'callback');
res.writeHead(200, {"Content-Type": "application/json"});
var cfg = {format : 'js',idx : '1',n : '1',error : function(e){
res.end('{error:1,msg:"can not get bing img!"}');
},success:function(data){
if(callback){
res.writeHead(200, {"Content-Type": "text/html"});
// var str = '<script>function ' + callback + '(data){console.log(data);}</script>';
res.end(callback + '(' + data + ')');//jsonp 用于跨域
return true;
}
res.end(data);
}};
getBingImg(cfg.format,cfg.idx,cfg.n,cfg.success,cfg.error);
}
function getParameter(url,key){
var reg = new RegExp(key + '=([^&]*)','gi');
var arr = reg.exec(url);
return arr ? arr[1] : '';
}
在不跨域的情况下,直接访问,可以看到是标准的JSON格式(这儿用了chrome插件,美化json,json viewer)
有时会在其他站访问这个接口,此时需要跨域访问,具体代码如下:
jsonp.html
<!DOCTYPE html>
<html>
<head>
<meta chatset="utf-8">
<title>获取Bing图片</title>
</head>
<body>
<button id="btn">获取Bing图片</button>
<br/>
<img src="" width="900" id="img">
<script type="text/javascript">
var img = document.getElementById('img');
var btn = document.getElementById('btn');
btn.onclick = function(){
var script = document.createElement('script');
script.src = 'http://localhost:80?callback=show';
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
}
function show(data){
img.src = data.images[0].url;
}
</script>
</body>
</html>
点击按钮,即可获取图片:
OVER.