最近一直琢磨着在网站的侧边栏搞个微博展示,这样也丰富了网站的内容,貌似现在最火爆的是新浪微博,另外其他很多门户网站都也开始提供微博服务,但是要把微博搬到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!
接下来我们就可以来调用微博了,我建议大家把微博挂在网站的边栏,这样比较美观,直接在侧边栏添加个微件,手动加入以下代码(以我的搜狐账号为例):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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;
var $lifetime = 43200; //Default lifetime in cache of 12 hours
原来默认feed更新获频率是 间隔24小时!所以我们要修改一下,从根源修改是很不合理的,我只需要在某次使用中达到实时同步效果即可,并不要整个博客处处都这样频繁的缓存,因此,考虑作为个案单独修改。所以在上述代码中将缓存时间设置为20分钟,这样就完美解决了更新同步的问题。
但是要注意的是必须在网站根目录下建立文件夹:cache,权限为777否则会报错!
好了,到此为止微博的内容已经可以很好的展示在自己的网站上了!
声明: 本文采用 BY-NC-SA 协议进行授权 | Alex's Station
转载请注明转自《WordPress非插件调用搜狐[新浪]微博(解决延时和时区问题)》
我把你上面提供的代码贴在WP里作为一个Widget使用,但呈现出来并不是微博内容而是源代码,请问是为什么?在文件最开始加了<?php也是这样的
本人不懂,求帮助
@请教
你好,但是在侧边栏调用的时候如果用wp自带的文本是没用的,只能实现HTML代码,但会屏蔽php代码,我用的是”Magic ADs”这个插件来实现的,你可以搜索一下这个插件,这个插件的原始用途是用来在侧边栏放置google广告的,可以实现php代码,如果你发现了更好的方法请不吝分享~
ALEX 你好
我用月光介绍的方法 在WordPress里插入了Sina微博
确实出现了你说的时间显示错误的问题
我将这行代码date_default_timezone_set(‘PRC’) 复制在适合sina用户的那段代码里 但是时间显示仍然是错误的 请问如何解决呢
@时间差
你好,这个函数并不是WordPress的内置函数,而是PHP本身具备的函数,所以无论在什么情况下,总是可以生效,所以你可以检查一下是否你的博客程序将PHP标记过滤掉了,希望回答对你有用,欢迎交流