AJax技术

小技巧:利用ajax无需授权抓取新浪微博

字号+ 作者:H5之家 来源:H5之家 2015-11-16 11:53 我要评论( )

昨天尝试了利用php和ajax结合,同时利用weibo.cn可直接阅读的特点,完成了利用ajax无需授权就可以抓取新浪微博最新微博的方法,特地出来献宝。一、创建一个抓取

目录:

昨天尝试了利用php和ajax结合,同时利用weibo.cn可直接阅读的特点,完成了利用ajax无需授权就可以抓取新浪微博最新微博的方法,特地出来献宝。

一、创建一个抓取页面内容的php文件

由于jquery的ajax是不能跨域发送数据的,因此,不能直接抓取weibo.cn上的内容。我们利用php,将weibo.cn上某人的微博直接抓取回了来。php代码如下:

<?php
$handle = fopen($_GET['url'],'rb');
$contents = '';
do{
$data = fread($handle,1024);
if(strlen($data) == 0) {
break;
}
$contents .= $data;
}while(true);
fclose($handle);
$contents = substr($contents,38);
echo $contents;

我是用了一个url参数来接收不同的weibo.cn微博地址,实现该php文件的可重复利用。利用上面的这段代码,即可将weibo.cn上某人的微博页面抓取回来了。

当然,抓取页面内容的php方法还有很多,你选择一种即可。不过要注意,weibo.cn上的页面开头以<xml>开始,我们抓回来之后,将它去掉,如上代码中$contents = substr($contents,38);

二、用ajax获取抓回来的页面内容,呈现出最新的微博

下面的jquery中有些参数是全局参数,如$template_url等,你需要自己辨认,只要找出代码中的关键性思路即可,有疑问请在文章后面留言。

function ajax_weibo($box){
var $this = $($box);
var $weibo_url = $($box).attr('date-weibo-url');
var $url = $template_url + '/plugins/weibo_ajax.php?url=' + $weibo_url + '&wpnonce=' + $weibo_nonce;
if($weibo_url != undefined)
$.ajax({
type : 'GET',
url : $url,
dataType : 'html',
beforeSend : function(){
$this.append('<div>加载微博中...</div>');
},
success : function(data){
$weibo_content = $(data).find('div').eq(3).text();
if($weibo_content.indexOf('转发了') >= 0)$weibo_content += '<br />' + $(data).find('div').eq(4).text();
$weibo_content = $weibo_content.replace('+1','<br /><br />');
$weibo_content = $weibo_content.replace('收藏','');
$weibo_url = $weibo_url.replace('weibo.cn','weibo.com');
$this.find('.weibo').html('<p>微博:<a href="' + $weibo_url + '" target="_blank">' + $weibo_url + '</a></p>' + '<p>' + $weibo_content + '</p>');
},
error : function(XMLHttpRequest, textStatus, errorThrown){
//alert(XMLHttpRequest.readyState);
}
});
}
ajax_weibo('#header-boy');
ajax_weibo('#header-girl');
$('#header-boy,#header-girl').hover(function(){
var $this = $(this);
$timer = setTimeout(function(){
$this.find('.weibo').fadeIn();
},300);
},function(){
clearTimeout($timer);
$(this).find('.weibo').fadeOut();
});

我将ajax装在function ajax_weibo中,传递一个参数$box,即某个容器,如#boy_weibo,然后给这个容器一个date-weibo-url的属性,记录要抓取的微博的weibo.cn地址。该函数实现了通过我们创建的php文件,抓回微博内容,并将第一条微博放在一个.weibo的div中,我们可以利用css对它进行样式控制。

我们可以在页面执行完之后,直接执行ajax,也可以在鼠标移动过程中调用ajax_weibo函数。后面的hover动作就不多做解释,你需要哦有一定的jquery基础才能灵活运用此方法。具体效果请看努努比,由于我喜欢经常折腾主题,可能主题又变了,有疑问可在本文后留言。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JQuery实现Ajax加载图片的方法

    JQuery实现Ajax加载图片的方法

    2016-02-24 17:01

  • 判断用户是不是为ajax请求

    判断用户是不是为ajax请求

    2016-02-24 17:00

  • Ajax与WEB开发 by alixixi.com

    Ajax与WEB开发 by alixixi.com

    2016-02-11 11:02

  • jQuery.ajax()的相关参数及使用

    jQuery.ajax()的相关参数及使用

    2016-02-08 16:00

网友点评