À l'ère de l'Internet mobile d'aujourd'hui, Weibo est devenu un outil social indispensable dans la vie de chacun. WordPress est le système de blogs le plus populaire au monde. Connecter votre blog à Sina Weibo et tirer parti de la solide base d'utilisateurs de Weibo peut non seulement fournir un trafic énorme à votre site Web, mais également apporter une valeur incommensurable.
WordPress Weibo Wall est un tel outil. Ce n'est pas un plug-in ordinaire. C'est un plug-in construit sur SAE et basé sur Yar. Il est très léger, contrairement à d'autres plug-ins qui offrent de nombreuses fonctions magnifiques mais peu pratiques, qui sont non seulement encombrées mais également ralenties. Il s'agit d'un plug-in basé sur Yar, développé dans le langage C sous-jacent et offrant d'excellentes performances. Et il est très évolutif et peut vous fournir les fonctions suivantes :
1. Mur Weibo personnel
2 Publiez des articles et synchronisez-les avec Sina Weibo
Synchronisez les commentaires des articles avec Sina Weibo
Ensuite, présentons la structure de base :
1 Classe d'opération de données de base
Cette classe se trouve dans le fichier Dao.class.php. Elle est le cœur du plug-in et est responsable de l'obtention des données du serveur
/** * * 用户数据获取类 * @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 Classe d'entité du plug-in
.Cette classe est l'entité du plug-in et se trouve dans Plugins. Défini dans class.php, elle est chargée d'appeler la classe Dao pour implémenter diverses fonctions, notamment l'entrée et la sortie, la configuration utilisateur et la gestion des autorisations
/** * 插件实体类 * @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. Opérations d'authentification côté serveur
Cette interface définit toutes les opérations requises pour l'authentification de l'utilisateur, y compris l'obtention de l'autorisation et la suppression de l'autorisation, la vérification de l'autorisation, etc. sont définies dans 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 Opération Weibo côté serveur
Cette interface définit toutes méthodes liées aux opérations des utilisateurs de Weibo, y compris la publication de Weibo, la lecture de Weibo, la lecture d'informations et la suppression de Weibo, etc., définies dans 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 Interface de fourniture de données côté serveur
Cette interface est chargée de fournir des données au client, ainsi que certaines opérations requises par le client, héritées de l'interface d'opération Weibo, dans la définition 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 Opération de rappel côté serveur
Cette classe encapsule l'opération de rappel après avoir communiqué avec la plateforme ouverte Weibo pour obtenir l'utilisateur AccessToken
class Callback { /** * 微博认证类对象 */ private $authObj; /** * 构造函数 * @param AuthDaoImpl 微博认证对象 */ public function __construct(AuthDaoImpl $obj); /** * 认证回调操作,保存AccessToken * @return boolean */ public function callback(); }
7 Entrée de l'application côté serveur
Cette entrée est principalement utilisée pour distribuer les demandes de rappel et créer des instances 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 Entrée de l'application client
Cette entrée instancie la classe d'entité du plug-in et active le plug-in in
$plu = new Plugins(new Dao(get_bloginfo( 'url' ))); $plu -> run(get_option('weibo_wall'),get_option('weibo_func'));
8 Résumé
L'ensemble du processus est comme ça. La logique métier est très simple et le code est facile à comprendre. Au cours du processus d'utilisation, j'ai trouvé que Yar est vraiment simple et pratique, et qu'il peut être parallélisé. Cependant, cela n’est pas reflété ici et une certaine optimisation peut être effectuée. Le client de ce plug-in s'appuie sur le framework Yar, qui est une extension développée sur la base du langage C. Mais peu importe si vous ne disposez pas de cette extension de framework. Nous avons déjà fourni une implémentation PHP pure de Yar. Vous pouvez l'utiliser sans y prêter attention, mais il est toujours recommandé d'utiliser Yar.
Le plug-in est conçu pour fournir seulement quelques fonctions, mais certaines personnes ont besoin d'autres fonctions, alors que devons-nous faire ? Nous avons également pris en compte cet aspect, le plug-in est donc très évolutif lors de sa conception, mais vous devez avoir quelques compétences en programmation PHP.
Comment étendre ses fonctions ?
1. Contactez l'auteur et indiquez-vous les fonctions dont vous avez besoin
2. L'auteur développe l'API de données correspondante
3 Vous appelez l'API en local Dao.class.php
4. et exécutez la logique métier correspondante