多说评论实时同步回数据库
来源:互联网 发布:上杉升 知乎 编辑:程序博客网 时间:2024/06/06 20:28
说评论实时同步回数据库,依赖Http库,随便找一个就行
//多说
'DUOSHUO_SECRET'=>'78bd15a3d4fb3000657741a1319bbbbe',
'DUOSHUO_SHORT_NAME'=>'muxu',
参考 http://dev.duoshuo.com/threads/50037b11b66af78d0c000009
- <?php
- /**
- * 多说 实时同步评论回本地数据库 API
- */
- namespace Home\Controller;
- use Think\Controller;
- class DuoshuoController extends Controller {
- public function duoshuo(){
- if (check_signature($_POST)) {
- $Comment = M('comment');
- $where['name'] = array('in','last_log_id');
- $last_log_id = M('setting')->where($where)->getField('value');
- Vendor('CurlHTTP.Http');
- $limit = 20;
- $params = array(
- 'limit' => $limit,
- 'order' => 'asc',
- );
- $posts = array();
- if (!$last_log_id)
- $last_log_id = 0;
- $params['since_id'] = $last_log_id;
- $params['short_name'] = C(DUOSHUO_SHORT_NAME);
- $params['secret'] = C(DUOSHUO_SECRET);
- $http_client = new \Http();
- $response = $http_client->request('http://api.duoshuo.com/log/list.json', $params ,'GET');
- $response = json_decode($response,true);
- if (!isset($response['response'])) {
- //处理错误,错误消息$response['message'], $response['code']
- file_log("签名错误");
- } else {
- //遍历返回的response,你可以根据action决定对这条评论的处理方式。
- foreach($response['response'] as $k => $log){
- switch($log['action']){
- case 'create':
- foreach ($log['meta'] as $key => $value) {
- $create[$key]['post_id'] = $log['meta']['post_id'];
- $create[$key]['thread_id'] = $log['meta']['thread_id'];
- $create[$key]['author_id'] = $log['meta']['author_id'];
- $create[$key]['author_name'] = $log['meta']['author_name'];
- $create[$key]['author_email'] = $log['meta']['author_email'];
- $create[$key]['author_url'] = $log['meta']['author_url'];
- $create[$key]['author_key'] = $log['meta']['author_key'];
- $create[$key]['ip'] = $log['meta']['ip'];
- $create[$key]['created_at'] = $log['meta']['created_at'];
- $create[$key]['message'] = $log['meta']['message'];
- $create[$key]['status'] = $log['meta']['status'];
- $create[$key]['type'] = $log['meta']['type'];
- if($log['meta']['parent_id'] != ""){
- $create[$key]['parent_id'] = $log['meta']['parent_id'];
- }
- $create[$key]['thread_key'] = $log['meta']['thread_key'];
- $create[$key]['user_id'] = $log['user_id'];
- $create[$key]['date'] = $log['date'];
- }
- break;
- case 'approve':
- //这条评论是通过的评论
- foreach ($log['meta'] as $key => $value) {
- $approve[$key]['post_id'] .= $value.",";
- }
- break;
- case 'spam':
- //这条评论是标记垃圾的评论
- foreach ($log['meta'] as $key => $value) {
- $spam[$key]['post_id'] .= $value.",";
- }
- break;
- case 'delete':
- //这条评论是删除的评论
- foreach ($log['meta'] as $key => $value) {
- $delete[$key]['post_id'] .= $value.",";
- }
- break;
- case 'delete-forever':
- //彻底删除的评论
- foreach ($log['meta'] as $key => $value) {
- $delete_forever[$key]['post_id'] .= $value.",";
- }
- break;
- default:
- break;
- }
- // 更新处理数据
- switch($log['action']){
- case 'create':
- foreach ($create as $key => $value) {
- if($value != ""){
- $Comment->add($value);
- }
- break;
- }
- case 'approve':
- //这条评论是通过的评论
- foreach ($approve as $key => $value) {
- if($value != ""){
- $Comment->where(array('post_id'=>array('in',''. substr($value['post_id'], 0,-1) .'')))->setField('status','approved');
- }
- }
- break;
- case 'spam':
- //这条评论是标记垃圾的评论
- foreach ($spam as $key => $value) {
- if($value != ""){
- $Comment->where(array('post_id'=>array('in',''. substr($value['post_id'], 0,-1) .'')))->setField('status','spam');
- }
- }
- break;
- case 'delete':
- //这条评论是删除的评论
- foreach ($delete as $key => $value) {
- if($value != ""){
- $Comment->where(array('post_id'=>array('in',''. substr($value['post_id'], 0,-1) .'')))->setField('status','delete');
- }
- }
- break;
- case 'delete-forever':
- //彻底删除的评论
- foreach ($delete_forever as $key => $value) {
- if($value != ""){
- $Comment->where(array('post_id'=>array('in',''. substr($value['post_id'], 0,-1) .'')))->delete();
- }
- }
- break;
- default:
- break;
- }
- //更新last_log_id,记得维护last_log_id。(如update你的数据库)
- if (strlen($log['log_id']) > strlen($last_log_id) || strcmp($log['log_id'], $last_log_id) > 0) {
- M('setting')->where(array('name'=>"last_log_id"))->setField('value',$log['log_id']);
- }
- }
- }
- }
- }
- }
复制代码
- /**
- *
- * 多说检查签名
- *
- */
- function check_signature($input){
- $signature = $input['signature'];
- unset($input['signature']);
- ksort($input);
- $baseString = http_build_query($input, null, '&');
- $expectSignature = base64_encode(hmacsha1($baseString, C(DUOSHUO_SECRET)));
- if ($signature !== $expectSignature) {
- return false;
- }
- return true;
- }
- // from: http://www.php.net/manual/en/function.sha1.php#39492
- // Calculate HMAC-SHA1 according to RFC2104
- // http://www.ietf.org/rfc/rfc2104.txt
- // 多说
- function hmacsha1($data, $key) {
- if (function_exists('hash_hmac'))
- return hash_hmac('sha1', $data, $key, true);
- $blocksize=64;
- if (strlen($key)>$blocksize)
- $key=pack('H*', sha1($key));
- $key=str_pad($key,$blocksize,chr(0x00));
- $ipad=str_repeat(chr(0x36),$blocksize);
- $opad=str_repeat(chr(0x5c),$blocksize);
- $hmac = pack(
- 'H*',sha1(
- ($key^$opad).pack(
- 'H*',sha1(
- ($key^$ipad).$data
- )
- )
- )
- );
- return $hmac;
- }
复制代码
配置//多说
'DUOSHUO_SECRET'=>'78bd15a3d4fb3000657741a1319bbbbe',
'DUOSHUO_SHORT_NAME'=>'muxu',
参考 http://dev.duoshuo.com/threads/50037b11b66af78d0c000009
阅读全文
0 0
- 多说评论实时同步回数据库
- 多说评论框反向同步(同步数据到本地数据库)
- 多说评论一次导回 Typecho 本地数据库
- 多说评论嵌套
- 多说评论插件
- 多说 评论系统
- Jekyll 多说评论
- 多说评论常用代码
- Hexo 添加多说评论
- 多说社会化评论插件PHP版网站登陆同步 单项登陆 网站用户登陆同步到多说登陆框
- Hexo之使用Livere评论代替多说评论
- jekyll中使用多说评论系统
- Hexo中使用多说评论系统
- 为 Octopress 添加多说评论系统
- umbraco 集成多说评论组件
- Hexo中使用多说评论系统
- 给博客添加多说评论
- python django 添加多说评论框
- 博客前言
- Linux 的字符串截取
- java向上转型
- 关于用vector管理CImage时遇到的坑
- 《深度学习——Andrew Ng》第二课第二周编程作业
- 多说评论实时同步回数据库
- fragment 展示条目图片
- 第二周学习总结
- (转)终于把区块链的技术与应用讲清楚了ppt
- leetcode 11. Container With Most Water
- adb介绍以及常用命令
- Angular4.X 报错: Can't bind to 'ngModel' since it isn't a known property of 'input'
- java获取线程的返回值
- spring学习笔记叁——spring的bean注解