前几天突然心血来潮想给自己的Cydia源添加查看现在已用流量的功能(因为我放在限制流量的VPS上)。此VPS使用的是SolusVM控制面板,我在查阅了SolusVM官方的文档后写了一段代码,下面就分享出来吧~~
准备工作
在使用SolusVM API前,需要获取API Key和API Hash。其实很简单,登入VPS的控制面板后,点击API选项卡,生成一个接口就可以了。
文档
在正式使用代码之前推荐查看SolusVM的官方文档,可以更加清晰地了解代码的作用,官方文档中也写了一些基本的应用代码等。
官方文档:http://docs.solusvm.com/client_api
PHP代码
curl
SolusVM API支持GET以及POST方式来使用。但是在大部分VPS中使用POST方式会失败,因此推荐使用GET方式(把参数写在url里)。同时,大部分SolusVM控制面板使用的是ssl连接,使用file_get_contents函数会报错,因此您的空间必须要支持curl。
以下是封装的curl获取数据函数,应该是比较完善的curl封装了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function curlGet($url,$method='get',$data='',$cookie=''){ $ch = curl_init(); $header[] = "Accept-Charset: utf-8"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method)); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $temp = curl_exec($ch); return $temp; } |
从API获取数据
现在可以使用curl从API获取数据了。
基本参数:https://< 控制面板域名>:5656/api/client/command.php?key=
其中Flags为可选参数,Action名、返回的数据格式等具体的还是请看官方文档啦。在这里我要获取流量数据,所以最后的参数为bw=true
。
将数据转换为数组
只获取了数据还是不够的,并不能被PHP所使用,因此使用正则匹配将数据转换为数组,之后使用$result[参数名]
就可以调用了。
1 2 3 4 5 6 |
preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $match); $result = array(); foreach ($match[1] as $x => $y) { $result[$y] = $match[2][$x]; } |
变量赋值
现在我们获取的流量值还是一连串地保存在变量$result['bw']
中,原始数据的格式为:<bw>total,used,free,percentused</bw>
。所以我们要使用list函数将值分别赋值到变量中。
1 |
list($bwTotal, $bwUsed, $bwFree, $bwPercent) = explode(',', (strpos($result['bw'], ',')) ? $result['bw'] : '0,0,0,0'); |
单位转换
现在几乎接近成功啦!但是我们可以观察到,API返回的流量数值是一大串数字,单位是位(Bytes)。这么一大串的数字根本不便于观察嘛,因此我们还需要一段单位转换函数。
1 2 3 4 5 6 |
function displayBytes($bytes){ $ext = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $unitCount = 0; for(; $bytes > 1024; $unitCount++) $bytes /= 1024; return round($bytes, 2) . ' ' . $ext[$unitCount]; } |
使用
好了,至此只要再写一段输出代码就完成了。下面贴上一段我在源内使用的代码。
1 2 3 4 5 |
<p><strong>服务器本月</strong></p><p style="text-align: left;">已用流量: <?php echo displayBytes($bwUsed).' / '.displayBytes($bwTotal);?><br />剩余流量: <?php echo displayBytes($bwFree);?></p> <div class="progress"> <div class="bar" style="width: <?php echo $bwPercent;?>%;"><?php echo $bwPercent;?>%</div> </div> <p></p> |
小结
以上代码的最终效果可以在源主页查看到哦~
SolusVM是十分方便的VPS控制面板,而且API功能真的十分人性化。SolusVM API能实现的功能并不止这么点,它还能无需登录就实现启动、关闭、重启、查看VPS状态等功能,能使用好它绝对能节省大量的时间啊~~不过其他的功能还是要自己看官方文档慢慢摸索喽。
代码写的实用
很专业的文章,点赞!