Wordpress非插件调用搜狐[新浪]微博(解决延时和时区问题)


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

其实思路是这样的,只要微博提供了RSS输出,我们就可以利用wordpress自带的feed抓取函数来实现功能,但是貌似目前只有搜狐一家提供了RSS输出(嘿嘿,我为了方便就直接使用搜狐围脖了 :lol: ),对于使用新浪的朋友,可以去这里下载个小工具,通过这个小工具可以实现新浪微博的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!

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

[cc lang="php"]
require_once (ABSPATH . WPINC . '/class-feed.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 "

  • ";
    echo ''.$item->get_title().'
    '.
    $item->get_date('Y-m-j G:i ').'
    ';
    echo "
  • ";
    }
    ?>
    [/cc]

    之前我参考了很多其他资料发现设置以后有两个很明显的缺陷,首先就是时间显示不对,这应该是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协议进行授权

    转载:转载请注明原文链接 - Wordpress非插件调用搜狐[新浪]微博(解决延时和时区问题)


    雅布叔叔的四季糖果屋,那个洋溢着阳光味道和快乐音符的时光铺子啊,珍藏着最美的童话~~