最近一直琢磨着在网站的侧边栏搞个微博展示,这样也丰富了网站的内容,貌似现在最火爆的是新浪微博,另外其他很多门户网站都也开始提供微博服务,但是要把微博搬到wordpress上来显示显然还是要下点功夫的,新浪已经提供了Flash和HTML两种代码来嵌入到自己的网站里,但很显然用着很别扭,自己不能动手修改样式,而且还打着新浪的广告,看着很不舒服,经过一番研究,终于找到一套完美的解决方法!现在和大家分享!

其实思路是这样的,只要微博提供了RSS输出,我们就可以利用wordpress自带的feed抓取函数来实现功能,但是貌似目前只有搜狐一家提供了RSS输出(嘿嘿,我为了方便就直接使用搜狐围脖了 ),对于使用新浪的朋友,可以去这里下载个小工具,通过这个小工具可以实现新浪微博的RSS输出。这个新浪微博RSS的原理很简单,就是当用户访问的时候,抓取新浪微博的用户页面,将里面的信息进行过滤,按照标准RSS的格式生成一个RSS Feed,因此这个程序目前支持新浪微博的认证用户和草根用户,但两者调用方法略有不同。

新浪认证用户的调用方法是:

先找到你访问新浪微博的地址,例如 http://t.sina.com.cn/williamlong ,然后将 t.sina.com.cn 后面的地址取出,做为参数调用: sinarss.php?username=williamlong ,其中username里的数据是你个人的t.sina.com.cn后面的那个地址。

新浪草根用户的调用方法是:

先找到你访问新浪微博的ID号,具体方法是,登录新浪微博,点用户的关注、粉丝等页面,会看到地址栏中间有一串数字,取出中间那个数字。然后将这个数字做为id参数调用一个地址,调用地址类似: sinarss2.php?id=1494759712 ,其中id为草根用户的新浪微博id号。

这样新浪微博的用户就拥有了一个RSS了,对于网易的用户只能抱歉了,暂时还没有相关工具,而搜狐用户最幸福,什么都不用做直接可以利用搜狐提供的RSS!

接下来我们就可以来调用微博了,我建议大家把微博挂在网站的边栏,这样比较美观,直接在侧边栏添加个微件,手动加入以下代码(以我的搜狐账号为例):

require_once (ABSPATH . WPINC . '/class-feed.php');
<?php
date_default_timezone_set('PRC');//设置显示时区为中国,很多朋友的时间显示错误就是因为没有加上这个定义!
$feed = new SimplePie();
$feed->set_feed_url('http://t.sohu.com/rss/17171419');//微博的 feed地址
$feed->set_file_class('WP_SimplePie_File');
$feed->set_cache_duration(600); //设置缓存时间(1200秒)即20分钟
$feed->init();
$feed->handle_content_type();
$items = $feed->get_items(0,5);//输出5条微博内容
foreach($items as $item) {
echo "<li>";
echo '<a target="_blank" href="'.$item->get_link().'">'.$item->get_title().'</a><br />'.
$item->get_date('Y-m-j G:i ').'<br />';
echo "</li>";
}
?>

之前我参考了很多其他资料发现设置以后有两个很明显的缺陷,首先就是时间显示不对,这应该是wordpress的一个缺陷了,默认始终是以UTC+0时区显示,即使在wp里设置时区为上海也没用,所以只能在代码里强制设置时区。另外一个问题就是微博更新了好多条,但网站上一点也没变,后来终于发现了问题,wordpress 的 fetch_feed() 函数,WP_Feed_Cache_Transient 类中有定义。

路径:wp-includesclass-feed.php

class WP_Feed_Cache_Transient {
var $name;
var $mod_name;
<span style="color: red;"> var $lifetime = 43200; //Default lifetime in cache of 12 hours</span>

原来默认feed更新获频率是 间隔24小时!所以我们要修改一下,从根源修改是很不合理的,我只需要在某次使用中达到实时同步效果即可,并不要整个博客处处都这样频繁的缓存,因此,考虑作为个案单独修改。所以在上述代码中将缓存时间设置为20分钟,这样就完美解决了更新同步的问题。

但是要注意的是必须在网站根目录下建立文件夹:cache,权限为777否则会报错!

好了,到此为止微博的内容已经可以很好的展示在自己的网站上了!

Last modification:March 6th, 2020 at 09:29 am