오늘날의 모바일 인터넷 시대에 Weibo는 모든 사람의 삶에 없어서는 안될 소셜 도구가 되었습니다. WordPress는 세계에서 가장 인기 있는 블로그 시스템입니다. 귀하의 블로그를 Sina Weibo에 연결하고 Weibo의 강력한 사용자 기반을 활용하면 귀하의 웹사이트에 엄청난 트래픽을 제공할 수 있을 뿐만 아니라 헤아릴 수 없는 가치도 얻을 수 있습니다.
WordPress Weibo Wall은 일반적인 플러그인이 아니며 SAE를 기반으로 하는 플러그인입니다. 화려하지만 실용적이지 않은 기능을 많이 제공하는 다른 플러그인과 달리, 비대할 뿐만 아니라 속도도 느려지는 것과는 달리 매우 가볍습니다. Yar 기반 플러그인으로 기본 C 언어로 개발되었으며 성능이 뛰어납니다. 그리고 확장성이 뛰어나며 다음과 같은 기능을 제공할 수 있습니다.
1. 개인 Weibo 담벼락
2. 기사 게시 및 Sina Weibo에 동기화
3. Sina Weibo에 기사 댓글 동기화
다음으로 기본 구조를 소개하겠습니다.
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 플러그인 엔터티 클래스
이 클래스는 플러그인의 개체로, 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 서버 측 Weibo 작업
이 인터페이스는 모든 작업을 정의합니다. WeiboDao.php에 정의된 Weibo 게시, Weibo 읽기, 정보 읽기, Weibo 삭제 등을 포함하여 사용자 Weibo 작업과 관련된 방법
/** * 微博操作类接口 * @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 서버 측 콜백 작업
이 클래스는 Weibo 개방형 플랫폼과 통신한 후 콜백 작업을 캡슐화하여 사용자 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 클라이언트 애플리케이션 입구
이 입구는 플러그인 엔터티 클래스를 인스턴스화하고 플러그인을 활성화합니다. in
$plu = new Plugins(new Dao(get_bloginfo( 'url' ))); $plu -> run(get_option('weibo_wall'),get_option('weibo_func'));
8 요약
전체 과정은 이렇습니다. 비즈니스 로직은 매우 간단하고 코드도 이해하기 쉽습니다. 사용 과정에서 Yar가 정말 간단하고 실용적이며 병렬화될 수 있다는 것을 알게 되었습니다. 그러나 여기에는 반영되지 않았으며 일부 최적화는 가능합니다. 이 플러그인의 클라이언트는 C 언어를 기반으로 개발된 확장인 Yar 프레임워크를 사용합니다. 하지만 이 프레임워크 확장이 없어도 문제가 되지 않습니다. 우리는 이미 Yar의 순수 PHP 구현을 제공하고 있으므로 주의를 기울이지 않고도 사용할 수 있지만 여전히 Yar를 사용하는 것이 좋습니다.
플러그인은 몇 가지 기능만 제공하도록 설계되어 있는데, 다른 기능이 필요한 분들도 계시는데 어떻게 해야 할까요? 우리는 이 측면도 고려했기 때문에 플러그인을 디자인할 때 확장성이 매우 뛰어나지만 PHP 프로그래밍 기술이 있어야 합니다.
기능을 확장하는 방법은 무엇입니까?
1. 작성자에게 연락하여 필요한 기능을 알려주세요.
2. 작성자가 해당 데이터 API를 개발합니다.
3. 로컬 Dao.class.php에서 API를 호출합니다.
4. 해당 비즈니스 Logic