本文实例讲述了SAE实时日志接口SDK用法。分享给大家供大家参考,具体如下:
新浪SAE是新浪研发中心开发的国内首个公有云平台,从2009年开始到现在也是也来越成熟,开放了很多接口以及服务供开发者使用。这次为了方便开发者调试分析,SAE新增实时日志查询接口。今后您可以通过API对日志信息进行筛选,并下载所需的实时日志。但是新浪SAE官方只给出的Python的实现,这里给出PHP版本的接口调用SDK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
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文档看,如果需要返回多组日志,则传递多个数组即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$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程序设计有所帮助。