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
一个PHP+MSSQL分页的例子
Oct 09 PHP
我用php+mysql写的留言本
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
php判断linux下程序问题实例
Jul 09 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
浅谈laravel中的关联查询with的问题
Oct 10 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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python编写登陆接口的方法
2017/07/10 Python
Python读取word文本操作详解
2018/01/22 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python发送告警邮件脚本
2018/09/17 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python flask中动态URL规则详解
2019/11/22 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
自荐书模板
2013/12/15 职场文书
小学班主任评语大全
2014/04/23 职场文书
建议书的格式
2014/05/12 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
微信小程序调用python模型
2022/04/21 Python