SAE实时日志接口SDK用法示例


Posted in PHP onOctober 09, 2016

本文实例讲述了SAE实时日志接口SDK用法。分享给大家供大家参考,具体如下:

新浪SAE是新浪研发中心开发的国内首个公有云平台,从2009年开始到现在也是也来越成熟,开放了很多接口以及服务供开发者使用。这次为了方便开发者调试分析,SAE新增实时日志查询接口。今后您可以通过API对日志信息进行筛选,并下载所需的实时日志。但是新浪SAE官方只给出的Python的实现,这里给出PHP版本的接口调用SDK

class SaeApiHandler{
  /**
  *  定义accessKey
  */
  private $accessKey;
  /**
  *  定义secretKey
  */
  private $secretKey;
  /**
  *  定义时间戳
  */
  private $timestamp;
  /**
  *  构造函数
  */
  public function __construct($key,$sec){
    $this->accessKey = $key;
    $this->secretKey = $sec;
    $this->timestamp = time();
  }
  /**
  *  重载get方法
  */
  public function __call($name,$arg){
    $ret = array();
    if (is_array($arg[0])) {
      $len = count($arg);
      for ($i=0; $i < $len; $i++) {
        $ret[$i] = $arg[$i]['fop'] ? $this->$name($arg[$i]['service'],$arg[$i]['date'],$arg[$i]['ident'],$arg[$i]['fop']):$this->$name($arg[$i]['service'],$arg[$i]['date'],$arg[$i]['ident']);
      }
    }else{
      $ret = $arg[3] ? $this->$name($arg[0],$arg[1],$arg[2],$arg[3]) : $this->get($arg[0],$arg[1],$arg[2]);
    }
    return $ret;
  }
  /**
  *  获取日志
  *  @param string 需要的日志
  *  @param string 时间
  *  @param string 日志类型
  *  @param string 过滤符
  *  @return array
  */
  private function getLog($service,$date,$ident,$fop=null){
    if ($fop) {
      $uri = '/log/'.$service.'/'.$date.'/'.$_SERVER['HTTP_APPVERSION'].'-'.$ident.'.log?'.$fop;
    }else{
      $uri = '/log/'.$service.'/'.$date.'/'.$_SERVER['HTTP_APPVERSION'].'-'.$ident.'.log';
    }
    $ret = explode(PHP_EOL,$this->get($uri));
    array_splice($ret,0,7);
    array_pop($ret);
    return $ret;
  }
  private function get($uri){
    $host = 'http://g.sae.sina.com.cn'.$uri;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$host);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $this->saeHeader($uri));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $ret = curl_exec($ch);
    curl_close($ch);
    return $ret;
  }
  /**
  *  SAE请求头
  *  @return array
  */
  private function saeHeader($uri){
    return array(
        'Host: g.sae.sina.com.cn',
        'Accept: text/plain',
        'x-sae-accesskey: '.$this->accessKey,
        'x-sae-timestamp: '.$this->timestamp,
        'Authorization: '. $this->getAuthorization($uri)
      );
  }
  /**
  *  获取gAuthorization
  */
  private function getAuthorization($uri){
    $header = array(
        'x-sae-timestamp' => $this->timestamp,
        'x-sae-accesskey' => strtolower($this->accessKey)
      );
    ksort($header);
    $sae_header = array('GET',$uri);
    foreach ($header as $key => $value) {
      $sae_header[count($sae_header)] = $key.':'.$value;
    }
    $ret = implode(PHP_EOL, $sae_header);
    $auth = 'SAEV1_HMAC_SHA256 '.base64_encode(hash_hmac('sha256',$ret,$this->secretKey,true));
    return $auth;
  }
}

使用也很简单,实例化SaeApiHandler类,调用getLog()方法即可。该方法可以传递数组参数或者字符串,具体可以到SAE文档看,如果需要返回多组日志,则传递多个数组即可。

$test = new SaeApiHandler(SAE_ACCESSKEY,SAE_SECRETKEY);
$arr1 = array(
  'service'=>'http',
  'date'=>'2015-07-03',
  'ident'=>'access',
  'fop'=>'head/1/5'
  );
$arr2 = array(
  'service'=>'http',
  'date'=>'2015-07-03',
  'ident'=>'access',
  'fop'=>'head/1/5'
  );
$ret = $test->getLog($arr1,$arr2);
var_dump($ret);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
fleaphp rolesNameField bug解决方法
Apr 23 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
php实现的二分查找算法示例
Jun 20 PHP
php工具型代码之印章抠图
Jul 18 PHP
对PHP依赖注入的理解实例分析
Oct 09 #PHP
mac下多个php版本快速切换的方法
Oct 09 #PHP
Laravel中间件实现原理详解
Oct 09 #PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 #PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 #PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 #PHP
Laravel日志用法详解
Oct 09 #PHP
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
python做接口测试的必要性
2019/11/20 Python
如何使用Pytorch搭建模型
2020/10/26 Python
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
毕业生找工作推荐信
2013/11/21 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
趣味体育活动方案
2014/02/08 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
星级党支部申报材料
2014/05/31 职场文书
树转促学习心得体会
2014/09/10 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
基于Python实现对比Exce的工具
2022/04/07 Python
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
PyTorch中permute的使用方法
2022/04/26 Python