分享一個基于Yar的WordPress微博墻插件

在現在移動互聯網時代,微博已經成為了每個人生活中必不可少的一個社交工具。而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中獲取數據并執行相應業務邏輯

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享