本文實例講述了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程序設計有所幫助。