基於Yar的WordPress微博牆插件

在如今移動互聯網時代,微博已經成爲了每一個人生活中必不可少的一個社交工具。而WordPress是全世界最爲流行的博客系統,把你的博客接入新浪微博,藉助微博的強大用戶羣,不只能給你的網站提供巨大的流量,並且還能帶來不可估量價值。php

WordPress微博牆就是這樣的一個工具,這不是一款普通的插件,這是一款搭建在SAE基於Yar的插件。它很是的輕量,它不像其餘的插件那樣,提供了很是多華麗卻不實用的功能,不只臃腫並且拖慢速度。這是一款基於Yar的插件,底層C語言開發,性能卓越。並且拓展性很好,能夠給你提供一下功能:html

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定義wordpress

/**
*	認證操做類接口
*	@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後的回調操做post

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中獲取數據並執行相應業務邏輯

做者博客:http://www.xtwind.com
原文地址:http://www.xtwind.com/yar-wordpress-twitter-wall-plug-in.html

相關文章
相關標籤/搜索