在現在行動網路時代,微博已經成為了每個人生活中必不可少的一個社交工具。而WordPress是全世界最為流行的部落格系統,把你的部落格連接到新浪微博,借助微博的強大用戶群,不僅能給你的網站提供巨大的流量,而且還能帶來不可估量價值。
WordPress微博牆就是這樣的一個工具,這不是一款普通的插件,這是一款搭建在SAE基於Yar的插件。它非常的輕量,它不像其他的插件那樣,提供了非常多華麗卻不實用的功能,不僅臃腫而且拖慢速度。這是一款基於Yar的插件,底層C語言開發,性能卓越。而且拓展性很好,可以提供你功能:
1.個人微博牆
2.發布文章同步到新浪微博
3.文章評論同步到新浪微博
接下來介紹一下基本結構:
1 核心資料操作類別
這個類別在Dao.class.php檔案中,它是插件的核心,負責去服務端取得資料
/** * * 用户数据获取类 * @author 夏天 * @date 2015年6月28日 * @site http://www.xtwind.com * */ class Dao{ /** * 微博RPC操作对象 */ private $client; /** * 用户标识 */ private $mark; /** * 构造函数设置用户标识 */ function __construct($state); /** * 返回用户标识 */ public function getMark(); /** * 启用插件 * @return 成功返回true,失败返回认证地址 */ public function run(); /** * 获取授权情况 * @return string 返回过期时间,未登录或者过期返回false */ public function getAuthOver(); /** * 删除授权 * @return boolean */ public function delAuth(); /** * 获取认证跳转url * @return string */ public function getAuthUrl(); /** * 获取用户微博列表 * @return array */ public function getWeibo(); /** * 获取用户基本信息 * @return array */ public function getUser(); /** * 发布微博 * @return Array 返回微博数据数组 */ public function weiboPub($content,$imgUrl=null); /** * 删除微博 * @param int 微博ID * @return Array 返回被删除微博数据数组 */ public function weiboDel($weiboID); /** * 发布一条评论过 * @param int 微博ID * @param string 评论内容 * @return array 评论相关数组 */ public function sendComment($id,$comment); /** * 关注一个用户 * @param 用户ID或者名字 * @return 返回关注者信息 */ public function followUser($user); /** * 转发微博 * @param int 微博id * @param string 添加的内容 */ public function forwardWeibo($id,$text=null); }
2 插件實體類別
該類別是插件的實體,在Plugins.class.php中定義,負責呼叫Dao類別來實現各種功能,包括輸入輸出,使用者配置,授權管理
/** * 插件实体类 * @Author:Summer * @data: 2015-06-28 * @site: http://www.xtwind.com */ class Plugins{ /** * 数据获取类对象 */ private $dao; /** * 插件显示别名 */ private $slug = 'weibo-wall'; /** * 插件页url */ private $plugUrl ; /* * 插件构造 * @param 用户数据操作类 */ public function __construct(Dao $obj); /** * 启用插件,注册钩子,调用用户函数,删除授权,发表微博 * @param array 插件设置选项关联数组,key必须为对应的操作方法,该数组中的键会被注册为wordpress相应钩子 * @param array 需要过滤的动作,该数组中键不会被注册为钩子,但是会作为方法被调用,值为方法的参数 */ public function run($arr1=null,$arr2=null); /** * 插件主页显示 */ public function display_function(); /** * 新文章同步发布微博 * @param int 文章ID */ public function publish_post($postID); /** * 删除文章同步删除微博 * @param int 文章ID */ public function before_delete_post($postID); /** * 收到评论同步到微博评论 * @param id 评论id */ public function comment_post($commentID); /** * 关注作者 */ public function follow_author($userid); /** * 用户微博数据获取 */ public function weiboOuput( $atts=null, $content = null ); /** * 数据页面输出 */ public function showWeibo(); /** * 图片URL处理 * @param string */ private function getOriginalUrl($url); /** * 时间转换 * @param string */ private function Sec2Time($time); /** * 插件设置key获取 * @param string 需要设置的key */ private function setting_key($key,$func=false); /** * 插件设置value获取 * @param string 需要获取的value */ private function get_setting($key,$func=false); /** * 插件设置删除 */ private function del_setting(); /** * 提示信息 * @param string */ private function noticeMsg($msg); }
3 服務端認證操作
此介面定義所有使用者認證所需的操作,包括取得授權,刪除授權,檢查授權等,在AuthDao.php定義
/** * 认证操作类接口 * @author 夏天 * @date 2015年6月18日 * @site http://www.xtwind.com */ interface AuthDao{ /** * 设置用户AccessToken * @return boolean */ public function setAccessToken(); /** * 获取用户AccessToken * @return String */ public function getAccessToken(); /** * 删除用户AccessToken * @return boolean */ public function delAccessToken(); /** * 判断用户AccessToken是否存在 * @return boolean */ public function isLogin(); /** * 获取认证跳转url * @return string */ public function getAuthUrl(); /** * 授权过期时间 * @return string */ public function getAuthOver(); }
4 服務端微博操作
該介面定義所有與用戶微博操作相關的方法,包括發表微博,讀取微博,讀取訊息,刪除微博等等,在WeiboDao. php定義
/** * 微博操作类接口 * @author 夏天 * @date 2015年6月18日 * @site http://www.xtwind.com */ interface WeiboDao { /** * 获取用户微博信息列表 * @param int 获取数量 * @param int 类型过滤 0:全部、1:原创、2:图片、3:视频、4:音乐,默认为0。 * @return String */ public function getWeibo(); /** * 获取用户基本信息 * @return Array */ public function getUser(); /** * 发布微博 * @return Array 返回微博数据数组 */ public function weiboPub($content,$imgUrl); /** * 删除微博 * @return Array 返回被删除微博数据数组 */ public function weiboDel($weiboID); /** * 发布一条评论 * @param integer 微博ID * @param string 评论内容 */ public function sendComment($id,$comment); /** * 关注一个用户 * @param 用户ID或者名字 * @return 返回关注者信息 */ public function followUser($user); /** * 转发微博 * @param int 微博id * @param string 添加的信息 */ public function forwardWeibo($id,$text=null); }
5 服務端資料提供介面
該介面負責提供資料給客戶端,以及一些客戶端所需的操作,繼承於微博操作接口,在APIDao.php中定義
/** * 对外提供服务类接口,继承于微博操作接口 * @author 夏天 * @date 2015年6月18日 * @site http://www.xtwind.com */ interface DaoAPI extends WeiboDao{ /** * 删除用户AccessToken * @return boolean */ public function delAccessToken(); /** * 判断用户AccessToken是否存在 * @return boolean */ public function isLogin(); /** * 获取认证跳转url * @return string */ public function getAuthUrl(); /** * 授权过期时间 * @return string */ public function getAuthOver(); }
6 服務端回呼操作
該類別封裝與微博開放平台通訊取得使用者AccessToken後的回呼操作
class Callback { /** * 微博认证类对象 */ private $authObj; /** * 构造函数 * @param AuthDaoImpl 微博认证对象 */ public function __construct(AuthDaoImpl $obj); /** * 认证回调操作,保存AccessToken * @return boolean */ public function callback(); }
7 服務端應用程式入口
此入口主要是分發回呼請求,以及創建RPC實例
if($_GET['code']){ $keys = array( 'code' => $_GET['code'], 'redirect_uri' => APP_CALLBACK ); $back = new Callback(new AuthDaoImpl($_GET['state'],$keys)); if($back->callback()){ header('Location: '.$_GET['state'].'/wp-admin/options-general.php?page=weibo-wall'); } exit; } if($_GET['user']){ $server = new Yar_Server(new API($_GET['user'])); try{ $server->handle(); }catch(Exception $e){ echo "感谢您使用微博墙!"; } }
7 用戶端應用入口
該入口實例化插件實體類,並且啟用插件
$plu = new Plugins(new Dao(get_bloginfo( 'url' ))); $plu -> run(get_option('weibo_wall'),get_option('weibo_func'));
8 總結
整個過程就是這樣,業務邏輯非常簡單,程式碼也很容易理解。在使用的過程發覺Yar真的很簡單實用,而且是可並行化的。不過在這裡並沒有體現出來,可以再做一些優化處理。該外掛程式的客戶端依賴Yar框架,這是一個基於C語言開發的拓展。但沒有該框架拓展也沒關係,我們已經給了Yar的純PHP實現,你完全可以不去理會這個就能使用,但還是建議你使用Yar。
外掛程式在設計的時候只提供了很少的功能,但是有些人需要其他的功能,那該怎麼辦呢?這方面我們也是有考慮,所以在設計的時候該插件的拓展性非常良好,不過你要有一些PHP編程的功底。
如何拓展他的功能?
1.聯絡作者,告訴你需要的功能
2.作者開發對應的資料API
3.你在本地Dao.class.php呼叫API
4.在Plugins. class.php中取得資料並執行對應業務邏輯