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 相关文章推荐
MySQL授权问题总结
May 06 PHP
PHP JSON 数据解析代码
May 26 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
php实现插入排序
Mar 29 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
php TP5框架生成二维码链接
Apr 01 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
建立动态的WML站点(一)
2006/10/09 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
删除节点的jquery代码
2014/01/13 Javascript
js星星评分效果
2014/07/24 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
js制作可以延时消失的菜单
2017/01/13 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
JS实现小星星特效
2019/12/24 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
200行python代码实现2048游戏
2019/07/17 Python
python tkinter实现屏保程序
2019/07/30 Python
python中数据库like模糊查询方式
2020/03/02 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
平面设计专业大学生职业规划书
2014/03/12 职场文书
教师新年寄语
2014/04/03 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
大学辅导员述职报告
2015/01/10 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python