Loading... 最近一直琢磨着在网站的侧边栏搞个微博展示,这样也丰富了网站的内容,貌似现在最火爆的是新浪微博,另外其他很多门户网站都也开始提供微博服务,但是要把微博搬到wordpress上来显示显然还是要下点功夫的,新浪已经提供了Flash和HTML两种代码来嵌入到自己的网站里,但很显然用着很别扭,自己不能动手修改样式,而且还打着新浪的广告,看着很不舒服,经过一番研究,终于找到一套完美的解决方法!现在和大家分享! <!--more--> 其实思路是这样的,只要微博提供了RSS输出,我们就可以利用wordpress自带的feed抓取函数来实现功能,但是貌似目前只有搜狐一家提供了RSS输出(嘿嘿,我为了方便就直接使用搜狐围脖了 ),对于使用新浪的朋友,可以去<span class="external-link"><a class="no-external-link" href="http://code.google.com/p/rss-feed/source/browse/#svn/trunk" target="_blank">这里<i data-feather='external-link'></i></a></span>下载个小工具,通过这个小工具可以实现新浪微博的RSS输出。这个新浪微博RSS的原理很简单,就是当用户访问的时候,抓取新浪微博的用户页面,将里面的信息进行过滤,按照标准RSS的格式生成一个RSS Feed,因此这个程序目前支持新浪微博的认证用户和草根用户,但两者调用方法略有不同。 <strong>新浪认证用户的调用方法是:</strong> <blockquote>先找到你访问新浪微博的地址,例如 http://t.sina.com.cn/williamlong ,然后将 t.sina.com.cn 后面的地址取出,做为参数调用: sinarss.php?username=williamlong ,其中username里的数据是你个人的t.sina.com.cn后面的那个地址。</blockquote> <strong>新浪草根用户的调用方法是:</strong> <blockquote>先找到你访问新浪微博的ID号,具体方法是,登录新浪微博,点用户的关注、粉丝等页面,会看到地址栏中间有一串数字,取出中间那个数字。然后将这个数字做为id参数调用一个地址,调用地址类似: sinarss2.php?id=1494759712 ,其中id为草根用户的新浪微博id号。</blockquote> 这样新浪微博的用户就拥有了一个RSS了,对于网易的用户只能抱歉了,暂时还没有相关工具,而搜狐用户最幸福,什么都不用做直接可以利用搜狐提供的RSS! 接下来我们就可以来调用微博了,我建议大家把微博挂在网站的边栏,这样比较美观,直接在侧边栏添加个微件,手动加入以下代码(以我的搜狐账号为例): ```php 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 ```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分钟,这样就完美解决了更新同步的问题。 但是要注意的是<font color="red">必须</font>在网站根目录下建立文件夹:<font color="red">cache</font>,权限为<font color="red">777</font>否则会报错! 好了,到此为止微博的内容已经可以很好的展示在自己的网站上了! Last modification:March 6th, 2020 at 09:29 am © 允许规范转载
想找一个不用代码调用新浪评论并保留原来的评论框的代码
就是看没有,所以才特地加了个首页,呵呵
必须的,呵呵,顺便问一下,你的站换不换首页链接的?
@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也是这样的
本人不懂,求帮助