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 相关文章推荐
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
php 运行效率总结(提示程序速度)
Nov 26 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
PHP CURL使用详解
Mar 21 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
python中的变量如何开辟内存
2018/06/26 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python底层封装实现方法详解
2020/01/22 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
jQuery treeview树形结构应用
2021/03/24 jQuery
医学专业自荐信
2014/06/14 职场文书
药店促销活动总结
2014/07/10 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
先进事迹材料范文
2014/12/29 职场文书
九寨沟导游词
2015/02/02 职场文书
会议简讯范文
2015/07/20 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技