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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
PHP基于单例模式实现的数据库操作基类
Jan 15 PHP
thinkphp3.2实现上传图片的控制器方法
Apr 28 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Python-接口开发入门解析
2019/08/01 Python
python多线程和多进程关系详解
2020/12/14 Python
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
上班睡觉检讨书
2014/01/09 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2014年财政工作总结
2014/12/10 职场文书
高三复习计划
2015/01/19 职场文书
维稳工作承诺书
2015/01/20 职场文书
计生个人工作总结
2015/02/28 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python