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上传、管理照片示例
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
php ss7.5的数据调用 (笔记)
Mar 08 PHP
php中随机显示图片的函数代码
Jun 23 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
php下载文件的代码示例
Jun 29 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 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 Ubb代码编辑器函数代码
2012/07/05 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
房地产广告词大全
2014/03/19 职场文书
装修协议书范本
2014/04/21 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫