在如今移動互聯網時代,微博已經成爲了每一個人生活中必不可少的一個社交工具。而WordPress是全世界最爲流行的博客系統,把你的博客接入新浪微博,藉助微博的強大用戶羣,不只能給你的網站提供巨大的流量,並且還能帶來不可估量價值。php
WordPress微博牆就是這樣的一個工具,這不是一款普通的插件,這是一款搭建在SAE基於Yar的插件。它很是的輕量,它不像其餘的插件那樣,提供了很是多華麗卻不實用的功能,不只臃腫並且拖慢速度。這是一款基於Yar的插件,底層C語言開發,性能卓越。並且拓展性很好,能夠給你提供一下功能:html
1.我的微博牆
2.發佈文章同步到新浪微博
3.文章評論同步到新浪微博
接下來介紹一下基本結構:編程
這個類在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); }
該類是插件的實體,在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); }
該接口定義全部用戶認證須要的操做,包括獲取受權,刪除受權,檢查受權等,在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(); }
該接口定義全部與用戶微博操做相關的方法,包括髮表微博,讀取微博,讀取信息,刪除微博等等,在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); }
該接口負責提供數據給客戶端,以及一些客戶端須要的操做,繼承於微博操做接口,在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(); }
該類封裝與微博開放平臺通訊獲取用戶AccessToken後的回調操做post
class Callback { /** * 微博認證類對象 */ private $authObj; /** * 構造函數 * @param AuthDaoImpl 微博認證對象 */ public function __construct(AuthDaoImpl $obj); /** * 認證回調操做,保存AccessToken * @return boolean */ public function callback(); }
該入口主要是分發回調請求,以及建立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 "感謝您使用微博牆!"; } }
該入口實例化插件實體類,而且啓用插件
$plu = new Plugins(new Dao(get_bloginfo( 'url' ))); $plu -> run(get_option('weibo_wall'),get_option('weibo_func'));
整個過程就是這樣,業務邏輯很是簡單,代碼也很易懂。在使用的過程發覺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