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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
destoon各类调用汇总
Jun 20 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 PHP
PHP控制循环操作的时间
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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
php多文件上传实现代码
2014/02/20 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
python字符串连接方式汇总
2014/08/21 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python实现端口检测的方法
2018/07/24 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python中类与对象之间的关系详解
2020/12/16 Python
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
旅游网创业计划书
2014/01/31 职场文书
运动会入场式解说词
2014/02/18 职场文书
质量月活动策划方案
2014/03/10 职场文书
请假条范文大全
2014/04/10 职场文书
园艺师求职信
2014/04/27 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
情人节活动总结范文
2015/02/05 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫