最近一直琢磨着在网站的侧边栏搞个微博展示,这样也丰富了网站的内容,貌似现在最火爆的是新浪微博,另外其他很多门户网站都也开始提供微博服务,但是要把微博搬到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-includes\class-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否则会报错!
好了,到此为止微博的内容已经可以很好的展示在自己的网站上了!
13 comments
想找一个不用代码调用新浪评论并保留原来的评论框的代码
就是看没有,所以才特地加了个首页,呵呵
必须的,呵呵,顺便问一下,你的站换不换首页链接的?
@W3Cshare: 这个问题问的好啊,我的站没有首页链接,绝对干净。
@Alex Gao: 对了,首页不行,内页可以么?
博主你好,可以把sinarss.php这个文件分享一份给我吗?老是出错,QQ:842956042,邮箱:842956042@qq.com,不胜感激啊!
@W3Cshare: 新浪不支持RSS输出,以前的RSS生成工具估计已经失效了,还是用新浪官方的博客挂件靠谱,我现在就是用的挂件
@Alex Gao: 额。。。我已经解决了,我的微博客已经可以同步新浪微博了,还是谢谢你啊
@W3Cshare: 用不用回复这么快 :arrow:
@时间差
你好,这个函数并不是WordPress的内置函数,而是PHP本身具备的函数,所以无论在什么情况下,总是可以生效,所以你可以检查一下是否你的博客程序将PHP标记过滤掉了,希望回答对你有用,欢迎交流 :razz:
ALEX 你好
我用月光介绍的方法 在WordPress里插入了Sina微博
确实出现了你说的时间显示错误的问题
我将这行代码date_default_timezone_set('PRC') 复制在适合sina用户的那段代码里 但是时间显示仍然是错误的 请问如何解决呢
@请教
你好,但是在侧边栏调用的时候如果用wp自带的文本是没用的,只能实现HTML代码,但会屏蔽php代码,我用的是"Magic ADs"这个插件来实现的,你可以搜索一下这个插件,这个插件的原始用途是用来在侧边栏放置google广告的,可以实现php代码,如果你发现了更好的方法请不吝分享~
我把你上面提供的代码贴在WP里作为一个Widget使用,但呈现出来并不是微博内容而是源代码,请问是为什么?在文件最开始加了<?php也是这样的
本人不懂,求帮助