用PHP实现 腾讯+新浪+Twitter 三款微博同时发布展现

今天在首页完成了腾讯微博+新浪微博+twitter三款微博的实时更新,实现了3款微博能同时聚集在一起,并即时更新内容。使用了sqlite轻型数据库保存同步的数据,并用xml远程调用接口,涉及的技术下文会讲到,首先来看一下效果(点击进入预览):

在本文之前我已经对各个微博的数据调用做了介绍,本文将讨论如何将3个不同微博的api数据整合到一起,并能实时更新显示:

原理是这样的:

1.首先要把获取到的微博消息汇总并保存起来,这里我用到了轻型数据库sqlite,基本语法和mysql相似,且不需要复杂的配置。

2.接下来用php来把sqlite中的数据读取出来,并格式成xml格式,方便远程传输。(这里要说明一下,因为我服务器本身不可访问Twitter数据,所以用了国外的一台可以访问Twitter的服务器作为微博数据汇总)

3.负责显示微博汇总信息的页面,也就是http://malu.me/ ,解析出远程的xml,并输出到页面。

4.为了实时更新,并且不影响页面打开速度,我用了另外一个php页面来专门进行xml更新,并把获取到的数据缓存到本地,然后用计划任务定时去访问这个php页面,模拟实时更新的效果。

根据此原理,开发思路就清晰了,下面来看一下Twitter是如何进行数据获取并写入sqlite的:

//写入sqlite
function my_sqlite($type,$content,$time){

	$db = sqlite_open("php_weibo.db",0666,$sqlite_error);

        if(trim($type) != "" && trim($content) != "" && trim($time) != ""){

	  	$sql="INSERT INTO test (id,type, content, time) VALUES (NULL,'$type','$content',$time)";
  		$result = sqlite_exec($db,$sql);

        if($result){
            echo "据添加成功!ok!";
        }else{
            echo '据添加不成功!error!';
        }
  	}
}
//把数据库中时间统一调用到数组中
$db = sqlite_open("php_weibo.db");
$sql = "select * from test";
$query=sqlite_query($db,$sql);
while($row = sqlite_fetch_array($query)){
	$time_arr[] = $row[time];
}
$type = "twitter";
if($arr){
        foreach ($arr as $tweet) {
                $datetime = $tweet[created_at];
                $time = strtotime($datetime);
                $content = str_replace("'","''",$tweet[text]);
		if (in_array((string)$time, $time_arr, true)) {
			echo "---------未更新|不写入----------";
		}else{
			echo "$type | $content | $time ";
		my_sqlite($type,$content,$time);
		}
 	}
}else{
echo "twitter 数据获取失败!";
}

以上就是Twitter微博写入sqlite的源码,腾讯微博、新浪微博与之类似。一并写入sqlite数据库php_weibo.db中。

然后用另外一个php读取sqlite的值,并格式成xml:

//查询sqlite
$db = sqlite_open("php_weibo.db");
$sql = "select * from test order by time desc LIMIT 0 , 20";
$query=sqlite_query($db,$sql);

//建立xml
while($row = sqlite_fetch_array($query)){
	  echo '<weibo type="'.$row[type].'" time="'.$row[time].'"><![CDATA['.$row[content].']]></weibo>';
}

在输出数据时,我只调用了后20条数据,也就是显示最近更新的20条微博,这样就不用考虑哪一种微博显示出来,从而能实现3种微博混搭显示(像犀利哥)。

下面只要解析这xml就能显示了,为了保证xml文件的正确性,我写了一段代码进行判断,如果有故障(xml文件不完整)则发邮件通知我:

$xml = new DOMDocument();
$xml->load('weibolist.xml');
foreach($xml->getElementsByTagName('weibo') as $weibo){
	$content = $weibo->firstChild->nodeValue;
	$type = $weibo->getAttribute('type');
	$time = $weibo->getAttribute('time');
	if($content){
		echo "-----------------本地XML数据 一切正常!------------------";
	}else{
		echo "---+----+---------本地XML文件有错误---------+----+---";
		if(@mail("malu@malu.me","我的首页微博的xml文件出现故障","这封邮件是马路的监控系统发出的,请不要回复.请检查http://malu.me/网站首页")){
			echo "successful send mail to malu.me!";
		}else{
			echo "error,no mail()";
		}
	}
}

三款微博同时发布显示就介绍到这里,由于能力有限,文章写的还不够完善,如果有疑问或有兴趣的读者欢迎在陋室博客里留言与我讨论。

此条目是由 malu8 发表在 未分类 分类目录的。将固定链接加入收藏夹。

评论已关闭。